Wie kann man anhand des Einhängepunkts feststellen, ob es sich bei einer Partition um eine LUKS-Partition handelt?

Wie kann man anhand des Einhängepunkts feststellen, ob es sich bei einer Partition um eine LUKS-Partition handelt?

Ich weiß, dass ich mit diesem cryptsetup isLuksBefehl 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 /mountpointsich 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, lsblkum das Blockgerät eines Einhängepunkts abzurufen, aber dies gibt den /dev/mapper/vaultPfad zurück.

└─sda2   8:8    0   9.3G  0 part
  └─vault 252:0    0   9.3G  0 crypt /mountpoint

/dev/mapper/vaultWenn ich das irgendwie lösen könnte /dev/sda2, könnte ich die Befehlsersetzung innerhalb des cryptsetup isLuksBefehls verwenden.

Es wäre toll, etwas Eleganteres zu finden als die Verwendung von awkoder 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 FSTYPEzeigt crypto_LUKSdie resultierenden Partitionen darunter an. Außerdem haben Sie das Festplattenmodell und die Seriennummer als Referenz, was ich beim Verstehen der Dinge hilfreich finde.

man lsblkund 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_LUKSdas 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 lsblkBefehl hatte nur die NAMEOption, daher erhalten wir nur den Namen der Partitionen im System. -lnAußerdem werden der Titel und die Baumform entfernt, sodass es sich um eine reine Liste handelt. Der grepBefehl ist optional, er überspringt die Überprüfung der von Snap erstellten Loop-Partitionen. Dann ein weiterer Befehl lsblkzu der als LUKS erkannten Partition.

Es ist knifflig, aber LUKS cryptsetupfunktioniert 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.

verwandte Informationen