我正在编写一个shell脚本(仅适用于Ubuntu),它假定磁盘先前已打开(使用下面的命令)对其进行操作(resize2fs
,lvcreate
, ...)。但是,情况可能并非总是如此,当磁盘关闭时,脚本用户必须在运行脚本之前运行此行,询问他/她的密码:
sudo cryptsetup luksOpen /dev/sdaX sdaX_crypt
理想情况下,脚本应该以此命令开头,从而简化用户序列。但是,如果磁盘确实已经打开,则脚本将失败,因为加密磁盘无法打开两次。
如何检查磁盘先前是否已打开?检查/dev/mapper/sdX_crypt
是否存在有效的解决方案/足够?如果没有或不可能,有没有办法只在必要时运行命令?
答案 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