Website-Icon .: blog cscholz.io :.

Linux: luks verschlüsseltes btrfs DD Image mounten

Ausgangssituation

Es wurde von einer externen Festplatte eine Image mittels DD erstellt. Nach x Wochen wird eine Datei vom System benötigt bzw. es werden Einstellungen eines Benutzers benötigt die mittels gsettings ausgelesen werden können.

Image mounten

Name der Image Datei: 20200419-13_31.dump

DD-Image inspizieren

Zuerst lohnt sich ein Blick auf das Image. Welche Partitionen liegen vor.

$ fdisk -l 20200419-13_31.dump 
Disk 20200419-13_31.dump: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 520D131A-E600-4C51-9771-BFE34EBDB637

Device Start End Sectors Size Type
20200419-13_31.dump1 2048 1050623 1048576 512M EFI System
20200419-13_31.dump2 1050624 428869631 427819008 204G Linux filesystem
20200419-13_31.dump3 428869632 976771071 547901440 261,3G Microsoft basic data

Es liegen drei Partitionen vor:

  1. UEFI Boot (FAT32)
  2. Linux (luks verschlüsselt – steht nicht in der Ausgabe, ist aber bekannt)
  3. Windows NTFS Partition

DD-Image als Loop Device einbinden

Um auf die einzelnen Partitionen zugreifen zu können muss das Image als Loop device eingebunden werden.

$ losetup -P /dev/loop0 20200419-13_31.dump

Die Verwendung von losetup mit dem Parameter -P hat einen charmanten Vorteil. Es werden automatisch alle erkannten Partitionen durchnummeriert eingebunden.

  1. UEFI Boot (FAT32) > /dev/loop0p1
  2. Linux (luks verschlüsselt – steht nicht in der Ausgabe, ist aber bekannt) > /dev/loop0p2
  3. Windows NTFS Partition >/dev/loop0p3

Luks Partition entschlüsselt

Die Linux Partition ist wie gesagt verschlüsselt. Diese muss vor der Benutzung entschlüsselt werden.

$ cryptsetup luksOpen /dev/loop0p2 img
Geben Sie die Passphrase für »/dev/loop0p2« ein:

Mounten der Partitionen

Mir ist bekannt, dass auf der Linux Partition btrfs mit Debian kompatiblen Sub Volumes verwendet wurde. Es existieren somit

Die Volumes werden entsprechend nach /target zusammengemountet. Dazu kommt noch die erste Partition, auf der sich die UEFI Boot Daten befinden.

$ mount -o subvol=@ /dev/mapper/img /target
$ mount -o subvol=@home /dev/mapper/img /target/home
$ mount /dev/loop0p1 /target/boot/

Kurze kontrolle ob alles geklappt hat. Prüfung mittels df was gemountet wurde

$ df -h | grep target
/dev/mapper/img 204G 134G 68G 67% /target
/dev/mapper/img 204G 134G 68G 67% /target/home
/dev/loop0p1 511M 58M 454M 12% /target/boot

Optional: Falls im Systemkontext des DD Images z.B. Updates installiert werden sollen die den Bootloader verändern sind noch folgende Verzeichnisse für die Systemungebung zu mounten.

$ for i in dev dev/pts proc run sys; do mount -o bind /$i /target/$i; done

Anschließend per chroot in den Systemkontext des Images wechseln. Hier kann dann auch mit gsettings gearbeitet werden um Einstellungen des Benutzers auszulesen.

$ chroot /target

Sauberer Rückbau

$ exit #(chroot)
$ sync
$ for i in dev/pts dev proc run sys; do umount /target/$i; done
$ umount /target/home
$ umount /target/boot
$ umount /target
$ cryptsetup luksClose img
$ losetup -d /dev/loop0

Trobleshooting

device-mapper: remove ioctl on img failed: Das Gerät oder die Ressource ist belegt

Die Ressource wird weiterhin verwendet. Prüfen von wem

$ dmsetup info -C 
Name Maj Min Stat   Open Targ Event UUID 
img 254    0 L--w      1    1     0 CRYPT-LUKS2-57c6706c5ad940f0bcebaea3d6cc3f5f-img

Open gibt die Anzahl der offenen Zugriffe an.

$ sudo dmsetup ls
img (254:0)

Jetzt wissen wir von „wem“. lsof sollte uns einen Hinweis geben von wem. Der Prozess kann dann beendet oder gekillt werden.

$ sudo lsof |grep 254,0

target is busy

Auch hier erst prüfen wie zuvor beschrieben von wem der Zugriff blockiert wird. Als harter unmount geht immer „lazy“. Quasi einfach Stecker ziehen. Kann not Datenverlust verbunden sein.

$ umount -lf /target

Quellen

Die mobile Version verlassen