使

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

HB 网络电脑 2022-06-09

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

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

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

首先是growpart工具安装

在CentOS 7系统中打开终端,输入以下命令安装growpart工具:

yum install cloud-utils-growpart

如果磁盘分区是GPT格式,还需要安装gdisk工具:

yum install gdisk

‌在Debian 8及以上或Ubuntu 14及以上版本中安装growpart工具‌:

更新包列表并安装growpart工具:

apt-get update
apt-get install cloud-guest-utils

‌growpart工具的使用方法‌:

‌查看分区信息‌:
使用fdisk -l命令查看磁盘分区信息,确认需要扩容的分区编号。
‌使用growpart工具扩容分区‌:
输入命令growpart /dev/vda 1(其中/dev/vda是磁盘设备名,1是分区编号)。
如果磁盘分区是GPT格式,可能需要设置字符编码类型为en_US.UTF-8:

export LC_ALL=en_US.UTF-8

‌扩容文件系统‌:
使用resize2fs /dev/vda1命令扩容文件系统。
‌检查扩容是否成功‌:
使用df -h命令查看磁盘容量是否已经增加。

正文

阿里云(ubuntu20.04)ext4 文件系统扩容实测操作步骤
阿里云,扩展分区和文件系统_Linux系统盘
参考URL: https://help.aliyun.com/document_detail/111738.html#section-gxq-3tw-dhb

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

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

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

运行以下命令查看现有云盘大小。

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

运行以下命令查看云盘分区大小和文件系统类型。

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

运行以下命令扩容分区。

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],可以尝试修改字符编码解决问题。具体操作,请参见常见问题。

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

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

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

扩容
场景1:当前磁盘还有剩余空间
第一步:使用磁盘空间扩容PV
使用 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

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

使用 partprobe 使内核更新分区表
当您通过其他工具(如 fdisk、parted 或 growpart)更改分区后,使用 partprobe 可以让内核重新加载分区表,以便识别新的分区布局。

partprobe -s /dev/sda

partprobe: 用于通知内核重新读取分区表,以便更新内核对磁盘分区的认识。

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

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

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

更新 LVM 中的物理卷大小信息,使其反映最新的分区大小
在分区扩容后,必须使用 pvresize 来确保 LVM 的元数据与实际的分区大小一致。
根据pvs回显,查看pv情况,并更新你刚才扩容的pv

pvs
lvm pvresize -v /dev/sda2 

启用逻辑卷管理器中的卷组
启用逻辑卷管理器中的卷组,并使其在系统初始化时自动激活。

lvm vgchange --sysinit -ay 

lvm: 调用逻辑卷管理器(LVM)的命令行工具。
vgchange: 此命令用于更改卷组的属性。
–sysinit: 这个选项指示 vgchange 在系统初始化阶段(即启动过程)执行。这通常用于在系统启动时自动激活卷组。
-a: 这个选项用于设置卷组的活动状态。
-y: 这个选项意味着“yes”,表示在执行过程中自动确认所有提示,避免手动确认。
至此, 我们使用磁盘剩余空间扩容了物理卷(PV)。

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

获取指定目录,如 /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 目录的数据。

扩展逻辑卷

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参考上一章内容。

扩展 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)或将其与其他物理卷一起使用。

PREV
ASP删除包含特殊字符文件造成的删除文件报错Server.MapPath() 错误 'ASP 0173 : 80004005'
NEXT
用netstat命令查看本机端口号