背景:
使用腾讯云云服务器时,将扩容部分的容量划分至原有分区(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 ~ #