1 文件系统对缩容有无限制
此节主要验证当前主流的 xfs 文件系统和 ext4 文件系统是否都支持 LVM 逻辑卷的缩容:
- 验证按照目前众所周知的操作规范,缩容前先要卸载对应分区
- 基于 openEuler 22.03 LTS SP1 操作系统进行验证
(1)准备工作
创建大小约为 25G 的卷组,后续基于此卷组创建逻辑卷
# 创建大小约为 25G 的卷组(VG)
$ vgcreate vg0 /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "vg0" successfully created
# 查看创建的 VG 的详细信息
$ vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <25.00 GiB
PE Size 4.00 MiB
Total PE 6399
Alloc PE / Size 0 / 0
Free PE / Size 6399 / <25.00 GiB
VG UUID PhStrz-y8do-kZAl-a9hq-dkdj-mqZl-TTqDMX
1.1 xfs 文件系统 LVM 逻辑卷缩容
(1)创建大小约为 10G 的逻辑卷,并格式化为 xfs 文件系统,进行挂载测试
# 创建大小为 10G 的逻辑卷 lv_xfs
$ lvcreate -L +10G -n lv_xfs vg0
Logical volume "lv_xfs" created.
# 查看创建的逻辑卷的详细信息
$ lvdisplay /dev/vg0/lv_xfs
--- Logical volume ---
LV Path /dev/vg0/lv_xfs
LV Name lv_xfs
VG Name vg0
LV UUID W5YEDp-9kx3-JChe-MxLJ-1P06-yfF3-KTtlzD
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-03-13 09:20:51 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
# 将此逻辑卷格式化为 xfs 文件系统
$ mkfs.xfs /dev/vg0/lv_xfs
meta-data=/dev/vg0/lv_xfs isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 挂载此逻辑卷,并查看挂载情况
$ mkdir /lv_xfs
$ mount /dev/vg0/lv_xfs /lv_xfs/
$ df -Th /dev/vg0/lv_xfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv_xfs xfs 10G 104M 9.9G 2% /lv_xfs
(2)将以上逻辑卷缩容至 5G,查看分区是否正常
# 卸载分区挂载
$ umount /dev/vg0/lv_xfs
# 将逻辑卷缩容 5G
$ lvreduce -L 5G /dev/vg0/lv_xfs
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv_xfs? [y/n]: y
Size of logical volume vg0/lv_xfs changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume vg0/lv_xfs successfully resized.
# 重新格式化,出现报错
$ xfs_growfs /dev/vg0/lv_xfs
xfs_growfs: /dev/vg0/lv_xfs is not a mounted XFS filesystem
# 强制挂载,出现报错
$ mount /dev/vg0/lv_xfs /lv_xfs/
mount: /lv_xfs: can't read superblock on /dev/mapper/vg0-lv_xfs.
出现报错,不能重新格式化,不能强制挂载,说明 xfs 文件系统的缩容存在问题
如果使用 mkfs.xfs -f
命令进行强制格式化,则可以正常缩容,但是分区上的所有数据也会丢失,这种操作显然是不行的
# 使用 mkfs.xfs -f 命令进行强制格式化
$ mkfs.xfs -f /dev/vg0/lv_xfs
meta-data=/dev/vg0/lv_xfs isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 挂载,并查看分区大小
$ mount /dev/vg0/lv_xfs /lv_xfs/
$ df -Th /dev/vg0/lv_xfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv_xfs xfs 5.0G 68M 5.0G 2% /lv_xfs
(3)结论
xfs 文件系统不能进行 LVM 逻辑卷的缩容操作
1.2 ext4 文件系统 LVM 逻辑卷缩容
(1)创建大小约为 10G 的逻辑卷,并格式化为 ext4 文件系统,进行挂载测试
# 创建大小为 10G 的逻辑卷 lv_xfs
$ lvcreate -L +10G -n lv_ext4 vg0
Logical volume "lv_ext4" created.
# 查看创建的逻辑卷的详细信息
$ lvdisplay /dev/vg0/lv_ext4
--- Logical volume ---
LV Path /dev/vg0/lv_ext4
LV Name lv_ext4
VG Name vg0
LV UUID 0yVn8J-OiP7-M0SB-GWZG-qHTa-YOC4-k8JVEK
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2024-03-13 10:36:01 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
# 将此逻辑卷格式化为 xfs 文件系统
$ mkfs.ext4 /dev/vg0/lv_ext4
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 3794e4d4-4cbf-4aaa-921c-1e7159edef07
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# 挂载此逻辑卷,并查看挂载情况
$ mkdir /lv_ext4
$ mount /dev/vg0/lv_ext4 /lv_ext4/
$ df -Th /dev/vg0/lv_ext4
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv_ext4 ext4 9.8G 24K 9.3G 1% /lv_ext4
(2)将以上逻辑卷缩容至 5G,查看分区是否正常
# 卸载分区挂载
$ umount /dev/vg0/lv_ext4
# 进行磁盘检查(必须步骤)
$ e2fsck -f /dev/vg0/lv_ext4
e2fsck 1.46.4 (18-Aug-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv_ext4: 11/655360 files (0.0% non-contiguous), 66753/2621440 blocks
# 缩容文件系统
$ resize2fs /dev/vg0/lv_ext4 5G
resize2fs 1.46.4 (18-Aug-2021)
Resizing the filesystem on /dev/vg0/lv_ext4 to 1310720 (4k) blocks.
The filesystem on /dev/vg0/lv_ext4 is now 1310720 (4k) blocks long.
# 回收逻辑卷空闲空间
$ lvreduce -L 5G /dev/vg0/lv_ext4
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv_ext4? [y/n]: y
Size of logical volume vg0/lv_ext4 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume vg0/lv_ext4 successfully resized.
# 重新挂载,并查看挂载情况
$ mount /dev/vg0/lv_ext4 /lv_ext4/
$ df -Th /dev/vg0/lv_ext4
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv_ext4 ext4 4.9G 24K 4.6G 1% /lv_ext4
(3)结论
ext4 文件系统可以进行 LVM 逻辑卷的缩容操作
1.3 结论
经过以上测试,得出结论:xfs 文件系统不能进行 LVM 逻辑卷的缩容操作,ext4 文件系统可以进行 LVM 逻辑卷的缩容操作
另外,也可以通过另外一种缩容方式明确得出这一结论。即使用 lvreduce
命令的 -r
参数,此参数表示在缩容时同时使用 fsadm
调整底层文件系统的大小:
$ man lvreduce
......
-r|--resizefs
Resize underlying filesystem together with the LV using fsadm(8).
......
(1)xfs 文件系统 LVM 逻辑卷缩容
# 执行以下命令对 xfs 文件系统的 LVM 逻辑卷缩容
$ lvreduce -r -L 5G /dev/vg0/lv_xfs
输出内容如下图所示:
报错显示:Xfs filesystem shrinking is unsuppored(Xfs 文件系统收缩不被支持)
(2)ext4 文件系统 LVM 逻辑卷缩容
# 执行以下命令对 ext4 文件系统的 LVM 逻辑卷缩容
$ lvreduce -r -L 5G /dev/vg0/lv_ext4
输出内容如下图所示:
信息显示逻辑卷缩容成功
2 能否挂载状态缩容
现有处于挂载状态的文件系统为 ext4 的逻辑卷:
直接对其进行缩容操作,命令执行过程中会询问是否卸载分区:
缩容后,会自动挂载分区:
综上,不能对处于挂载状态的逻辑卷分区进行缩容操作,工具会自动卸载、挂载
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)退出救援模式,进入系统,验证缩容结果及系统有无异常
至此,根分区成功缩容!
评论