パーティションが LUKS コンテナであるかどうかを確認するために、コマンドを使用できることは知っていますcryptsetup isLuks
。パーティションのデバイス名がわからない場合に備えて、LUKS コンテナのマウントポイントでこのコマンドを使用できるようにしたいのですが、これを 1 つのコマンドで実行するにはどうすればよいですか?
例えば、私は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
を使用するよりもエレガントな方法や、 の出力を解析する何かが見つかったら素晴らしいのです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
コマンドはオプションであり、スナップによって作成されたループ パーティションのチェックをスキップします。次に、lsblk
LUKS として検出されたパーティションに別のコマンドを実行します。
ちょっと難しいですが、LUKS はcryptsetup
マウントポイントではなくパーティションで動作します。スクリプト内で使用する場合は、より良い練習のために関数として作成できます。