我想swap
从当前的 LUKS 容器中删除我的 LVM LV,并使其不加密。
我想避免像gparted
控制过程中的每一步这样的事情。
lvremove
在 LV上完成操作swap
并pvmove
获得连续的 PV 范围后,如何计算出要传递到的最小大小pvresize
?鉴于现在缩小的 PV,我如何计算出 LUKS 容器应包含多少个扇区或 MiB,以便我可以缩小 LUKS 分区以匹配?
我是否正确地认为 LUKS 容器没有长度,并且通过简单地缩小分区来缩小?
有没有办法在 LVM 级别检查 PV 的最终范围仍然可以访问,即它们确实位于缩小的分区的可寻址扇区内?
答案1
1.)
从手册页:
pvresize
如果物理卷在其新结束位置之后分配了扩展区,则将拒绝收缩物理卷。
所以你可以通过反复试验来做到这一点。其实pvresize
会告诉你一部分:
/dev/dm-7: cannot resize to 17564 extents as 18620 are allocated.
要确定确切的大小,您需要知道 PE 大小(例如 4MiB)和第一个 PE 偏移量(例如 1MiB)。当然还有最后分配的盘区的编号。
pvs -o pv_name,pe_start,vg_extent_size,seg_pe_ranges
因此,总大小可能是 1MiB(第一个 PE)+ 18620 * 4MiB(PE 大小)。
2.)
您需要知道 LUKS 标头大小/数据偏移量。通常这是 4096 个扇区,即 2MiB。请检查cryptsetup luksDump
, Payload offset
。
因此,您的新分区大小是 LUKS 有效负载偏移量加上您将 PV 本身调整到的大小。
3.)
是的,也不是。 LUKS 不会在其元数据中保留大小,因此如果您要关闭 LUKS 容器,甚至重新启动,那么它只会使用块设备本身的大小。
但对于在线调整大小,您需要使用cryptsetup resize
, 将其设置为您在 中使用的任何大小pvresize
。
4.)
有时,我会通过将有问题的设备以只读模式传递给 qemu/KVM 实例,运行一些 Linux 救援系统来实现这一点。很难检查主机(例如,使用只读循环设备),因为 LVM 不喜欢看到重复的 PV UUID 或 VG/LV 名称。如果 PV 小于预期,LVM 将拒绝激活。