Effizientes erstellen eines Disk Images eines vollverschlüsselten Linux Rechners

Veröffentlicht: 27.09.2021 in Computer, Linux, Security
Schlagwörter:, , , ,

Motivation

Die Idee ist einen Rechner in einen Zustand zurücksetzen, in dem er vor einer Installation war. Das sollte mit möglichst wenige Handarbeit und ohne extra Installationen funktionieren.

Ein Backup wäre eine Lösung, hat aber den Nachteil, das erst ein Betriebssystem installiert werden muss und anschließend die Backup Software. Zudem besteht das Problem, dass das Backup in-line, also auf dem laufendem zu sicherndem System gemacht wird und somit einige Dateien in Benutzung sind und nicht gesichert werden können z.B. Datenbanken.

Um das alles zu umgehen eignet sich ein Diskimage. Dieses wird ohne großartige weiter Aktionen einfach auf eine Festplatte zurück kopiert. Das geht zum Beispiel sehr gut mit Linux dd. Leider beinhaltet ein Diskimage aber immer auch den unbenutzten Teil der Festplatte und ist somit deutlich größer als es sein müsste. Ein guter Kompromiss bietet hierbei die LiveCD Clonezilla, die ein Diskimage von einer Festplatte macht, aber nur den benutzten Teil in das Image packt. Leider hat Clonezilla den Nachteil das es von Hause aus nicht mit verschlüsselten Partitionen umgehen kann und daher von ihnn eine Image mit dd erzeugt, welches wiederum den unbenutzten Platz der Festplatte/Partition beinhaltet.

Daher hier nun eine Lösung um auch verschlüsselte Festplatten effizient, also nur den benutzen Platz, zu sichern.

Vorbereitung

Durchgeführt wurde dieses Tutorial auf einer Virtualbox VM unter Linux Mint. Die Gast VM war wiederum Linux Mint. Installiert out-of-the-box, komplettverschlüsselt mit LUKS und LVM. Die VM wurde im BIOS Modus gestartet. Alle Befehle müssen als root ausgeführt werden.

Voraussetzung

Was wird zur Diskimage Erstellung benötigt?

  • Linux Life CD, hier SystemRescueCD
  • LVM Volume Group Name, hier mint-vg
  • LVM alle Logischen Volume Namen, hier root
    Anmerkung: swap_1 brauchen wir nicht, weil es nicht gesichert werden muss
  • Devicename des verschlüsselten Physikalischen Volumes, hier /dev/mapper/sda5_crypt
# sudo vgdisplay -v
--- Volume group ---
VG Name mint-vg ← Volume Group Name
System ID 
Format lvm2
Metadata Areas 1
...
--- Logical volume ---
LV Path /dev/mint-vg/root ← Logischen Volume Name
LV Name root
VG Name mint-vg
... 
--- Logical volume ---
LV Path /dev/mint-vg/swap_1
LV Name swap_1
VG Name mint-vg
... 
--- Physical volumes ---
PV Name /dev/mapper/sda5_crypt ← verschlüsseltes physikalisches Volume
PV UUID 9P000u-9Fem-6tgn-sUIW-rHGQ-sxp7-X0lzQT
PV Status allocatable
Total PE / Free PE 3655 / 8
  • Physische Partition des verschlüsselten Physikalischen Volumes, hier /dev/sda5
    Anmerkung: Alle anderen Partitionen werden als nicht verschlüsselt mitgesichert, hier /dev/sda1
  • UUID der verschlüsselten Partition
# cat /etc/crypttab 
sda5_crypt UUID=2fa61eb4-72ca-4994-b80d-3faa387be23a none luks,discard
clone@clonezilla-test:~$ blkid
/dev/mapper/sda5_crypt: UUID="9P000u-9Fem-6tgn-sUIW-rHGQ-sxp7-X0lzQT" TYPE="LVM2_member"
/dev/mapper/mint--vg-root: UUID="fc6c2da6-3e00-4dca-b789-ba9e58c80d33" TYPE="ext4"
/dev/sda1: UUID="31246748-2195-4e6f-9115-1c64d82edef6" TYPE="ext4" PARTUUID="66630064-01"
/dev/sda5: UUID="2fa61eb4-72ca-4994-b80d-3faa387be23a" TYPE="crypto_LUKS" PARTUUID="66630064-05"
/dev/sdb1: UUID="a5ee5be1-7b9e-4c21-adb4-13e62a7c73f1" TYPE="ext4" PARTUUID="b2d8bc2f-01"
/dev/mapper/mint--vg-swap_1: UUID="ba9fa8cf-7029-4b59-91d3-3dfc58cc212c" TYPE="swap"
  • Verschlüsselungspasswort
    You should know 🙂

Backup

Rechner mit einer Live CD/USB booten. Hierzu eignet sich SystemRescueCD hervorragend. Nachdem booten muss eine extra Festplatte gemountet werden. Auf ihr werden alle Backup Dateien gespeichert.

# mount /dev/sdb1 /mnt

Partitionstabelle

Dann wird die Partitionstabelle der gesamten Festplatte gesichert

# sfdisk -d /dev/sda > sda.sfdisk

LUKS Header sichern

sda5 ist hier die Partition die verschlüsselt wurde.

# cryptsetup luksHeaderBackup /dev/sda5 --header-backup-file luks-header

Backup LVM Konfiguration

Zum Backup der LVM Konfiguration muss erst das Verschlüsselte Volume aufgemacht werden. Hierzu wird das Passwort der Partition benötigt. sda5 ist wieder die verschlüsselte Partition und sda5_crypt ist der Name des späteren Devices. Hier muss der gleiche Name gewählt werden, wie im normalen Rechnerbetrieb. mint-vg ist der Name der zu sichernden Volume Group.

# cryptsetup luksOpen /dev/sda5 sda5_crypt
# vgcfgbackup -f vgcfgbackup mint-vg

Backup aller verschlüsselten und unverschlüsselten Volumes

sda1 ist die unverschlüsselte Partition die unter /boot ein gehangen ist. vg-root ist die root Partition. Sollte es weitere Logische Volumes oder unverschlüsselte Partitionen geben, müssen die hier ebenfalls gesichert werden.

# partclone.ext4 -c -s /dev/sda1 -o sda1.img
# partclone.ext4 -c -s /dev/mapper/mint--vg-root -o vgroot.img

Backup fertig

Restore

Zum Restore auf eine neue leere Platte zuerst wieder eine Live CD booten. Und als erstes die Backup Platte gemountet.

# mount /dev/sdb1 /mnt

Partitionstabelle

Anschließend wird die Partitionstabelle auf die neue Festplatte geschrieben.

# sfdisk /dev/sda < sda.sfdisk

LUKS Header wiederherstellen

sda5 ist die verschlüsselte Partition und muss die gleiche sein wie beim Backup.

# cryptsetup luksHeaderRestore /dev/sda5 --batch-mode --header-backup-file luks-header

Restore LVM Konfiguration

Auch zum Restore der LVM Konfiguration muss erst die verschlüsselte Partition aufgemacht werden. Hierzu wird das Passwort der Partition benötigt. Auch hier ist  sda5 die verschlüsselte Partition und sda5_crypt ist der Name des späteren Devices. Hier muss der gleiche Name gewählt werden, wie im normalen Rechnerbetrieb. 2fa61eb4-72ca-4994-b80d-3faa387be23a muss auf die passende UUID geändert werden. mint-vg ist der Name der zu sichernden Volume Group.

# cryptsetup luksOpen /dev/sda5 sda5_crypt
# pvcreate --restorefile vgcfgbackup --uuid 2fa61eb4-72ca-4994-b80d-3faa387be23a -ff /dev/mapper/sda5_crypt
# vgcfgrestore -f vgcfgbackup mint-vg
# vgchange -ay

Wiederherstellen aller verschlüsselten und unverschlüsselten Volumes

sda1 ist die unverschlüsselte Partition die unter /boot ein gehangen ist. vg-root ist die root Partition. Sollte es weitere Logische Volumes oder unverschlüsselte Partitionen geben, müssen die hier ebenfalls wiederhergestellt werden.

# partclone.restore -C -o /dev/sda1 -s sda1.img
# partclone.restore -C -o /dev/mapper/mint--vg-root -s vgroot.img

Bootloader wieder herstellen

Zur Vorbereitung der grub Installation muss eine chroot Umgebung aufgebaut werden, in der die grub Installation durchgeführt werden kann.

# mkdir mnt
# mount -t ext4 /dev/mapper/mint--vg-root mnt
# mount -t ext4 /dev/sda1 mnt/boot
# mount --bind /dev mnt/dev
# mount --bind /dev/pts mnt/dev/pts
# mount --bind /proc mnt/proc
# mount --bind /sys mnt/sys

# chroot mnt /bin/bash

In der chroot Umgebung die folgenden Befehle ausführen, um den Bootloader wieder herzustellen. Eventuelle Fehler können ignoriert werden.

# export PATH="/bin:/sbin:/usr/bin:/usr/sbin"

# grub-install /dev/sda
# grub-install --recheck /dev/sda
# update-grub
# exit

Außerhalb der chroot Umgebung wird noch alles ungemontet und offene Volumes geschlossen

# umount mnt/sys
# umount mnt/proc
# umount mnt/dev/pts
# umount mnt/dev
# umount mnt/boot
# umount /dev/mapper/mint--vg-root
# vgchange -an mint-vg
# cryptsetup luksClose sda5_crypt

# sync
# sync

Nun noch einmal booten und das alte System ist auf der neuen (oder alten) Platte wiederhergestellt.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s