1、背景
公司本来有一台服务器配置如下:
操作系统:ubuntu 22.04 LTS
硬盘:一块960G SSD,做成LVM分区,文件格式EXT4,全部挂载在根目录
因业务部门要求,需要扩展根分区,要求添加三块960G硬盘,并继续作为LVM扩展到根目录。后来,因新业务要求,根分区不需要那么大,且新业务要求的文件格式为XFS,需要将两块硬盘退出挂在根分区下的LV,重新做成xfs格式的LVM分区挂载在其他目录。
LVM缩减需要卸载分区挂载,才能进行缩减,所以根分区缩减需要用live-cd或者U盘引导启动系统,然后才能缩减。其它非根目录可以直接卸载进行缩减。在缩减分区前一定要备份重要数据。如果出现问题了,可以恢复数据。
另外注意: xfs文件格式lvm不支持动态缩减,只支持动态增加,缩减需要对分区进行格式化。ext4、ext3、ext2文件格式LVM支持动态缩减增加。
2、操作步骤
2.1 查看并确认当前分区情况
查看硬盘及分区情况lsblk
root@server_2:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.7M 1 loop /snap/core20/2434
loop1 7:1 0 63.8M 1 loop /snap/core20/2496
loop2 7:2 0 91.9M 1 loop /snap/lxd/29619
loop3 7:3 0 91.9M 1 loop /snap/lxd/32662
loop4 7:4 0 44.5M 1 loop /snap/snapd/23771
loop5 7:5 0 44.4M 1 loop /snap/snapd/23545
sdb 8:16 0 931.5G 0 disk
├─sdb1 8:17 0 1M 0 part
├─sdb2 8:18 0 2G 0 part /boot
└─sdb3 8:19 0 929.5G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 3.6T 0 lvm /
sdc 8:32 0 894.3G 0 disk
└─sdc1 8:33 0 894.3G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 3.6T 0 lvm /
sdd 8:48 0 894.3G 0 disk
└─sdd1 8:49 0 894.3G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 3.6T 0 lvm /
sde 8:64 0 894.3G 0 disk
└─ubuntu--vg-ubuntu--lv 253:0 0 3.6T 0 lvm /
可以看到分区/dev/sdb3、/dev/sdc1、/dev/sdd1、/dev/sde已经添加到/dev/ubuntu--vg/ubuntu--lv逻辑卷中。
查看lv情况lvs
root@server2:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <3.6t
查看lv情况vgs
root@server2:~# vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 2 1 0 wz--n- 3.6t <23.76g
查看pv情况pvs
PV VG Fmt Attr PSize PFree
/dev/sdb3 ubuntu-vg lvm2 a-- <929.51g 0
/dev/sdc1 ubuntu-vg lvm2 a-- 894.25g 0
/dev/sdd1 ubuntu-vg lvm2 a-- 894.25g 0
/dev/sde ubuntu-vg lvm2 a-- 894.25g <23.76
分区/dev/sdb3、/dev/sdc1、/dev/sdd1和/dev/sde已经作为PV添加到ubuntu-vg中。
2.2、使用U盘引导进入无盘系统
重启服务器,进入系统引导顺序选择界面

选择U盘启动

我自己的引导U盘是用ventoy做的,这里根据自己情况选择, 因为自己在ubuntu-22.04-live-server镜像引导后未找到try ubuntu选项(不安装ubuntu系统,只是在内存加载使用)。所以使用ubuntu-22.04-desktop镜像。

选择【Boot in normal mode】

选择【* Try or Install Ubuntu】

选择【Try Ubuntu】

进入系统后,打开Terminal终端,然后为临时系统root账号设置密码。sudo passwd root,然后根据提示输入两次密码

切换到root账号
查看存储信息,发现使用的根目录挂载分区不是/dev/ubuntu--vg/ubuntu--lv,是/cow,说明已经可以调整原来系统根目录。

2.3、缩减LVM逻辑卷lv
再次查看并确认lvm相关信息

2.4 缩减逻辑卷
缩减前需要激活需要缩减的逻辑卷
lvchange -ay /dev/ubuntu-vg/ubuntu-lv
需要缩减/dev/ubuntu-vg/ubuntu-lv,/dev/sdd和/dev/sdc1两个PV显示的Psize均为894.25g。
如果要将/dev/sdd和/dev/sdc1两个PV缩减出来的话,需要将ubuntu-lv至少缩减1788.5G。为了保险起见缩减ubuntu-lv至1800G
缩减前需要使用e2fsck对ubuntu-lv逻辑卷进行检测。

检测完毕后,首先重置/dev/ubuntu-vg/ubuntu-lv文件系统的大小至1800G,命令如下:
resize2fs /dev/ubuntu-vg/ubuntu-lv 1800G
注意:
- 对于ext4、ext3、ext2使用e2fsck对文件系统进行调整(增大和缩小都支持)。
- xfs文件系统的调整命令是xfs_growfs(只支持增大)
文件系统调整后,调整/dev/ubuntu-vg/ubuntu-lv逻辑卷
lvreduce -L 1800G -f -r /dev/ubuntu-vg/ubuntu-lv
lv缩减时,会提示数据可能损坏, 输入y确认

2.5 将pv从VG中剔除
再次查看PV的使用情况,命令
pvs -o+pv_used

发现/dev/sdc1和/dev/sdd两个PV的USED都为0(不为0时,无法从vg中剔除),将他们都从vg中剔除。命令:
vgreduce /dev/sdd
vgreduce /dev/sdc1

查看pv信息,发现/dev/sdc1和/dev/sdd两个PV都没有加入到ubuntu-vg中。但是两块分区是属于PV类型,有文件系统签名,下面清除文件系统签名
2.6 清除文件系统签名
每个磁盘和分区上都有某种签名和元数据!魔术字符串。你可以使用wipefs命令查看分区表签名1元数据/术字符串。wipes命令可以擦除文件系统, RAIDQ 或分区表签名/元数据。
清除文件系统签名
wipefs --all /dev/sdc1
wipefs --all /dev/sdd

再次查看pv信息,发现pv中已经没有/dev/sdc1和/dev/sdd
root@ip2:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb3 ubuntu-vg lvm2 a-- <929.51g 0
/dev/sdc1 ubuntu-vg lvm2 a-- 894.25g <23.76g
重启系统,验证系统正常。
至此,ubuntu-22.04系统lvm根目录缩减完成。
浙公网安备 33010602011771号