我知道能夠使用該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
找到比 using 更優雅的東西或解析 的輸出的東西會很棒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。
這很棘手,但很幸運並且cryptsetup
適用於分區,而不是掛載點。如果您要在腳本中使用它,您可以將其建立為函數以便更好地實踐。