这LUKS
/ dm-crypt
/cryptsetup
常见问题页面说:
2.15 我可以调整 dm-crypt 或 LUKS 分区的大小吗?
是的,您可以,因为 dm-crypt 和 LUKS 都不存储分区大小。
我一头雾水:
如果没有存储尺寸信息,什么是“调整大小”?
如何在打开/关闭加密卷时记住“调整大小”?
答案1
是关于在线的调整大小。
例如,如果您使用 LVM,创建一个 1G 大小的 LV,并在其上放置 LUKS,则如下所示:
# lvcreate -L1G -n test VG
# cryptsetup luksFormat /dev/mapper/VG-test
# cryptsetup luksOpen /dev/mapper/VG-test lukstest
# blockdev --getsize64 /dev/mapper/VG-test
1073741824
# blockdev --getsize64 /dev/mapper/lukstest
1071644672
因此,LUKS 设备的大小与 VG 测试设备的大小大致相同(1G 减去 LUKS 标头使用的 2MiB)。
现在,当你增大 LV 时会发生什么?
# lvresize -L+1G /dev/mapper/VG-test
Size of logical volume VG/test changed from 1.00 GiB (16 extents) to 2.00 GiB (32 extents).
Logical volume test successfully resized.
# blockdev --getsize64 /dev/mapper/VG-test
2147483648
# blockdev --getsize64 /dev/mapper/lukstest
1071644672
LV 现在是 2G 大,但 LUKS 设备仍然停留在 1G,因为这是它最初打开的大小。
一旦你luksClose
和luksOpen
,它也将是 2G - 因为 LUKS 不存储大小,它默认为你打开它时的设备大小。因此,关闭和打开(或简单地重新启动)会将 crypt 映射更新为新的设备大小。但是,由于您只能在卸载/停止容器内的所有内容后才能关闭容器,因此这基本上是一个离线调整大小。
但也许您在 LUKS 上安装了一个文件系统,它正在使用中,并且您不想为了调整大小而卸载它,这就是cryptsetup resize
作为一个文件系统出现的地方在线的调整大小操作。
# cryptsetup resize /dev/mapper/lukstest
# blockdev --getsize64 /dev/mapper/lukstest
2145386496
cryptsetup resize
将活动的 crypt 映射更新为新的设备大小,无需卸载,然后您可以跟进它resize2fs
或以其他方式在线扩展已安装的文件系统本身。
如果您不介意重新启动或重新安装,则永远不需要,cryptsetup resize
因为它会自动离线。但如果你想做的话在线的,这是唯一的办法。
缩小 ( cryptsetup resize --size x
) 时,调整大小是暂时的。 LUKS 不存储设备大小,因此下次 luksOpen 时,它将再次使用设备大小。因此,只有当支撑装置也相应收缩时,收缩才会起作用。
为了成功收缩,你必须向后工作......增长是首先增长分区,然后是 LUKS,然后是文件系统......收缩是首先收缩文件系统,最后是分区。
如果调整大小不起作用,很可能是由于未调整支持设备的大小,例如,在使用驱动器时,内核可能会拒绝对分区表进行更改。与 blockdev 检查所有设备层是否具有您期望的大小。