调整 LVM-on-LUKS 大小
本文档遵循调整 LVM-on-LUKS-on-GPT 分区的过程。您也可以使用 GParted GUI 工具调整 LUKS 分区大小,对于初学者来说可能更容易和更快。
方法
我们操作的文件系统将具有以下结构
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk ├─sda1 8:1 0 99M 0 part /boot └─sda2 8:2 0 111.7G 0 part └─vgroup 254:0 0 111.7G 0 crypt ├─vgroup-lvroot 254:1 0 30G 0 lvm / └─vgroup-lvhome 254:2 0 81.7G 0 lvm /home
目标是清理未使用的空间并创建一个新的分区 sda3
,而不会丢失任何数据。假设所有文件系统均为 ext4
。
整个过程应从 Arch live USB 系统运行,以避免任何文件系统损坏。
过程
缩小 LVM-on-LUKS
启动和设置
启动到您的 live USB 闪存安装介质。
解密 LUKS 卷
# cryptsetup luksOpen /dev/sda2 cryptdisk
调整文件系统和 LVM 逻辑卷大小
按照这些说明操作。
您可以运行 fsck
以确保没有任何损坏
# e2fsck -f /dev/vgroup/lvhome
调整 LVM 物理卷大小
要计算新的 LVM 物理卷大小,请使用以下简单公式:NEW_VOLUME_BYTES = PE_SIZE * PE_COUNT + UNUSABLE_SIZE
pvdisplay /dev/mapper/cryptdisk
... PV Size 950.05 GiB / not usable 4.00 MiB ... PE Size 4.00 MiB ... Allocated PE 116303 ...
使用上述公式:(116303 * 4 MiB + 4 MiB) in Bytes = 487814332416
。
调整卷大小。请注意大小值末尾附加的 "B" (Bytes)。此命令是安全的,因为如果新大小不适合所有现有盘区,它将提前退出
# pvresize --setphysicalvolumesize 487814332416B /dev/mapper/cryptdisk
调整 LUKS 卷大小
要计算新的 LUKS 卷大小,请使用以下简单公式:NEW_LUKS_SECTOR_COUNT = PV_EXTENT_COUNT * PV_EXTENT_SIZE IN BYTES / LUKS_SECTOR_SIZE
# pvdisplay /dev/mapper/cryptdisk
... PV Size 454.31 GiB / not usable 3.00 MiB ... PE Size 4.00 MiB Total PE 116303 ...
# cryptsetup status cryptdisk
... sector size: 512 ...
(116303 extents + 1 unusable extent) * 4194304 B/extent / 512 B/sector = 952762368 sectors
调整 LUKS 卷大小
# cryptsetup -b $NEW_LUKS_SECTOR_COUNT resize cryptdisk
调整分区大小
要计算新的分区大小,请使用以下简单公式:NEW_PARTITION_SECTOR_END = PARTITION_SECTOR_START + (LUKS_SIZE_SECTORS + LUKS_OFFSET_SECTORS) - 1
。 - 1
是因为 parted 采用包含性的扇区结束参数。
# cryptsetup status cryptdisk
... offset: 4096 sectors size: 952762368 sectors
关闭 LUKS 卷以离线调整大小。您可能需要停用 cryptdisk 上的 LVM 卷,否则它将无法关闭。
# vgchange -a n vgroup # cryptsetup close cryptdisk
使用 parted
调整分区大小
# parted /dev/sda (parted) unit Unit? [compact]? s (parted) p ... 2 8003584s 2000408575s 1992404992s
使用上述公式返回:8003584 + (952762368 + 4096) - 1 = 960770047
(parted) resizepart 2 960770047 Warning: Shrinking a partition can cause data loss, are you sure you want to continue? Yes/No? y (parted) q
此时,您可以重新打开 LUKS 卷并重新挂载分区。如果您在上面手动停用了 LVM 分区,则需要手动重新激活它们。
# cryptsetup luksOpen /dev/sda2 cryptdisk # vgchange -a y vgroup
扩大 LVM on LUKS
扩大 LVM-on-LUKS 逻辑分区(例如,在迁移到更大的硬盘后)以相反的方式完成 - 从最外层到最内层分区
primary partition(LUKS device{volume group[(logical partition1)(logical partition2-->)]})
准备工作
在新硬盘上创建所需大小的新分区,例如使用 GNU Parted,并将包含 LUKS 容器的旧分区 sdX1
克隆到新分区 sdY1
中
# dd if=/dev/sdX1 of=/dev/sdY1 bs=4M
扩展加密设备的物理区段
现在,在新硬盘上打开加密设备 CryptDisk
# cryptsetup open /dev/sdY1 CryptDisk
查看您当前的物理卷。在本例中,我们有一个加密设备 CryptDisk
,其中包含一个卷组 CryptVolumeGroup
,该卷组包含两个分区 root
和 home
# pvdisplay -m
--- Physical volume --- PV Name /dev/mapper/CryptDisk VG Name CryptVolumeGroup PV Size <118.75 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 30399 Free PE 0 Allocated PE 30399 PV UUID hu0iA9-i8fv-2SC1-C6ys-LQCz-sptQ-RSOUE5 --- Physical Segments --- Physical extent 0 to 6399: Logical volume /dev/CryptVolumeGroup/root Logical extents 0 to 6399 Physical extent 6400 to 30398: Logical volume /dev/CryptVolumeGroup/home Logical extents 0 to 23998
通过将物理盘区 (PE) 总数乘以 PE 的大小,我们得到物理卷 (PV) 的总大小,在本例中为 118.75 GiB。虽然 pvdisplay 不显示空闲盘区,但我们可以扩大 PV 以使用分区的所有可用剩余空间
# pvresize /dev/mapper/CryptDisk
现在我们得到
# pvdisplay -m
... --- Physical Segments --- Physical extent 0 to 6399: Logical volume /dev/CryptVolumeGroup/root Logical extents 0 to 6399 Physical extent 6400 to 30398: Logical volume /dev/CryptVolumeGroup/home Logical extents 0 to 23998 Physical extent 30399 to 60922: FREE
请注意 PV 末尾的空闲盘区。通过将空闲物理盘区乘以 PE 大小来计算大小差异 - 在本例中为 (60922-30399)*4 MiB = 119.2 GiB。
调整逻辑卷大小
现在我们将调整第二个逻辑卷 (LV) 的大小,在本例中,该逻辑卷包含 /home 分区,调整大小为等于空闲物理盘区的大小减去一些安全空间
# lvresize -L +119G /dev/CryptVolumeGroup/home
请注意第二个逻辑卷的新大小。通过将逻辑盘区总数乘以 PE 大小来计算其总大小 - 在本例中为 53438 * 4 MiB = 208.7 GiB
# pvdisplay -m
... --- Physical Segments --- Physical extent 0 to 6399: Logical volume /dev/CryptVolumeGroup/root Logical extents 0 to 6399 Physical extent 6400 to 59838: Logical volume /dev/CryptVolumeGroup/home Logical extents 0 to 53438 Physical extent 59839 to 60922: FREE
调整加密卷大小
现在我们将调整加密卷本身的大小。考虑到逻辑卷的总大小减去一些安全空间
# resize2fs -p /dev/CryptVolumeGroup/Home 208G
如果要求,请执行 e2fsck。就这样。