如何关闭具有子分区的 luks 容器
How to close a luks container that has sub partitions
例如,这在 /dev/sda 上创建了 1 个分区,作为 /dev/sda1,它变成了一个 LUKS 容器,它进一步划分为 2 个子分区:
sgdisk -Z /dev/sda
sgdisk -n 1:0:0 -t 1:8300 -c 1:"Test Partition" /dev/sda
cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 1000 --use-urandom luksFormat /dev/sda1
cryptsetup luksOpen --allow-discards "test_encrypted"
sgdisk -Z /dev/mapper/test_encrypted
sgdisk -n 1:0:+6GB -t 1:8300 -c 1:"sub_test_1" /dev/mapper/test_encrypted
sgdisk -n 2:0:0 -t 2:8300 -c 2:"sub_test_2" /dev/mapper/test_encrypted
partprobe -s /dev/mapper/test_encrypted
lsblk
cryptsetup luksClose test_encrypted
尝试这样做,返回:device-mapper: remove ioctl on test_encrypted failed: Device or resource busy
,然后 Device test_encrypted is still in use
。
子分区有效,但一旦 partprobe 向内核报告了子分区,就无法再将其关闭。
kpartx
允许使用 -d
参数删除分区映射。如果 partprobe
无法支持此功能,我建议改用它。
例如,这在 /dev/sda 上创建了 1 个分区,作为 /dev/sda1,它变成了一个 LUKS 容器,它进一步划分为 2 个子分区:
sgdisk -Z /dev/sda
sgdisk -n 1:0:0 -t 1:8300 -c 1:"Test Partition" /dev/sda
cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 1000 --use-urandom luksFormat /dev/sda1
cryptsetup luksOpen --allow-discards "test_encrypted"
sgdisk -Z /dev/mapper/test_encrypted
sgdisk -n 1:0:+6GB -t 1:8300 -c 1:"sub_test_1" /dev/mapper/test_encrypted
sgdisk -n 2:0:0 -t 2:8300 -c 2:"sub_test_2" /dev/mapper/test_encrypted
partprobe -s /dev/mapper/test_encrypted
lsblk
cryptsetup luksClose test_encrypted
尝试这样做,返回:device-mapper: remove ioctl on test_encrypted failed: Device or resource busy
,然后 Device test_encrypted is still in use
。
子分区有效,但一旦 partprobe 向内核报告了子分区,就无法再将其关闭。
kpartx
允许使用 -d
参数删除分区映射。如果 partprobe
无法支持此功能,我建议改用它。