云硬盘 EVS-扩展数据盘的分区和文件系统(Linux内核低于3.6.0):扩大已有GPT分区
扩大已有GPT分区
扩大已有分区不会删除数据盘上的数据,但是需要通过umount命令先卸载已有分区,因此会影响线上业务运行。
数据盘“/dev/vdb”原有容量150GB,有两个分区“/dev/vdb1 ”和“/dev/vdb2”。将数据盘容量扩大至230GB,本示例将新增的80GB划分至已有的GPT分区内“/dev/vdb2”内。
扩容后的新增存储空间是添加在磁盘末尾的,对具有多个分区的的磁盘扩容时,只支持将新增容量划分至排在末尾的分区。
- 执行以下命令,查看磁盘的分区信息。
lsblk
回显类似如下信息:[root@ecs-test-0001 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 253:0 0 40G 0 disk└─vda1 253:1 0 40G 0 part /vdb 253:16 0 230G 0 disk├─vdb1 253:17 0 100G 0 part /mnt/sdc└─vdb2 253:18 0 50G 0 part /mnt/test
查看回显中磁盘“/dev/vdb”的容量,扩容的容量是否已经包含在容量总和中。- 若扩容的容量未在磁盘容量总和中,请参考扩展SCSI数据盘的分区和文件系统(Linux内核低于3.6.0)章节刷新系统内容量。
- 若扩容的容量已在磁盘容量总和中,请执行2。
- 执行以下命令,卸载磁盘分区。
umount 磁盘分区
命令示例:
umount /dev/vdb2
- 执行以下命令,确认磁盘分区的卸载结果。
lsblk
回显类似如下信息:[root@ecs-test-0001 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 253:0 0 40G 0 disk└─vda1 253:1 0 40G 0 part /vdb 253:16 0 230G 0 disk├─vdb1 253:17 0 100G 0 part /mnt/sdc└─vdb2 253:18 0 50G 0 part
- 执行以下命令,进入parted分区工具。
parted 磁盘
命令示例:
parted /dev/vdb
回显类似如下信息:[root@ecs-test-0001 ~]# parted /dev/vdbGNU Parted 3.1Using /dev/vdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted)
- 输入“unit s”,按“Enter”,设置磁盘的计量单位为磁柱。
- 输入“p”,按“Enter”,查看当前磁盘分区情况。
回显类似如下信息:
(parted) unit s(parted) pError: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes thedisk is smaller. Fix, by moving the backup to the end (and removing the old backup)?Fix/Ignore/Cancel? FixWarning: 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 167772160blocks) or continue with the current setting?Fix/Ignore? FixModel: Virtio Block Device (virtblk)Disk /dev/vdb: 482344960sSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:Number Start End Size File system Name Flags 1 2048s 209713151s 209711104s ext4 test 2 209713152s 314570751s 104857600s ext4 data(parted)
记录待扩大分区“/dev/vdb2”的初始磁柱值(start)和截止磁柱值(End),在后续重新划分分区需要使用。本示例中待扩大分区的的初始磁柱值为209713152s,截止磁柱值为314570751s。- 若系统出现以下Error,请输入“Fix”。
Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes thedisk is smaller. Fix, by moving the backup to the end (and removing the old backup)?
GPT分区表信息存储在磁盘开头,为了减少分区表损坏的风险,同时在磁盘末尾会备份一份。当磁盘容量扩大后,末尾位置也会随之变化,因此需要根据系统提示输入“Fix”,将分区表信息的备份文件挪到新的磁盘末尾位置。
- 若系统出现以下Waring,请输入“Fix”。
Warning: 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 104857600blocks) or continue with the current setting?Fix/Ignore? Fix
根据系统提示输入“Fix”,系统会自动将磁盘扩容部分的容量设置为GPT。
- 若系统出现以下Error,请输入“Fix”。
- 输入“rm”和分区编号,此处以“2”为例,按“Enter”。
回显类似如下信息:
(parted) rmPartition number? 2(parted)
- 重新划分分区,执行以下命令,按“Enter”。
mkpart 磁盘分区名称 起始磁柱值 截止磁柱值
命令示例:
mkpart data 209713152s 100%
- 起始起始磁柱值需要和原分区的取值保持一致,输入6中记录的起始磁柱值“209713152s”。
- 截止磁柱值必须大于原分区的取值,即大于6中记录的截止磁柱值“314570751s”,此处以将所有新增容量划分至分区“dev/vdb2”为例,输入100%。
回显类似如下信息:(parted) mkpart data 209713152s 100%(parted)
以下操作会导致数据丢失:- 选择的起始磁柱值与原分区的不一致。
- 选择的截止磁柱值小于原分区的值。
- 输入“p”,按“Enter”,查看分区信息。
回显类似如下信息:
(parted) pModel: Virtio Block Device (virtblk)Disk /dev/vdb: 482344960sSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:Number Start End Size File system Name Flags 1 2048s 209713151s 209711104s ext4 test 2 209713152s 482342911s 272629760s ext4 data(parted)
- 输入“q”,按“Enter”,退出parted分区工具。
回显类似如下信息:
(parted) qInformation: You may need to update /etc/fstab.
“/etc/fstab”文件控制磁盘开机自动挂载,请先参考以下步骤为磁盘分区设置文件系统和挂载目录后,再根据文档指导更新“/etc/fstab”文件。
- 根据磁盘的文件系统,分别执行以下操作。
- 若磁盘文件系统为ext*,请执行以下步骤。
- 执行以下命令,检查磁盘分区文件系统的正确性。
命令示例:
e2fsck -f /dev/vdb2
回显类似如下信息:[root@ecs-test-0001 ~]# e2fsck -f /dev/vdb2e2fsck 1.42.9 (28-Dec-2013)Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsPass 5: Checking group summary information/dev/vdb2: 11/3276800 files (0.0% non-contiguous), 251790/13107200 blocks
- 执行以下命令,扩展磁盘分区文件系统的大小。
命令示例:
resize2fs /dev/vdb2
回显类似如下信息:[root@ecs-test-0001 ~]# resize2fs /dev/vdb2resize2fs 1.42.9 (28-Dec-2013)Resizing the filesystem on /dev/vdb2 to 34078720 (4k) blocks.The filesystem on /dev/vdb2 is now 34078720 blocks long.
- (可选)执行以下命令,新建挂载目录。
mkdir 挂载目录
以新建挂载目录“/mnt/test”为例:
mkdir /mnt/test
- 执行以下命令,挂载磁盘分区。
以挂载分区“/dev/vdb2”至“/mnt/test”为例:
mount /dev/vdb2 /mnt/test
新增加的分区挂载到不为空的目录时,该目录下原本的子目录和文件会被隐藏,所以,新增的分区最好挂载到空目录或者新建目录。如确实要挂载到不为空的目录,可将该目录下的子目录和文件临时移动到其他目录下,新分区挂载成功后,再将子目录和文件移动回来。
- 执行以下命令,检查磁盘分区文件系统的正确性。
- 若磁盘文件系统为xfs,请执行以下步骤。
- (可选)执行以下命令,新建挂载目录。
mkdir 挂载目录
以新建挂载目录“/mnt/test”为例:
mkdir /mnt/test
- 执行以下命令,挂载磁盘分区。
以挂载分区“/dev/vdb2”至“/mnt/test”为例:
mount /dev/vdb2 /mnt/test
新增加的分区挂载到不为空的目录时,该目录下原本的子目录和文件会被隐藏,所以,新增的分区最好挂载到空目录或者新建目录。如确实要挂载到不为空的目录,可将该目录下的子目录和文件临时移动到其他目录下,新分区挂载成功后,再将子目录和文件移动回来。
- 执行以下命令,扩展磁盘分区文件系统的大小。
命令示例:
sudo xfs_growfs /dev/vdb2
回显类似如下信息:
[root@ecs-test-0001 ~]# sudo xfs_growfs /dev/vdb2 meta-data=/dev/vdb2 isize=512 agcount=4, agsize=3276800 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, spinodes=0data = bsize=4096 blocks=13107200, imaxpct=25 = sunit=0 swidth=0 blksnaming =version2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=6400, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 13107200 to 34078720.
- (可选)执行以下命令,新建挂载目录。
- 若磁盘文件系统为ext*,请执行以下步骤。
- 执行以下命令,查看挂载结果。
df -TH
回显类似如下信息:[root@ecs-test-0001 ~]# df -THFilesystem Type Size Used Avail Use% Mounted on/dev/vda1 ext4 43G 1.9G 39G 5% /devtmpfs devtmpfs 2.0G 0 2.0G 0% /devtmpfs tmpfs 2.0G 0 2.0G 0% /dev/shmtmpfs tmpfs 2.0G 9.1M 2.0G 1% /runtmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgrouptmpfs tmpfs 398M 0 398M 0% /run/user/0/dev/vdb1 ext4 106G 63M 101G 1% /mnt/sdc/dev/vdb2 ext4 138G 63M 131G 1% /mnt/test
云服务器重启后,挂载会失效。您可以修改“/etc/fstab”文件,将新建磁盘分区设置为开机自动挂载,请参见设置开机自动挂载磁盘分区。