Vor kurzem hat mich mein kleiner Computer „im Stich“ gelassen. Ganz nach dem Motto kein Bild kein Ton, … Da wohl etwas mehr als nur der Arbeitsspeicher defekt ist, habe ich die debian Installation auf einem neuem System wiederhergestellt. Glücklicherweise hatte ich eine Woche zuvor ein Backup mittels restic erstellt. (Wie das geht zeuge ich euch in diesem Blog Beitrag)
Hier werden zwar „nur“ Dateien und Ordner gesichert, wie man daraus wieder ein Lauffähiges System herstellt, zeige ich euch hier. Erst einmal benötigt man einen Ziel Computer, auf dem das Backup wiederhergestellt wird. Das kann herkömmliches „Blech“, aber auch eine virtuelle Maschine sein.
„Rettungssystem“ booten
Zur Wiederherstellung und Rettung habe ich debian live gestartet. Ein ISO Image kann hier (https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/) heruntergeladen werden. Dieses wird wahlweise auf eine DVD gebrannt oder mittels cp auf einen USB-Stick kopiert.
cp ~/Downloads/debian-9.4.0-amd64-DVD-1.iso /dev/sdb
Anschließend starten wir unser System davon.
Partitionierung
Da auf dem neuem System die Festplatte noch leer ist, muss diese zuerst Partitioniert werden. Dies kann ebenfalls in der live Umgebung mittels GParted erledigt werden, oder mit der gparted live CD.
In diesem Fall habe ich 3 Partitionen erstellt. Die erste /dev/sda1 ist die Boot (/boot) Partition mit 2GB und ext4 als Dateisystem. Die zweite Partition (/dev/sda2) wird unter „/“ eingehängt und ist btrfs formatiert. Die dritte Partition ist ebenfalls btrfs formatiert und wird unter „/home“ eingehängt.
root@srv-nuc:~# fdisk -l Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 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: dos Disk identifier: 0x807ceb57 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 4196351 4194304 2G 83 Linux /dev/sda2 4196352 130025471 125829120 60G 83 Linux /dev/sda3 130025472 167772159 37746688 18G 83 Linux
Restore
Um nun die Dateien wiederherstellen zu können, hängen wir die Partitionen in neuen Ordner unter /mnt/ ein.
root@live:~# cd /mnt/ root@live:/mnt# mkdir restic root@live:/mnt# mkdir boot root@live:/mnt# mkdir home root@live:/mnt# mkdir root root@live:/mnt# mount /dev/sda1 /mnt/boot/ root@live:/mnt# mount /dev/sda2 /mnt/root/ root@live:/mnt# mount /dev/sda3 /mnt/home/
Dann erfolgt der eigentliche Restore. Das Backup Repository liegt auf einem NFS-Export, welches wir unter /mnt/restic mounten. Um nicht jedes mal das Repository Passwort eingeben zu müssen, exportieren wir dieses vorher als Variable.
root@live:/mnt# mount.nfs 192.168.123.225:/mnt/wdred/backup/restic /mnt/restic root@live:/mnt# export RESTIC_PASSWORD=strenggeheim root@live:/mnt# restic -r /mnt/restic restore latest --target '/mnt/' --path '/boot/' root@live:/mnt# restic -r /mnt/restic restore latest --target '/mnt/root/' --path '/' root@live:/mnt# restic -r /mnt/restic restore latest --target '/mnt/' --path '/home/'
Somit sind die eigentlichen Daten wiederhergestellt. Um das System bootfähig zu machen, müssen wir noch den Bootloader grub installieren / aktualisieren.
Bootloader
Wir werden jetzt die „alte“ Linux Umgebung mittels chroot simulieren, und kümmern uns um den Bootloader grub.
root@live:/mnt# umount /mnt/boot root@live:/mnt# umount /mnt/home root@live:/mnt# mkdir /mnt/root/proc root@live:/mnt# mkdir /mnt/root/sys root@live:/mnt# mkdir /mnt/root/dev root@live:/mnt# mount -t proc /proc /mnt/root/proc/ root@live:/mnt# mount -o bind /sys /mnt/root/sys/ root@live:/mnt# mount -o bind /dev /mnt/root/dev/ root@live:/mnt# chroot /mnt/root/ # Ab jetzt befinden wir uns in der chroot Umgebung root@chroot:/# mount /dev/sda1 /boot/ root@chroot:/# mount /dev/sda3 /home/ # Bootloader installieren root@chroot:/# grub-install /dev/sda # /boot/grub/grub.cfg aktualisieren, mit neuen UUIDs root@chroot:/# update-grub root@chroot:/# umount /boot /home root@chroot:/# exit # Wir haben die chroot Umgebung verlassen root@live:/mnt# umount /mnt/root/proc/ /mnt/root/sys/ /mnt/root/dev/
fstab
Zu Abschluss müssen die UUIDs in der /etc/fstab angepasst werden. Die neuen UUIDs erhalten wir mittels „blkid“
root@live:/mnt# vim /mnt/root/etc/fstab root@live:/mnt# umount /mnt/root/
Falls der Ruhezustand (hibernation) aktiviert ist, muss ggf. noch die UUID der SWAP Partition in „/etc/initramfs-tools/conf.d/resume“ eingetragen werden. Die Einstellung wird mit folgendem Befehl in das initramfs eingetragen. (innerhalb der chroot Umgebung oder nach dem ersten booten)
update-initramfs -u
Das war’s, jetzt können wir das Live System herunterfahren, und das frisch Wiederhergestellte System booten.