Linux数据盘扩展分区
概述
扩容只是将磁盘的存储容量扩大,不会扩展分区和文件系统,您仍需要手动完成后续操作才可以对磁盘进行使用。
说明:
若您对Windows系统实例进行操作,请您查看Windows数据盘分区。
操作指南
本文以 CentOS 6.5 x86_64 (64bit)系统中数据盘扩容为例,其余 Linux 系统中的操作方式类似。
登录实例并查看状态
1.登录 BCC 实例
您可以通过多种方式登录 BCC 实例,具体登录方式您可以查看登录实例。
2.查看当前分区状态和分区方式
执行 fdisk -l
查看当前分区大小。当前已挂载数据盘 /dev/vde,且该磁盘已由 50GB 扩展到 100GB。
[root@instance-xxxx ~]# fdisk -l
磁盘 /dev/vda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b8163
设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 83886046 41941999+ 83 Linux
磁盘 /dev/vde:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x63ffc036
设备 Boot Start End Blocks Id System
/dev/vde1 2048 104857599 52427776 83 Linux
说明:
- 若您的磁盘容量小于 2TB,您可以使用 MBR 或者 GPT 方式完成分区和文件系统扩展;若您的磁盘在扩容后容量大于 2TB 但既有分区方式为 MBR,您需要切换分区方式至 GPT。此时,如果您需要保留数据,建议您创建新磁盘,并采用 GPT 方式初始化该新磁盘分区,再将已有数据拷贝至新磁盘。
3.查看文件系统类型
执行 blkid
命令查看当前文件系统的类型。当前数据盘 /dev/vde1 的文件系统类型为 ext4
。
[root@instance-xxxx ~]# blkid
/dev/vda1: UUID="84953f78-xxxx-4dbd-ac60-aaabc2e4cb9c" TYPE="ext4"
/dev/vde1: UUID="cb664382-xxxx-49f0-874e-d68d8cba0141" TYPE="ext4"
4.查看文件系统运行状态
若您的文件系统是 ext 文件系统,您可以执行 e2fsck -n /dev/vd*
命令查看;若您的文件系统是 xfs 文件系统,您可以执行 xfs_repair -n /dev/vd*
命令查看。当运行结果中显示 clean 时,证明您当前的文件系统运行正常;若非 clean 状态,请您及时检查。
[root@instance-xxxx ~]# e2fsck -n /dev/vde1
e2fsck 1.42.9 (28-Dec-2013)
Warning! /dev/vde1 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/vde1: clean, 11/3276800 files, 251790/13106944 blocks
在完成上述步骤后,您需要确认当前磁盘的具体操作方式。操作方式的选择依赖于数据盘当前的状态和已挂载文件系统的运行状态,同时取决于您在扩容分区操作完成后想要实现的磁盘划分形式。结合以上三种因素,您可以选择对应的操作方式。
数据盘状态 | 文件系统状态 | 期望实现的划分形式 | 操作方式 |
---|---|---|---|
已分区 | 已创建 | 当磁盘暨有分区方式为 MBR,且您希望扩大当前已有分区容量 | 扩容已有 MBR 磁盘分区 |
当磁盘暨有分区方式为 MBR,且您希望将当前正在扩容的区域添加为一个独立的新的 MBR 磁盘分区 | 添加新的 MBR 磁盘分区 | ||
当磁盘暨有分区方式为 GPT,且您希望扩大当前已有分区容量 | 扩容已有 GPT 磁盘分区 | ||
当磁盘暨有分区方式为 GPT,且您希望将当前正在扩容的区域添加为一个独立的新的 GPT 磁盘分区 | 添加新的 GPT 磁盘分区 | ||
未分区 | 未创建 | 您希望完成对该磁盘进行分区并创建文件系统 | 格式化磁盘 |
未分区 | 已创建 | 您希望在已有文件系统基础上直接扩容文件系统 | 扩容裸设备文件系统 |
当您的数据盘未分区,且文件系统未创建时,您需要格式化该磁盘,具体操作方式请查看格式化磁盘。其他操作方式的后续操作步骤,请根据右侧目录直接点击对应操作名称查看。
扩容已有 MBR 磁盘分区
本示例将已有分区由 50GB 扩容为 100GB。
1. 查看当前文件系统挂载点
执行命令 mount | grep "/dev/vde"
以查看当前磁盘 /dev/vde
的挂载点。执行后可以看到挂载点为 /mnt
。
[root@instance-xxxx ~]# mount | grep "/dev/vde"
/dev/vde1 on /mnt type ext4 (rw,relatime,data=ordered)
2.卸载当前文件系统
[root@instance-xxxx ~]# umount /dev/vde1
说明:
- 若您需要扩容已有 MBR 分区,为了防止数据丢失,请先取消挂载分区,完成扩容后再重新挂载。
- 若您正在使用未分区磁盘(如/dev/vde),扩容时为了防止数据丢失,以下操作请对准未分区磁盘盘符(/dev/vde)进行,完成扩容后再重新挂载。
3.调整分区大小
执行命令 fdisk /dev/vde
,开始调整磁盘分区大小。进入 fdisk 环境后,依次输入以下命令:
- 输入p:打印当前分区表
- 输入d:删除当前分区。当屏幕显示"已选择分区 1,分区 1 已删除"时,表示已有的 50GB 大小分区已经删除;
- 输入n:新建分区;
- 输入p:选择分区类型为主分区;
- 输入分区号:当前输入值为默认值1,您也可以直接按回车键,系统将直接选择当前默认值;
- 输入起始扇区位置:当前输入值为默认值 2048,您也可以直接按回车键,系统将直接选择当前默认值;
- 输入Last扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
- 输入w:保存修改并退出。至此,您已经完成分区大小的调整,新分区的大小已经调整为 100GB。
[root@instance-xxxx ~]# fdisk /dev/vde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/vde:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x63ffc036
设备 Boot Start End Blocks Id System
/dev/vde1 2048 104857599 52427776 83 Linux
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-209715199,默认为 2048):2048
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):
将使用默认值 209715199
分区 1 已设置为 Linux 类型,大小设为 100 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
4. 查看分区并检查文件系统
执行命令 lsblk /dev/vde
查看当前文件系统是否已增加分区表。在下方可以看到 /vde1 分区表已经增加。
执行命令 e2fsck -n /dev/vde1
查看当前文件系统的状态是否为 clean。
[root@instance-xxxx ~]# lsblk /dev/vde
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vde 253:64 0 100G 0 disk
└─vde1 253:65 0 100G 0 part
[root@instance-xxxx ~]# e2fsck -n /dev/vde1
e2fsck 1.42.9 (28-Dec-2013)
/dev/vde1: clean, 11/3276800 files, 251790/13106944 blocks
5. 通知内核更新分区表
执行命令 partprobe /dev/vde
通知内核需同步数据盘的分区表信息。
6. 扩展文件系统大小
本磁盘采用 ext 文件系统,可以执行 resize2fs /dev/vde1
命令以扩展文件系统大小。之后执行 mount /dev/vde1 /mnt
命令将新分区挂载至 /mnt
节点。
[root@instance-xxxx ~]# resize2fs /dev/vde1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vde1 to 26214144 (4k) blocks.
The filesystem on /dev/vde1 is now 26214144 blocks long.
[root@instance-xxxx ~]# mount /dev/vde1 /mnt
对于 xfs 文件系统,您需要先运行 mount /dev/vde1 /mnt/
命令,再运行xfs_growfs /dev/vde1
以完成文件系统拓展。
7. 查看调整后的分区大小
此时,执行命令 df -h
,您可以查看调整后的分区大小。在下方可以看到 /dev/vde
分区已经扩展到 100GB,且已经重新挂载至 /mnt
节点。
[root@instance-xxxx~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 40G 1.8G 36G 5% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 17M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vde1 99G 60M 94G 1% /mnt
tmpfs 396M 0 396M 0% /run/user/0
至此,您已经完成所有关于已有 MBR 磁盘分区的扩容操作,您可以开始正常使用该磁盘。
添加新的 MBR 磁盘分区
若您需要将正在扩容的磁盘空间添加为新的 MBR 磁盘分区,您可以按照以下步骤进行操作。在该操作中,您不需要卸载磁盘已有文件系统,可以直接对添加的新磁盘空间进行分区和文件系统的创建操作。
以下示例在保持磁盘 /dev/vdb
已有分区1容量 100GB 和文件系统不变的情况下,添加新的分区 2 ,且新分区 2 的大小为 100GB,并为新分区创建文件系统。
1.调整分区大小
执行命令 fdisk /dev/vdb
,开始调整磁盘分区大小。进入 fdisk 环境后,依次输入以下命令:
- 输入p:打印当前分区表
- 输入n:新建分区;
- 输入p:选择分区类型为主分区;
- 输入分区号:当前输入值为默认值2,表示在已有分区1之外,创建新的编号为2的新分区。您也可以直接按回车键,系统将直接选择当前默认值;
- 输入起始扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
- 输入Last扇区位置:您可以直接按回车键,系统将直接选择当前默认值;
- 输入w:保存修改并退出。至此,您已经完成分区大小的调整,新分区2的大小已经调整为 100GB,同时已有分区1的大小保持原有 100GB 不变。
[root@instance-xxxx ~]# fdisk /dev/vdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/vdb:214.7 GB, 214748364800 字节,419430400 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x63ffc036
设备 Boot Start End Blocks Id System
/dev/vdb1 2048 209715199 104856576 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (209715200-419430399,默认为 209715200):
将使用默认值 209715200
Last 扇区, +扇区 or +size{K,M,G} (209715200-419430399,默认为 419430399):
将使用默认值 419430399
分区 2 已设置为 Linux 类型,大小设为 100 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
2.查看分区
执行命令 lsblk /dev/vdb
查看分区,可以看到当前新的分区 dev/vdb2
已经添加至分区表。
[root@instance-xxxx ~]# lsblk /dev/vdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 200G 0 disk
├─vdb1 253:17 0 100G 0 part /mnt
└─vdb2 253:18 0 100G 0 part
3.为新分区创建并挂载文件系统
执行命令 mkfs.ext4 /dev/vdb2
为新分区 /dev/vdb2
创建 ext4
类型文件系统。创建成功后,您可以执行 mount /dev/vdb2 /xxx
命令将该分区挂载至 /xxx
节点。本示例中将新分区挂载至 /mnt
节点。
[root@instance-xxxx ~]# mkfs.ext4 /dev/vdb2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2174746624
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@instance-xxxx ~]# mount /dev/vdb2 /mnt
4. 查看调整后的分区大小
此时,执行命令 df -h
,您可以查看调整后的分区大小。在下方可以看到 /dev/vdb2
分区已经扩展到 100GB,且已经重新挂载至 /mnt
节点。
[root@instance-xxxx ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 40G 1.8G 36G 5% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 17M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vdb2 99G 61M 94G 1% /mnt
tmpfs 396M 0 396M 0% /run/user/0
至此,您已经完成所有添加 MBR 磁盘分区的扩容操作,您可以开始正常使用该磁盘。
扩容已有 GPT 磁盘分区
当您在控制台完成磁盘扩容后,执行 fdisk -l
命令会显示当前磁盘的容量为扩容后的容量。本示例中将为一块已采用 GPT 分区方式的 /dev/vdb
磁盘进行扩容。在进行下列分区操作前,该磁盘的容量已经由 2000GB 扩容至 2500GB。
1. 查看当前文件系统挂载点
执行命令 mount | grep "/dev/vdb"
以查看当前磁盘 /dev/vdb
的挂载点。执行后可以看到挂载点为 /mnt
。
[root@instance-xxxx ~]# mount | grep "/dev/vdb"
/dev/vdb on /mnt type ext4 (rw,relatime,data=ordered)
2.卸载当前文件系统
[root@instance-xxxx ~]# umount /dev/vdb
说明:
- 若您需要扩容已有 GPT 分区,为了防止数据丢失,请先取消挂载分区,完成扩容后再重新挂载。
3.调整分区大小
您需要使用 parted 工具为 /dev/vdb
磁盘进行分区扩容操作,请依次输入以下命令:
- 执行
parted /dev/vdb
命令开始分区扩容; - 执行
print
命令查看待扩容的分区号(Number)和容量(Size)。本示例中磁盘 /dev/vdb/ 是从 2000GB 扩容到 2500GB,且已有的分区号为 1; - 执行
resizepart 1 100%
命令扩展分区。您可以根据自身需求,更改命令语句中的分区号; - 执行
print
查看当前分区号和容量的状态。
[root@instance-xxxx ~]# parted /dev/vdb
GNU Parted 3.1
使用 /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2684GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system 标志
1 0.00B 2684GB 2684GB ext4
(parted) resizepart 1 100%
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2684GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system 标志
1 0.00B 2684GB 2684GB ext4
(parted) quit
信息: You may need to update /etc/fstab.
4.挂载文件系统
- 执行
fsck -f /dev/vdb1
命令检查文件系统是否一致; - 若您的文件系统为
ext
类型,请先执行resize2fs /dev/vdb1
命令扩展分区对应的文件系统,然后执行mount /dev/vdb1 /mnt
将文件系统挂载至/mnt
挂载点。您也可以根据自身需要挂载至其他挂载点,或者通过mkdir <挂载点>
创建新的挂载点; - 若您的文件系统为
xfs
类型,请先执行mount /dev/vdb1 /mnt/
命令,再执行xfs_growfs /dev/vdb1
命令。
下列示例中采用的是 ext
文件系统类型。
[root@instance-xxxx ~]# fsck -f /dev/vdb1
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vdb1: 11/131072000 files (0.0% non-contiguous), 8282274/524288000 blocks
[root@instance-xxxx ~]# resize2fs /dev/vdb1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vdb1 to 655360000 (4k) blocks.
The filesystem on /dev/vdb1 is now 655360000 blocks long.
[root@instance-hnl92ipp ~]# mount /dev/vdb1 /mnt
5.查看调整后分区
完成以上步骤后,您可以执行 df -h
命令查看调整后分区。
添加新的 GPT 磁盘分区
若您需要将正在扩容的磁盘空间添加为新的 GPT 磁盘分区,您可以按照以下步骤进行操作。在该操作中,您不需要卸载磁盘已有文件系统,可以直接对添加的新磁盘空间进行分区和文件系统的创建操作。
以下示例在保持磁盘 /dev/vdb1
已有分区 1 容量 2500GB 和文件系统不变的情况下,添加新的分区 2,且新分区 2 的大小为 500GB,并为新分区创建 ext
类型文件系统。
1.调整分区大小
您需要使用 parted 工具为磁盘添加新的分区,请执行 parted /dev/vdb
进行操作。请依次执行以下命令进行分区操作:
- 执行
print
命令查看数据盘当前状态。此时系统会弹出一条提示,输入 Ignore 忽略该提示。此时在屏幕上可以看到当前磁盘的容量已经扩容到 3000 GB; - 记录此时
/dev/vdb1
的结束位置,即 End 对应磁盘位置,该位置为新分区的起始位置。再本示例中,/dev/vdb1
的结束位置是 2147GB; - 输入
mkpart
开始新建分区。若继续出现提示,请继续忽略; - 输入新分区名称:本示例输入 2;
- 输入新分区的文件系统类型:本示例输入
ext4
,系统默认为ext2
; - 输入新分区起始位置:本示例为 2147GB;
- 执行
print
查看当前磁盘状态; - 执行
quit
退出 parted 分区工具。
[root@instance-xxxx ~]# parted /dev/vdb
GNU Parted 3.1
使用 /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
警告: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 2097152000 blocks) or continue with the current setting?
修正/Fix/忽略/Ignore? Ignore
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 2147GB 2147GB ext4 primary
(parted) mkpart
分区名称? []? 2
文件系统类型? [ext2]? ext4
起始点? 2147GB
结束点? 100%
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 2147GB 2147GB ext4 primary
2 2147GB 3221GB 1074kB 2
(parted) quit
2.为新分区挂载文件系统
您可以执行 mount /dev/vdb2 /xxx
命令将该分区挂载至 /xxx
节点。本示例中将新分区挂载至 /mnt
节点。
[root@instance-xxxx ~]# mount /dev/vdb2 /mnt
3. 查看调整后的分区大小
此时,执行命令 df -h
,您可以查看调整后的分区大小。
至此,您已经完成所有添加 GPT 磁盘分区的扩容操作,您可以开始正常使用该磁盘。
扩容裸设备文件系统
若您的数据盘没有分区,但是已经创建文件系统时,您可以在该磁盘上直接扩容文件系统。
1. 若您已创建 ext 文件系统
请使用 root 权限执行 resize2fs
命令扩容文件系统。
resize2fs /dev/vdb
2. 若您已创建 xfs 文件系统
使用 root 权限执行 xfs_growfs
命令扩容文件系统。
xfs_growfs /dev/vdb