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.