linux下MBR方式分区非主分区扩容文件系统

2020-06-10 19:30:49 浏览数 (1)

背景:
使用腾讯云云服务器时,将扩容部分的容量划分至原有分区(MBR),使用官网提供的脚本扩容时,如果分区号不是主分区1(如vdb1、vdc1时),无法使用脚本一键完成文件系统扩容

注意:做快照!做快照!做快照!针对磁盘操作先做快照备份

示例: 分区为主分区 vdb2 时,使用脚本扩容直接报错了,提示非主分区(其实这里还是主分区,只不过不是第一个分区)

代码语言:javascript复制
root@BJ-CentOS7 ~ # lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /
vdb    253:16   0  10G  0 disk 
└─vdb2 253:18   0   5G  0 part /vdb2
root@BJ-CentOS7 ~ # python /tmp/devresize.py /dev/vdb
[ERROR] - Must be primary partition.
手动扩容步骤:
代码语言:javascript复制
1. 解挂载分区 /dev/vdb2,如果提示磁盘被占用的错误,可以使用 fuser -um 指定分区或挂载点查看是什么进程及用户在占用,关闭对应进程后重试 umount 操作
2. 备份当前分区表
3. fdisk 重建分区(扩容分区),删除原有分区,重新分区时将扩容磁盘增加的扇区增加到新建分区上,并保存配置(注意原有分区如果扇区开始位置非默认的2048,重建分区时需要注意指定原有分区的扇区开始位置,扇区结束位置默认最大即可,或者也可以自定义增加部分到原有分区上)
下列示例中我们重建的分区为主分区vdb1,这样后期再扩容也方便使用脚本一键扩容
4. 执行 e2fsck -f /dev/vdb1 检查分区完整性
5. 执行 resize2fs /dev/vdb1 扩容文件系统
6. 挂载校验,文件系统容量扩容成功,之前的数据也没受影响

扩容示例1:主分区,分区号不为1,扩容前分区为主分区vdb2
代码语言:javascript复制
root@BJ-CentOS7 ~ # ls /vdb2/
10.txt  11.txt  12.txt  13.txt  14.txt  15.txt  16.txt  17.txt  18.txt  19.txt  1.txt  20.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  lost found
root@BJ-CentOS7 ~ # lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /
vdb    253:16   0  10G  0 disk 
└─vdb2 253:18   0  90M  0 part /vdb2
root@BJ-CentOS7 ~ # df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda1        50G  8.4G   39G   18% /
devtmpfs        1.9G     0  1.9G    0% /dev
tmpfs           1.9G   72K  1.9G    1% /dev/shm
tmpfs           1.9G   13M  1.9G    1% /run
tmpfs           1.9G     0  1.9G    0% /sys/fs/cgroup
192.168.1.14:/   10G   66M   10G    1% /cfs
tmpfs           380M     0  380M    0% /run/user/0
/dev/vdb2        84M  1.6M   76M    2% /vdb2
root@BJ-CentOS7 ~ # umount /dev/vdb2 
root@BJ-CentOS7 ~ # dd if=/dev/vdb of=./vdbmbr-05-30.bak bs=512 count=1
记录了1 0 的读入
记录了1 0 的写出
512字节(512 B)已复制,0.000679262 秒,754 kB/秒
root@BJ-CentOS7 ~ # fdisk /dev/vdb 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb2            2048    10487807     5242880   83  Linux
命令(输入 m 获取帮助):d
已选择分区 2
分区 2 已删除
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区,  扇区 or  size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   83  Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
root@BJ-CentOS7 ~ # e2fsck -f /dev/vdb1 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vdb1: 31/23040 files (3.2% non-contiguous), 8563/92160 blocks
root@BJ-CentOS7 ~ # resize2fs /dev/vdb1 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vdb1 to 10475520 (1k) blocks.
The filesystem on /dev/vdb1 is now 10475520 blocks long.
root@BJ-CentOS7 ~ # mount /dev/vdb1 /vdb1/
root@BJ-CentOS7 ~ # ls /vdb1/
10.txt  11.txt  12.txt  13.txt  14.txt  15.txt  16.txt  17.txt  18.txt  19.txt  1.txt  20.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  lost found

扩容示例2:逻辑分区,扩容前逻辑分区为vdb5
代码语言:javascript复制
root@BJ-CentOS7 ~ # lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /
vdb    253:16   0  10G  0 disk 
├─vdb1 253:17   0   1K  0 part 
└─vdb5 253:21   0   2G  0 part /vdb5
vdc    253:32   0  10G  0 disk 
root@BJ-CentOS7 ~ # fdisk -l /dev/vdb 
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930root@BJ-CentOS7 ~ # fdisk -l /dev/vdb 
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048     4196351     2097152    5  Extended
/dev/vdb5            4096     4196351     2096128   83  Linux
root@BJ-CentOS7 ~ # lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /
vdb    253:16   0  10G  0 disk 
├─vdb1 253:17   0   1K  0 part 
└─vdb5 253:21   0   2G  0 part /vdb5
vdc    253:32   0  10G  0 disk 
root@BJ-CentOS7 ~ # ls /vdb5/
a.txt  c.txt  e.txt  g.txt  i.txt  k.txt       l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
b.txt  d.txt  f.txt  h.txt  j.txt  lost found  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
root@BJ-CentOS7 ~ # umount /dev/vdb5 
root@BJ-CentOS7 ~ # fdisk /dev/vdb 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048     4196351     2097152    5  Extended
/dev/vdb5            4096     4196351     2096128   83  Linux
命令(输入 m 获取帮助):d
分区号 (1,5,默认 5):5  
分区 5 已删除
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): e
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区,  扇区 or  size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Extended 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736    5  Extended
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 1 extended, 3 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (4096-20971519,默认为 4096):
将使用默认值 4096
Last 扇区,  扇区 or  size{K,M,G} (4096-20971519,默认为 20971519):
将使用默认值 20971519
分区 5 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736    5  Extended
/dev/vdb5            4096    20971519    10483712   83  Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
root@BJ-CentOS7 ~ # partprobe         #重读分区表,可以看出来分区扩容成功,此步骤可以忽略
root@BJ-CentOS7 ~ # fdisk -l /dev/vdb 
磁盘 /dev/vdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6930d8a2
   设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736    5  Extended
/dev/vdb5            4096    20971519    10483712   83  Linux
root@BJ-CentOS7 ~ # e2fsck -f /dev/vdb5 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vdb5: 37/131072 files (0.0% non-contiguous), 17964/524032 blocks
root@BJ-CentOS7 ~ # resize2fs /dev/vdb5 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vdb5 to 2620928 (4k) blocks.
The filesystem on /dev/vdb5 is now 2620928 blocks long.
root@BJ-CentOS7 ~ # lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  50G  0 disk 
└─vda1 253:1    0  50G  0 part /
vdb    253:16   0  10G  0 disk 
├─vdb1 253:17   0   1K  0 part 
└─vdb5 253:21   0  10G  0 part 
vdc    253:32   0  10G  0 disk 
root@BJ-CentOS7 ~ # mount /dev/vdb5 /vdb5/
root@BJ-CentOS7 ~ # ls /vdb5/
a.txt  c.txt  e.txt  g.txt  i.txt  k.txt       l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
b.txt  d.txt  f.txt  h.txt  j.txt  lost found  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
root@BJ-CentOS7 ~ # df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/vda1        50G  8.9G   38G   20% /
devtmpfs        1.9G     0  1.9G    0% /dev
tmpfs           1.9G  104K  1.9G    1% /dev/shm
tmpfs           1.9G   13M  1.9G    1% /run
tmpfs           1.9G     0  1.9G    0% /sys/fs/cgroup
192.168.1.14:/   10G   66M   10G    1% /cfs
tmpfs           380M     0  380M    0% /run/user/0
/dev/vdb5       9.9G  9.0M  9.3G    1% /vdb5
root@BJ-CentOS7 ~ # 

0 人点赞