1 问题背景
遇到对根分区进行 LVM 逻辑卷缩容(该分区为 xfs 文件系统)后,系统不能正常使用的问题。因此详细分析进行 LVM 逻辑卷缩容对文件系统有无要求,以及能否对根分区进行缩容操作
2 LVM 逻辑卷的缩容实验
2.1 文件系统对缩容有无限制
此节主要验证当前主流的 xfs 文件系统和 ext4 文件系统是否都支持 LVM 逻辑卷的缩容:
- 验证按照目前众所周知的操作规范,缩容前先要卸载对应分区
- 基于 openEuler 22.03 LTS SP1 操作系统进行验证
(1)准备工作
创建大小约为 25G 的卷组,后续基于此卷组创建逻辑卷
2.1.1 xfs 文件系统 LVM 逻辑卷缩容
(1)创建大小约为 10G 的逻辑卷,并格式化为 xfs 文件系统,进行挂载测试
(2)将以上逻辑卷缩容至 5G,查看分区是否正常
出现报错,不能重新格式化,不能强制挂载,说明 xfs 文件系统的缩容存在问题
如果使用 mkfs.xfs -f
命令进行强制格式化,则可以正常缩容,但是分区上的所有数据也会丢失,这种操作显然是不行的
(3)结论
xfs 文件系统不能进行 LVM 逻辑卷的缩容操作
2.1.2 ext4 文件系统 LVM 逻辑卷缩容
(1)创建大小约为 10G 的逻辑卷,并格式化为 ext4 文件系统,进行挂载测试
(2)将以上逻辑卷缩容至 5G,查看分区是否正常
(3)结论
ext4 文件系统可以进行 LVM 逻辑卷的缩容操作
2.1.3 本节结论
经过以上测试,得出结论:xfs 文件系统不能进行 LVM 逻辑卷的缩容操作,ext4 文件系统可以进行 LVM 逻辑卷的缩容操作
另外,也可以通过另外一种缩容方式明确得出这一结论。即使用 lvreduce
命令的 -r
参数,此参数表示在缩容时同时使用 fsadm
调整底层文件系统的大小:
(1)xfs 文件系统 LVM 逻辑卷缩容
输出内容如下图所示:
报错显示:Xfs filesystem shrinking is unsuppored(Xfs 文件系统收缩不被支持)
(2)ext4 文件系统 LVM 逻辑卷缩容
# 执行以下命令对 ext4 文件系统的 LVM 逻辑卷缩容
$ lvreduce -r -L 5G /dev/vg0/lv_ext4
输出内容如下图所示:
信息显示逻辑卷缩容成功
2.2 能否挂载状态缩容
现有处于挂载状态的文件系统为 ext4 的逻辑卷:
直接对其进行缩容操作,命令执行过程中会询问是否卸载分区:
缩容后,会自动挂载分区:
综上,不能对处于挂载状态的逻辑卷分区进行缩容操作,工具会自动卸载、挂载
2.3 如何对根分区进行缩容操做
由 2.2 得出结论,在对逻辑卷缩容时必须要先卸载分区。正常系统中,根分区显然是不能卸载的,那么想对根分区进行缩容该如何操作呢?
进单用户模式进行操作,发现单用户模式并没有 lvm 相关命令
正确的根分区缩容操作如下:
(1)使用光盘进入救援模式,选择 “ 3) Skip to shell ”,这样可以不去挂载 /mnt/sysroot
或 /mnt/sysimage
(2)执行 lsblk
命令查看逻辑卷是否处于激活状态,即是否有 /dev/mapper/...
相关路径,若没有则需要先激活逻辑卷
(3)执行 vgchange -ay
命令激活所有卷组及其逻辑卷,之后再次执行 lsblk
命令查看逻辑卷路径
(4)执行 lvreduce -r -L -20G /dev/mapper/openeuler-root
命令进行缩容操作,并验证缩容结果
(5)退出救援模式,进入系统,验证缩容结果及系统有无异常
至此,根分区成功缩容!