标准分区扩容

本文介绍在云计算场景中如何使用growpart和parted工具对磁盘进行扩容,包括将MBR分区转换为GPT分区以便支持更大的磁盘容量,并提供了详细的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       云计算场景经常遇到磁盘空间不足,当云平台分分钟对磁盘扩容完成,接下来就需要在操作系统层面对磁盘进行扩容,标准分区扩容大致分为两步:1、扩容分区表;2、扩容文件系统。
       本文介绍两个常用的工具: growpartparted

工具介绍

sgdisk

MBR分区格式不支持2 TiB以上的云盘。如果该云盘目前使用的是MBR分区类型,且希望将其扩容至2 TiB以上,需要先将分区类型从MBR转换为GPT。

sgdisk -g /dev/vdb *运行此命令,将MBR分区转换为GPT分区,/dev/vdb为设备名称
Linux转换分区过程中,正常情况下不会丢失原分区的数据。避免误操作导致数据丢失或异常,建议您提前备份云盘上的所有数据

resize2fs

调整ext2/ext3/ext4文件系统的大小
样例:resize2fs /dev/vdb1 5G 不指定大小默认使用整个分区大小进行扩容,/dev/vdb1为设备不是挂载点。

growpart

命令选项含义
growpart--dry-run仅测试不对分区进行操作
语法:growpart [OPTIONS] DISK PARTITION-NUMBER
例:growpart /dev/vdb 2
说明:占用剩余所有的空间重写分区表,可以对挂载中的设备进行扩容。
growpart:包名称***cloud-utils-growpart***,该包不在yum源里面,centos7下载地址 http://mirror.centos.org/centos/7/os/x86_64/Packages/cloud-utils-growpart-0.29-5.el7.noarch.rpm

parted

命令选项含义
parted-l查看分区信息
-s不需要用户进行干预
-m显示机器可解析输出
语法:parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
例:growpart /dev/vdb 2
说明:不使用子命令直接运行交互式模式。

子命令

子命令参数含义
help[COMMAND]给出常规帮助或对应命令的帮助
mklabelLABEL-TYPE创建分区表类型,常用参数为msdos(MBR分区)和gp(GPT分区)
mkpartPART-TYPE [FS-TYPE] START ENDpart-type:MBR为分区类型,GPT时为分区名字;fs-type:指定分区文件系统,但是不对分区格式化;start:分区开始位置;end:分区结束位置
nameNUMBER NAME修改分区名称,只对GPT分区起作用
print[devices|free|list,all|NUMBER]查看分区信息
rescueSTART END修复丢失的分区
resizepartSTART END修改分区大小,扩容缩容都可以
rmNUMBER删除指定分区
selectDEVICE选择操作设备
unitUNIT设置操作单位,可以是s,B,GB,%等
quit/退出交互界面,parted操作是立即生效,不需要进行保存操作,请谨慎操作。

扩容最佳实践

扩容需谨慎,对数据要有畏惧之心!!!

growpart扩容

磁盘初始状态

[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs   5.6G   33M  5.6G   1% /mnt
[root@test-volume ~]# lsblk /dev/vdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb    253:16   0   10G  0 disk 
└─vdb1 253:17   0  5.6G  0 part /mnt
[root@test-volume ~]# 

使用growpart进行扩容分区

[root@test-volume ~]# growpart /dev/vdb 1
CHANGED: partition=1 start=2048 old: size=11716608 end=11718656 new: size=20969438 end=20971486
[root@test-volume ~]# lsblk /dev/vdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  10G  0 disk 
└─vdb1 253:17   0  10G  0 part /mnt
[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs   5.6G   33M  5.6G   1% /mnt
[root@test-volume ~]# 

扩容文件系统,本例以xfs进行扩容

[root@test-volume ~]# xfs_growfs /mnt
meta-data=/dev/vdb1              isize=512    agcount=4, agsize=366144 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1464576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1464576 to 2621179
[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs    10G   33M   10G   1% /mnt
[root@test-volume ~]# 

说明:growpart扩容分区会使用该分区后所有的磁盘空间,假如该分区后没有可用空间即不能扩容。一般会对对应磁盘的最后一个分区进行扩容。

growpart故障案例一

[root@centos7 ~]# growpart /dev/vdb 1
unexpected output in sfdisk --version [sfdisk??4? util-linux 2.23.2]
[root@centos7 ~]# echo $LANG  #字符集异常导致
zh_CN.gb18030
[root@centos7 ~]# export LANG=en_US.UTF-8  #修改为中文字符集
[root@centos7 ~]# echo $LANG
en_US.UTF-8
[root@centos7 ~]# growpart /dev/vdb 1  #分区扩容成功
CHANGED: partition=1 start=2048 old: size=6127874048 end=6127876096 new: size=10422843358 end=10422845406
[root@centos7 ~]# 

MBR分区转换为GPT分区

[root@disk-test sbin]# fdisk -l /dev/vdb

Disk /dev/vdb: 2147.5 GB, 2147483648000 bytes, 4194304000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos     dos表示为MBR分区,该分区为2T,需要修改为GPT分区才能进行扩容
Disk identifier: 0xc31b4065

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048  4194303999  2097150976   83  Linux
[root@disk-test sbin]# 
[root@disk-test sbin]# sgdisk -g /dev/vdb 

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************


Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Warning! Secondary partition table overlaps the last partition by
33 blocks!    此报错表示云盘尾部剩余空间不足33个扇区,没有足够的空间用于MBR转换GPT,先需要进行扩容。
You will need to delete this partition or resize it in another utility.
Aborting write of new partition table.
[root@disk-test sbin]# 
对硬盘进行扩容后再执行分区转换命令
[root@disk-test sbin]# sgdisk -g /dev/vdb 

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************

Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.  MBR分区成功转换为GPT分区,新的分区表需要重启后生效
[root@disk-test sbin]# fdisk -l /dev/vdb 
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/vdb: 2148.6 GB, 2148557389824 bytes, 4196401152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt  表示现在分区表为gpt分区,后续扩容就可以超过2T了
Disk identifier: 7E8705EE-6836-45CC-9F43-8BB1FE088FD3


#         Start          End    Size  Type            Name
 1         2048   4194303999      2T  Linux filesyste Linux filesystem
[root@disk-test sbin]# 

parted扩容

分区初始状态

[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs   4.7G   33M  4.7G   1% /mnt
[root@test-volume ~]# lsblk /dev/vdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb    253:16   0   10G  0 disk 
└─vdb1 253:17   0  4.7G  0 part /mnt
[root@test-volume ~]# 

分区扩容

[root@test-volume ~]# umount /mnt    卸载分区
[root@test-volume ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  5000MB  4999MB  xfs          data

(parted) resizepart 1 100%    使用磁盘余下所有空间                                            
(parted) quit                                                             
Information: You may need to update /etc/fstab.

[root@test-volume ~]# lsblk /dev/vdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  10G  0 disk 
└─vdb1 253:17   0  10G  0 part 
[root@test-volume ~]# mount /dev/vdb1 /mnt     重新挂载分区
[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs   4.7G   33M  4.7G   1% /mnt
[root@test-volume ~]# 

扩容文件系统,本例以xfs进行扩容

[root@test-volume ~]# xfs_growfs /mnt
meta-data=/dev/vdb1              isize=512    agcount=4, agsize=305088 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1220352, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1220352 to 2621179
[root@test-volume ~]# df -hT /dev/vdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/vdb1      xfs    10G   33M   10G   1% /mnt
[root@test-volume ~]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩华盛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值