使用growpart工具进行磁盘热扩容

本文详细指导如何在Linux环境下,通过growpart和resize2fs工具在线扩容阿里云的系统盘及文件系统,包括检查磁盘属性、扩容操作步骤和注意事项,适用于内核3.6.0以上实例。

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

Linux使用growpart工具进行磁盘热扩容

场景:
使用中的云盘在不挂载不格式化情况下进行扩容(适用于系统盘和数据盘)

目录
1、扩容物理盘
2、安装growpartresize2fs工具
3、检查扩容磁盘属性
4、使用growpart工具扩容分区
5、使用resize2fs工具扩容文件系统
6、检查扩容结果

注意:操作之前需要对云盘进行快照或者其它方式备份,扩容云盘存在数据丢失风险

阿里云(ubuntu20.04)ext4 文件系统扩容实测操作步骤

阿里云,扩展分区和文件系统_Linux系统盘
参考URL: https://help.aliyun.com/document_detail/111738.html#section-gxq-3tw-dhb

推荐直接参考阿里原文,无坑!

先在控制台上扩容云盘。
若尚未扩容,在控制台扩容云盘容量

运行uname -a命令查看实例的内核版本。
如果内核版本大于等于3.6.0,请参见高内核版本的操作步骤。

  1. 运行以下命令查看现有云盘大小。
fdisk -l

以下示例返回云盘(/dev/vda)容量是100 GiB。

[root@ecshost ~]# fdisk -l
Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 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
Disk identifier: 0x000bad2b

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83886046    41941999   83  Linux
  1. 运行以下命令查看云盘分区大小和文件系统类型。
df -Th

以下示例返回分区(/dev/vda1)容量是40 GiB,文件系统类型为ext4。

[root@ecshost ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  869M     0  869M   0% /dev
tmpfs          tmpfs     879M     0  879M   0% /dev/shm
tmpfs          tmpfs     879M  460K  878M   1% /run
tmpfs          tmpfs     879M     0  879M   0% /sys/fs/cgroup
/dev/vda1      ext4       40G  1.8G   36G   5% /
tmpfs          tmpfs     176M     0  176M   0% /run/user/0
  1. 运行以下命令扩容分区。
growpart <DeviceName> <PartionNumber>

其中,是系统盘的设备名称,是分区编号,且设备名称和分区编号之间需要空格分隔。

以下示例命令表示扩容系统盘的第一个分区。

[root@ecshost ~]# growpart /dev/vda 1
CHANGED: partition=1 start=2048 old: size=83883999 end=83886047 new: size=209713119 end=209715167

说明
如果单盘有多个连续分区的情况,例如系统盘 /dev/vda有三个分区/dev/vda1、/dev/vda2和/dev/vda3。扩容时,只需要扩容最后一个分区即可,即执行growpart /dev/vda 3,即可完成系统盘 /dev/vda的分区扩容。
如果您在运行growpart /dev/vda 1时,系统提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2],可以尝试修改字符编码解决问题。具体操作,请参见常见问题。

  1. 扩展文件系统。
    请先使用df -Th命令查看文件系统类型,然后根据不同的文件系统类型运行以下命令扩展文件系统。

ext*文件系统(例如ext3和ext4):运行以下命令扩展文件系统。

resize2fs <PartitionName>

示例命令表示为扩容系统盘的/dev/vda1分区的文件系统。

[root@ecshost ~]# resize2fs /dev/vda1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 7
The filesystem on /dev/vda1 is now 26214139 blocks long.

xfs 和 ext4 区别

XFS 和 ext4 是两种常见的 Linux 文件系统,各自有不同的特性和适用场景。以下是它们之间的主要区别:

  • XFS:

    • 高性能的日志文件系统,最初由 SGI 开发,适用于大数据量和高并发的环境。
    • 支持动态分配和延迟分配,适合大文件和大容量存储。
    • 在处理大文件和高负载的应用程序时表现优越,具有更好的并发性能。
    • 适合数据库、大型文件存储和高性能计算等场景。
    • 主要用于高性能和高可用性环境,对于一般用户和桌面环境可能不够直观。
  • ext4:

    • 继承自 ext3,是 Linux 文件系统的一个稳定版本,广泛用于各种 Linux 发行版。
    • 兼容性强,支持从 ext3 升级,适合各种类型的文件和一般用途。
    • 在小文件的处理上表现良好,适合日常使用和小型服务器。
    • 对于小文件操作,性能略高于 ext3,但在大文件处理上不如 XFS。

总结:如果您需要处理大型文件、进行高负载的数据库操作,或需要高性能和高并发的环境,XFS 是更好的选择。
如果您需要一个稳定、通用的文件系统,适用于日常使用、小型服务器或兼容性要求较高的场景,ext4 是更合适的选择。

xfs 文件系统扩容

XFS 的扩展操作是通过 xfs_growfs 命令实现的,该命令能够在文件系统挂载时进行扩展,并自动调整文件系统的元数据。

对于 ext4 文件系统,扩展操作通过 resize2fs 命令实现。这个命令也可以在文件系统挂载时执行,但在某些情况下,可能需要先卸载文件系统以确保数据一致性。

xfs_growfs 允许在不影响正在进行的操作的情况下进行扩展,适合数据库和大容量存储。

自动化地扩展 Linux 系统中的逻辑卷思路:

1. 将逻辑卷组(VG)设为非活动状态

在进行逻辑卷扩展、缩减或其他管理操作之前,将卷组设为非活动状态可以防止数据损坏。

vgs 
pvs
lvs

lvm vgchange --sysinit -an

物理卷(PV): 物理存储设备(如硬盘分区或整个硬盘),通过 pvs 命令管理。
卷组(VG): 由一个或多个物理卷组成的逻辑集合,作为逻辑卷的基础,通过 vgs 命令管理。
逻辑卷(LV): 从卷组中分配的逻辑存储空间,可以被格式化为文件系统并挂载,使用 lvs 命令管理。

  • vgs 命令用于显示当前系统中所有逻辑卷组(Volume Groups, VG)的信息
  • pvs 命令用于显示当前系统中所有物理卷(Physical Volumes, PV)的信息
  • lvs 命令用于显示当前系统中所有逻辑卷(Logical Volumes, LV)的信息

物理卷(PV) → 卷组(VG) → 逻辑卷(LV)
物理卷是最底层的存储设备,它们被聚合到卷组中。
卷组是一个逻辑层次,聚合了多个物理卷,提供灵活的存储管理。
逻辑卷是从卷组中划分出来的,用户可直接使用的存储空间。

  • vgchange: 是一个用于更改卷组状态的命令
  • –sysinit: 表示在系统初始化时更改卷组的状态,适用于在系统启动时自动处理的情况。
  • -a: 这个选项指定要激活或停用卷组。
  • n: 表示将卷组设为非活动状态。

非活动状态(inactive state)指的是卷组中的逻辑卷(LV)在当前不被系统使用或挂载。这意味着:
逻辑卷不再对用户或进程可用。
任何对该逻辑卷的读写操作都会被阻止,确保数据的安全性和完整性。
在非活动状态下,可以进行一些维护操作,如扩展、删除、备份等,而不会影响到正在使用的文件系统。

2. 获取 LVM 和物理卷信息

获取挂载在 /home 目录上的设备名称。这通常用于后续的存储管理操作,比如扩展逻辑卷

df -h | grep ‘/home$’ |awk -F ’ ’ ‘{print $1}’

扩容

场景1:当前磁盘还有剩余空间
第一步:使用磁盘空间扩容PV
  1. 使用 growpart 扩容指定分区
    例如,sda分区情况如下:
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   209715199   103808000   8e  Linux LVM

我们对 /dev/sda2 分区扩容,让使用使用到当前磁盘的剩余空间。

growpart /dev/sda 2

这条命令的作用是扩展指定的分区,以利用磁盘上可用的空间。

  1. 使用 partprobe 使内核更新分区表
    当您通过其他工具(如 fdisk、parted 或 growpart)更改分区后,使用 partprobe 可以让内核重新加载分区表,以便识别新的分区布局。
partprobe -s /dev/sda
  • partprobe: 用于通知内核重新读取分区表,以便更新内核对磁盘分区的认识。

  • -s: 以简洁模式运行,通常输出分区的状态,而不是详细信息。

  • /dev/sda: 指定的磁盘设备,表示您希望更新该磁盘的分区信息。

当您对 /dev/sda 进行了分区操作(如创建、删除或调整分区大小)后,运行此命令可以确保内核与分区表保持同步

  1. 更新 LVM 中的物理卷大小信息,使其反映最新的分区大小
    在分区扩容后,必须使用 pvresize 来确保 LVM 的元数据与实际的分区大小一致。
    根据pvs回显,查看pv情况,并更新你刚才扩容的pv
pvs
lvm pvresize -v /dev/sda2 
  1. 启用逻辑卷管理器中的卷组
    启用逻辑卷管理器中的卷组,并使其在系统初始化时自动激活。
lvm vgchange --sysinit -ay 
  • lvm: 调用逻辑卷管理器(LVM)的命令行工具。
  • vgchange: 此命令用于更改卷组的属性。
  • –sysinit: 这个选项指示 vgchange 在系统初始化阶段(即启动过程)执行。这通常用于在系统启动时自动激活卷组。
  • -a: 这个选项用于设置卷组的活动状态。
  • -y: 这个选项意味着“yes”,表示在执行过程中自动确认所有提示,避免手动确认。

至此, 我们使用磁盘剩余空间扩容了物理卷(PV)。

第二步:扩展逻辑卷和文件系统

在扩展物理卷(PV)之后,还需要执行以下步骤来扩展逻辑卷(LV)并确保文件系统能够使用新增的空间。

  1. 获取指定目录,如 /home 使用的逻辑卷的设备路径

注意:/home 目录可能没有被挂载,有时候直接挂载在 / 下,这个时候扩展 / 挂载的设备路径也行。

这里假设情况如下:

# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G   11M  7.8G   1% /dev/shm
tmpfs                    7.8G  803M  7.0G  11% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G   19G   32G  38% /
/dev/sda1               1014M  235M  780M  24% /boot
/dev/mapper/centos-home  142G  109G   33G  78% /home

/dev/mapper/centos-home一个逻辑卷的设备路径,表示它是使用 LVM(逻辑卷管理器)管理的一个逻辑卷

  • /dev/mapper/:
    这是 LVM 创建的设备映射器(Device Mapper)虚拟文件系统的目录,LVM 使用它来管理逻辑卷。所有通过 LVM 创建的逻辑卷都会在这个目录下显示为设备文件。

  • centos-home:
    这是逻辑卷的名称。在这个例子中,centos 是卷组的名称,而 home 是逻辑卷的名称。通过这种命名方式,用户可以直观地知道这个逻辑卷的用途(即用于存储 /home 目录的用户数据)。

/dev/mapper/centos-home 是一个通过 LVM 管理的逻辑卷,专门用于存储 /home 目录的数据。

  1. 扩展逻辑卷
home_lv=$(df -h | grep '/home$' | awk -F ' ' '{print $1}')
#lvm_lv_root=$(echo $(df -h | grep '/$') | awk -F ' ' '{print $1}')
lvm lvextend -v -l +100%FREE ${home_lv}

使用 df -Th 查看,你的 /dev/mapper/centos-home 文件系统类型是不是xfs,确保是xfs,如果是ext4参考上一章内容。

  1. 扩展 XFS 文件系统的大小
    在运行 xfs_growfs 之前,确保逻辑卷已经通过 lvextend 命令扩展。
    文件系统类型:xfs_growfs 仅适用于 XFS 文件系统,对于其他类型的文件系统(如 ext4),则需要使用不同的命令(例如 resize2fs)。
xfs_growfs /dev/mapper/centos-home
  • /dev/mapper/centos-home要扩展的文件系统的设备路径。在这个例子中,它指的是挂载在 /home 目录的逻辑卷。

常见总结

判断一个物理卷是否在使用中

在 LVM 中,即使 /dev/sdb 设备没有创建任何分区,它仍然可以作为物理卷(PV)被识别和使用。这是因为 LVM 允许您直接将整个块设备(如整个磁盘)用作物理卷,而不必先在其上创建分区。

# pvs
  PV         VG     Fmt  Attr PSize    PFree
  /dev/sda2  centos lvm2 a--   <99.00g    0
  /dev/sdb   centos lvm2 a--  <100.00g    0

PV: /dev/sdb 是一个物理卷。
VG: 它属于卷组 centos。
PFree: 0 表示该物理卷没有可用空间。

由于 /dev/sdb 显示在 pvs 输出中,并且它属于卷组 centos,这就意味着它是被使用的。

/dev/sdb 显示在输出中是因为它已经被 LVM 识别为一个物理卷,即使没有分区。您可以直接在该设备上创建逻辑卷(LV)或将其与其他物理卷一起使用。

报错 growpart: command not found

growpart: command not found这条错误消息表示系统中没有找到 growpart 命令。该命令用于扩展分区。解决方法:

使用以下命令安装:

sudo yum install cloud-utils-growpart  # 对于 CentOS/RHEL
sudo apt install cloud-guest-utils      # 对于 Debian/Ubuntu
### 服务器磁盘扩容的方法 对于云环境中的服务器,当遇到存储资源不足的情况时,可以通过调整现有逻辑卷管理(LVM)来增加可用空间。具体来说,在线LVM磁盘扩容涉及几个主要环节:首先是物理卷的扩展,接着是更新分区表使新增加的空间可被操作系统识别,最后则是扩大逻辑卷以及文件系统的尺寸以便能够实际利用这些额外的空间[^1]。 针对基于Linux的操作系统而言,如果目标是增大根分区或其他由单一分区构成的系统盘大小,则可以借助`growpart`工具完成初步的分区增长工作。此过程仅需一条简单的指令即可实现,例如执行`growpart /dev/vda 1`这样的命令能够让位于设备vda上的第一个主分区自动填充剩余未分配区域,从而为后续操作奠定基础[^2]。 然而值得注意的是,在尝试任何类型的磁盘或卷组扩张之前,务必确认当前环境中存在充足的自由空间以支持整个流程顺利完成;否则可能会因为缺乏必要的临时档案创建权限而导致任务中断或者失败。因此建议提前规划好所需容量并适当预留一部分余量作为缓冲区间[^3]。 一旦完成了上述准备工作之后,就可以着手于核心部分——即通过修改VG(Volume Group)、LV(Logical Volume)参数达到最终目的了。比如在XenServer平台下,为了给名为LogVol00的日志卷追加大约三十吉字节的新额度,应当运行如下所示的一串Shell语句: ```bash lvextend -L +30.01GB -n /dev/VolGroup00/LogVol00 ``` 这一步骤直接作用于底层结构之上,使得上层应用得以感知到更大的储存范围。不过要注意不同发行版之间可能存在细微差异,所以最好参照官方文档获取最精确指导[^5]。 另外还需记得同步伸展对应文件系统边界至新设定的最大限度,这样才能真正意义上释放全部潜力供应用程序调用。通常情况下只需简单地附加相应选项重新挂载该路径下的目录树就能达成效果。 #### 注意事项 - 扩容前应备份重要数据以防意外发生。 - 确认有足够的空闲空间可用于创建临时文件。 - 不同环境下具体的命令可能有所区别,请参阅相关手册。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西京刀客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值