我知道可以使用该cryptsetup isLuks
命令来查明分区是否为 LUKS 容器。我希望能够将此命令与 LUKS 容器的挂载点一起使用,因为我不能确定我知道分区的设备名称,如何在一个命令中执行此操作?
例如,我有一个 Luks 容器/dev/sda2
,我用它打开它
$ cryptsetup luksOpen /dev/sda2 vault
然后我用
$ mount /dev/mapper/vault /mountpoint
此时我想知道/mountpoint
Luks 容器
$ cryptsetup isLuks -v /dev/sda2
Command successful.
$ cryptsetup isLuks -v /mountpoint
Command failed with code 15: Block device required
$ cryptsetup isLuks -v /dev/mapper/vault
Command failed with code 22: Device /dev/mapper/vault is not a valid LUKS device.
通常我会用它lsblk
来获取挂载点的块设备,但这会返回路径/dev/mapper/vault
。
└─sda2 8:8 0 9.3G 0 part
└─vault 252:0 0 9.3G 0 crypt /mountpoint
如果我能以某种方式解决/dev/mapper/vault
,/dev/sda2
我就能够在cryptsetup isLuks
命令中使用命令替换。
awk
如果能找到比使用或解析输出更优雅的方法就太好了mount
,但如果这是唯一的方法,那么我想它就可以起作用。
答案1
我也有同样的问题。就这样解决了。
lsblk -sJp | jq -r --arg dsk "/dev/mapper/disk_name" '.blockdevices | .[] | select(.name == $dsk) | .children | .[0] | .name'
返回例如/dev/sda2
答案2
这应该可行。它有点长,但使用 bash 函数可以简化它:
cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`
答案3
有人提到使用lsblk
这是一个相对简单的方法,但前提是你必须
alias lsblk2='lsblk -o type,name,label,partlabel,size,fstype,model,serial,wwn,uuid'
然后 lsblk 的输出将包含许多额外的有用信息,并且FSTYPE
将显示crypto_LUKS
并显示下面的结果分区。您还可以参考磁盘型号和序列号,我发现这很有用,可以帮助您了解事情的来龙去脉。
man lsblk
并在之后添加任何-o
您可能发现使其对您更有用的选项。
我认为这样......获得 Linux 当前看到的所有磁盘的简单可见树形列表......是最直接的方式,只需输入最少的内容即可知道哪些磁盘/分区是 luks 加密的,至少在crypto_LUKS
我使用 RHEL 7.9 时会看到这样的显示。
答案4
这对我有用:
for part in $(lsblk -o NAME -ln | grep -E '^[^loop]'); do
if cryptsetup isLuks /dev/$part 2> /dev/null; then
lsblk /dev/$part -ln -o MOUNTPOINT
fi
done
该lsblk
命令只有选项NAME
,因此我们只会获取系统中分区的名称。它还-ln
退出了标题和树形结构,因此是一个纯列表。该grep
命令是可选的,它将跳过检查 snap 创建的循环分区。然后检查另一个lsblk
被检测为 LUKS 的分区。
这很棘手,但 LUKS 适用cryptsetup
于分区,而不是挂载点。如果您要在脚本中使用它,可以将其创建为函数以获得更好的练习。