我注意到有时vgchange -a n [vgname]
似乎无法正确关闭卷组。这种情况最常发生在我实际准备一个新系统时,我不知道是什么原因造成的。考虑以下磁盘结构(输出lsblk -o name,fstype
)
NAME FSTYPE
/dev/sdx
+- /dev/sdx1 crypto_LUKS
| +- test_luks LVM2_member
| | +- test_lvm-test ext4
当我以正常方式打开所有这些东西时(cryptsetup open ...
,,vgchange -a y ...
等等),做一些事情test_lvm-test
,然后关闭所有内容
umount [mountpoint of test_lvm-test]
vgchange -a n test_lvm
cryptsetup close test_luks
test_lvm
vgs
按照预期从 的输出中消失。但是,如果我刚刚创建了这个结构(请参阅下面的重现),第一次安装它,然后以相同的方式关闭它,test_lvm
它不会从 的输出中消失vgs
。相反,vgs
它会抱怨物理卷的设备“未被找到或被过滤器拒绝”。要删除 中的错误,vgs
我必须重新打开test_luks
和test_lvm
,再次禁用test_lvm
并再次关闭test_luks
。
为什么会发生这种情况?为什么 LVM在第一次安装时会保留句柄,但之后却不会保留test_lvm
?vgchange -a n test_lvm; cryptsetup close test_luks
我能够在 VirtualBox 中使用 Arch Linux Live CD“Arch Linux 5.2.5-arch1-1-ARCH”最一致地重现此行为,如下所示
# Let /dev/sdx1 be the partition to test this on
#
# Create LVM on LUKS with one ext4 volume
#
cryptsetup luksFormat --cipher aes-xts-plain64 --hash sha256 --label "Test (Encrypted)" /dev/sdx1
cryptsetup open /dev/sdx1 test_luks
pvcreate /dev/mapper/test_luks
vgcreate test_lvm /dev/mapper/test_luks
lvcreate --extents 100%FREE test_lvm --name test
mkfs.ext4 -L Test /dev/test_lvm/test
#
# Mount volume and write to it
#
mount /dev/test_lvm/test /mnt
echo "Hello World" > /mnt/test.txt
#
# Unmount everything
#
umount /mnt
vgchange -a n test_lvm
# -> 0 logical volume(s) in volume group "test_lvm" now active
cryptsetup close test_luks
#
# Check vgs
#
vgs
# -> Warning: Device for PV [uuid] not found or rejected by a filter.
# -> Warning: Device for PV [same uuid] not found or rejected by a filter.
# -> Couldn't find device with uuid [same uuid again].
# -> VG #PV #LV #SM Attr VSize VFree
# -> test_lvm 1 1 0 wz-pn- 492.00m 0
#
# Mount and unmount again
#
cryptsetup open /dev/sdx1 test_luks
vgs
# No error this time
vgchange -a n test_lvm
cryptsetup close test_luks
# test_lvm no longer listed in vgs and no errors.
答案1
关闭 LUKS 容器后,有关未找到 PV 的错误消息可以通过简单地运行来禁用/删除pvscan --cache
。cryptsetup close <device>
但是,我仍然不知道在这种情况下关闭 LUKS 容器是否会对存储在其中的数据产生负面影响。如果有人对此有更多了解,请告诉我。