缩小一个已经创建LVM的硬盘分区

之前用的一台跑LinuxMint的笔记本坏了,用的SSD硬盘就拆了下来,数据已经都迁到了新电脑里,但还没有删掉。最近需要一个在macOS上用的移动硬盘,就把这块拿来放到USB硬盘盒里了。

但是暂时还不想把硬盘里的数据都删除了,就想把原来的分区调整一下,腾点空间做个macOS能识别的分区来用。不过因为原来是用LVM的,所以操作起来还有点麻烦,不然直接用磁盘工具resize一下就好了。

(以下操作都在Linux下进行)

LVM的详情可以用LVM相关命令查看,比如:

lvm lvscan
lvm vgscan
lvm pvscan
lvs
vgs
pvs
...

首先要缩小LVM里的逻辑卷(插上USB硬盘后先不要mount,如果自动mount则先umount):

# 先进行卷检查
e2fsck -fy /dev/mint-vg/root
# 调整文件系统,原来是900G,缩小到700G
resize2fs /dev/mint-vg/root 700G
# 缩小逻辑卷,注意,要比文件系统略大一点,防止丢数据。
lvreduce -L 701G /dev/mint-vg/root
# 再次调整文件系统,适配新的逻辑卷
resize2fs /dev/mint-vg/root

其中缩小逻辑卷操作将显示可能丢失数据的严重警告,只要确认空间大小没问题,一般不会丢数据。

第二步是缩小LVM的物理卷:

先检查当前的卷分布信息

pvdisplay -v -m

可以看到现在整个物理卷分成三段:第一段是缩小后的root卷,第二段是200G左右的空闲空间,第三段是SWAP卷。所以现在需要把SWAP卷向前移动一下,把空闲空间放到最后。

pvmove --alloc anywhere /dev/sdb2:aaaa-bbbb /dev/sdb2:cccc-ddddd

其中aaaa和bbbb是SWAP的起点块和结束块,cccc是原空闲空间的起点块,dddd为新的SWAP结束块,等于:cccc + bbbb - aaaa

移动完成后就可以缩小物理卷了:

pvresize --setphysicalvolumesize 702G /dev/sdb2

注意,这里的容量是新的root卷(701G)加上SWAP卷(1G)后的总容量,不要搞错了。

现在要实际调整分区大小了,但不幸的是磁盘工具仍然不支持,这时你需要安装gparted,当然也会弹出丢失数据的警告,但实际没问题,直接缩小分区。然后在腾出来的空闲空间里创建一个新分区。

最后,用macOS的磁盘工具格式化新分区使用。

相比之下扩大就简单多了:

如果是硬盘本身扩大(比如虚拟机)

pvresize --setphysicalvolumesize 999G /dev/sdb2  # PV扩大,VG同样扩大
lvextend -L 998G /dev/mint-vg/root  # 扩大LV
resize2fs /dev/mint-vg/root

如果是增加硬盘

pvcreate /dev/sdc2  # 新建PV
vgextend mint-vg /dev/sdc2  # 添加到现有VG,VG容量扩大
lvextend -L 998G /dev/mint-vg/root  # 扩大LV
resize2fs /dev/mint-vg/root

操作简单也易于理解。

推送到[go4pro.org]