マウントポイントからパーティションが LUKS パーティションであるかどうかを判断するにはどうすればよいでしょうか?

マウントポイントからパーティションが LUKS パーティションであるかどうかを判断するにはどうすればよいでしょうか?

パーティションが LUKS コンテナであるかどうかを確認するために、コマンドを使用できることは知っていますcryptsetup isLuks。パーティションのデバイス名がわからない場合に備えて、LUKS コンテナのマウントポイントでこのコマンドを使用できるようにしたいのですが、これを 1 つのコマンドで実行するにはどうすればよいですか?

例えば、私はLuksコンテナを で持っていて/dev/sda2、それを開くと

$ cryptsetup luksOpen /dev/sda2 vault

次にコンテナをマウントします

$ mount /dev/mapper/vault /mountpoint

この時点で、/mountpointLuksコンテナが

$ 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コマンドはオプションであり、スナップによって作成されたループ パーティションのチェックをスキップします。次に、lsblkLUKS として検出されたパーティションに別のコマンドを実行します。

ちょっと難しいですが、LUKS はcryptsetupマウントポイントではなくパーティションで動作します。スクリプト内で使用する場合は、より良い練習のために関数として作成できます。

関連情報