Tom*_*ale 12 dm-crypt luks cryptsetup volume device-mapper
在LUKS
/ dm-crypt
/ cryptsetup
FAQ页面说:
2.15 我可以调整 dm-crypt 或 LUKS 分区的大小吗?
是的,您可以,因为 dm-crypt 和 LUKS 都不存储分区大小。
我一头雾水:
如果没有存储大小信息,什么是“调整大小”?
如何在加密卷的打开/关闭过程中记住“调整大小”?
fro*_*utz 17
这是关于在线调整大小。
举个例子,如果你使用 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
Run Code Online (Sandbox Code Playgroud)
因此,LUKS 设备与 VG 测试设备的大小大致相同(LUKS 标头使用的 1G 减去 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
Run Code Online (Sandbox Code Playgroud)
LV 现在是 2G 大,但 LUKS 设备仍然停留在 1G,因为这是它最初打开时的大小。
一旦你luksClose
和luksOpen
,它也将是 2G——因为 LUKS 不存储大小,它默认为你打开它时的设备大小。因此关闭并打开(或简单地重新启动)会将 crypt 映射更新为新的设备大小。但是,由于您只能在卸载/停止其中的所有内容后才能关闭容器,因此这基本上是离线调整大小。
但是,也许你已经装载的文件系统上的陆氏,它在使用,而且你不想卸除了调整大小,而这也正是cryptsetup resize
来自于为在线调整操作。
# cryptsetup resize /dev/mapper/lukstest
# blockdev --getsize64 /dev/mapper/lukstest
2145386496
Run Code Online (Sandbox Code Playgroud)
cryptsetup resize
将活动的 crypt 映射更新为新的设备大小,不需要卸载,然后您可以跟进它resize2fs
或其他任何方式也可以在线增长已安装的文件系统本身。
如果您不介意重新启动或重新安装,您将永远不需要,cryptsetup resize
因为它会自动离线。但如果你想在网上做,那是唯一的方法。
缩小 ( cryptsetup resize --size x
) 时,调整大小是暂时的。LUKS 不存储设备大小,所以下次 luksOpen 时,它会再次使用设备大小。因此,只有当支撑装置也相应地收缩时,收缩才会发生。
对于成功的收缩,您必须向后工作......增长是首先增长分区,然后是LUKS,然后是文件系统......收缩是首先收缩文件系统,最后是分区。
如果调整大小不起作用,很可能是由于未调整后备设备的大小,例如内核可能会在驱动器正在使用时拒绝更改分区表。检查 blockdev 是否所有设备层都具有您期望的大小。