答案1
例如,Gnome 磁盘不需要 sudo 权限,但它仍然可以解码 LUKS 设备的锁定/解锁状态。
GNOME 磁盘使用 UDisk 来获取信息。这没有什么黑客之处,如果设备被锁定,或者以 形式的有效对象路径(其中转换为),则该CleartextDevice
属性将始终为设备映射器明文设备名称(在 DBus 上进行编码)。如果您不想解析输出,可以使用仅获取属性。它还可以将输出格式化为 JSON,以便更简单的解析。/
/org/freedesktop/UDisks2/block_devices/dm_2d<num>
dm_2d<num>
dm-<num>
-
_2d
udisksctl
busctl
CleartextDevice
锁定的 LUKS 设备:
$ busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda1 org.freedesktop.UDisks2.Encrypted CleartextDevice -j
{
"type" : "o",
"data" : "/"
}
解锁的 LUKS 设备:
$ busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/nvme0n1p3 org.freedesktop.UDisks2.Encrypted CleartextDevice -j
{
"type" : "o",
"data" : "/org/freedesktop/UDisks2/block_devices/dm_2d0"
}
U盘 DBus API保证稳定,设备的对象路径将始终为/org/freedesktop/UDisks2/block_devices/<name>
。
但您始终可以简单地检查 LUKS 设备是否有子设备。明文设备将始终是 LUKS 设备的子设备,因此您可以从lsblk
sysfs 或从 sysfs 进行检查。
锁定的 LUKS 设备:
$ ls /sys/block/sda/sda1/holders/
解锁的 LUKS 设备:
$ ls /sys/block/nvme0n1/nvme0n1p3/holders
dm-0
答案2
我可能不明白这个问题,但只是看看/dev/mapper/
映射是否存在。除非被解密/解锁,否则它不会在那里。
要显示活动驱动器映射驱动器:
for file in $(readlink /dev/mapper/*); do echo $(ls -1 "/sys/block/${file##[./]}/slaves"); done