如何從掛載點判斷一個分割區是否是LUKS分割區?

如何從掛載點判斷一個分割區是否是LUKS分割區?

我知道能夠使用該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適用於分區,而不是掛載點。如果您要在腳本中使用它,您可以將其建立為函數以便更好地實踐。

相關內容