文章目录
Linux使用growpart工具进行磁盘热扩容
场景:
使用中的云盘在不挂载不格式化情况下进行扩容(适用于系统盘和数据盘)
目录
1、扩容物理盘
2、安装growpart
和resize2fs
工具
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,请参见高内核版本的操作步骤。
- 运行以下命令查看现有云盘大小。
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)在当前不被系统使用或挂载。这意味着:
逻辑卷不再对用户或进程可用。
任何对该逻辑卷的读写操作都会被阻止,确保数据的安全性和完整性。
在非活动状态下,可以进行一些维护操作,如扩展、删除、备份等,而不会影响到正在使用的文件系统。
2. 获取 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)或将其与其他物理卷一起使用。
报错 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