Ich weiß, dass ich mit diesem cryptsetup isLuks
Befehl herausfinden kann, ob eine Partition ein LUKS-Container ist. Ich möchte diesen Befehl mit dem Einhängepunkt des LUKS-Containers verwenden können, falls ich nicht sicher sein kann, dass ich den Gerätenamen der Partition kenne. Wie kann ich dies mit einem Befehl tun?
Ich habe zum Beispiel einen Luks-Container bei /dev/sda2
, ich öffne ihn mit
$ cryptsetup luksOpen /dev/sda2 vault
Anschließend montiere ich den Container mit
$ mount /dev/mapper/vault /mountpoint
An dieser Stelle möchte ich wissen, ob es /mountpoint
sich um einen Luks-Container handelt
$ 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.
Normalerweise würde ich verwenden, lsblk
um das Blockgerät eines Einhängepunkts abzurufen, aber dies gibt den /dev/mapper/vault
Pfad zurück.
└─sda2 8:8 0 9.3G 0 part
└─vault 252:0 0 9.3G 0 crypt /mountpoint
/dev/mapper/vault
Wenn ich das irgendwie lösen könnte /dev/sda2
, könnte ich die Befehlsersetzung innerhalb des cryptsetup isLuks
Befehls verwenden.
Es wäre toll, etwas Eleganteres zu finden als die Verwendung von awk
oder etwas zum Analysieren der Ausgabe von mount
, aber wenn das die einzige Möglichkeit ist, dann funktioniert es wohl.
Antwort1
Ich hatte auch das gleiche Problem. So wurde es gelöst.
lsblk -sJp | jq -r --arg dsk "/dev/mapper/disk_name" '.blockdevices | .[] | select(.name == $dsk) | .children | .[0] | .name'
Rückgabe zB/dev/sda2
Antwort2
Das sollte funktionieren. Es ist ein wenig lang, aber eine Bash-Funktion würde es vereinfachen:
cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`
Antwort3
jemand erwähnte die Verwendunglsblk
Dies ist ein relativ einfacher Weg, aber nur, wenn Sie
alias lsblk2='lsblk -o type,name,label,partlabel,size,fstype,model,serial,wwn,uuid'
Dann enthält die Ausgabe von lsblk viele zusätzliche nützliche Informationen und FSTYPE
zeigt crypto_LUKS
die resultierenden Partitionen darunter an. Außerdem haben Sie das Festplattenmodell und die Seriennummer als Referenz, was ich beim Verstehen der Dinge hilfreich finde.
man lsblk
und fügen Sie danach alle Optionen hinzu -o
, die es für Sie nützlicher machen.
Ich denke, auf diese Weise ... eine einfache sichtbare Baumliste aller Festplatten zu erhalten, die Linux derzeit sieht ... ist der direkteste Weg mit dem geringsten Tippaufwand, um herauszufinden, welche Festplatten/Partitionen Luks-verschlüsselt sind. Zumindest wird crypto_LUKS
das angezeigt, da ich das bei der Verwendung von RHEL 7.9 sehe.
Antwort4
Das hat bei mir funktioniert:
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
Der lsblk
Befehl hatte nur die NAME
Option, daher erhalten wir nur den Namen der Partitionen im System. -ln
Außerdem werden der Titel und die Baumform entfernt, sodass es sich um eine reine Liste handelt. Der grep
Befehl ist optional, er überspringt die Überprüfung der von Snap erstellten Loop-Partitionen. Dann ein weiterer Befehl lsblk
zu der als LUKS erkannten Partition.
Es ist knifflig, aber LUKS cryptsetup
funktioniert mit Partitionen, nicht mit Einhängepunkten. Wenn Sie es in einem Skript verwenden möchten, können Sie es zur besseren Übung als Funktion erstellen.