如何检查以前使用cryptsetup打开加密磁盘?

时间:2014-03-18 15:34:47

标签: shell ubuntu encryption

我正在编写一个shell脚本(仅适用于Ubuntu),它假定磁盘先前已打开(使用下面的命令)对其进行操作(resize2fslvcreate, ...)。但是,情况可能并非总是如此,当磁盘关闭时,脚本用户必须在运行脚本之前运行此行,询问他/她的密码:

sudo cryptsetup luksOpen /dev/sdaX sdaX_crypt

理想情况下,脚本应该以此命令开头,从而简化用户序列。但是,如果磁盘确实已经打开,则脚本将失败,因为加密磁盘无法打开两次。

如何检查磁盘先前是否已打开?检查/dev/mapper/sdX_crypt是否存在有效的解决方案/足够?如果没有或不可能,有没有办法只在必要时运行命令?

3 个答案:

答案 0 :(得分:1)

我也建议lsblk - 但是因为我来到这里找到了一些相关的信息,我确实找到了,并且我也在这里发布以下命令:

#: cryptsetup status <device> | grep -qi active

干杯

答案 1 :(得分:0)

由于我找不到更好的解决方案,我继续选择&#34;检查设备是否存在&#34;之一。

加密磁盘嵌入了一个特定的卷组(示例中称为my-vg),因此我的工作解决方案是:

if [ ! -b /dev/my-vg ]; then
  sudo cryptsetup luksOpen /dev/sdaX sdaX_crypt
fi

我检查/dev/my-vg是否存在而不是/dev/mapper/sda_cryptX,因为我的脚本中的每个其他命令都使用第一个作为参数,所以我保持一致性,但我认为下面的解决方案看起来更加封装:

if [ ! -b /dev/mapper/sdaX_crypt ]; then
  sudo cryptsetup luksOpen /dev/sdaX sdaX_crypt
fi

虽然我上面描述的解决方案对我有用,但是我有充分的理由转到后者或者它并不重要吗?

答案 2 :(得分:0)

您可以使用lsblk命令。

如果磁盘已解锁,它将显示两行:设备和映射设备,其中映射设备应为crypt类型。

# lsblk -l -n /dev/sdaX
sdaX   253:11   0   2G  0  part
sdaX_crypt (dm-6) 253:11   0   2G  0  crypt

如果磁盘尚未解锁,则只显示设备。

# lsblk -l -n /dev/sdaX
sdaX   253:11   0   2G  0  part