Linux Backup und Restore

Veröffentlicht von Ulf Joksch am 04.02.2021

Backup mit dump

Der Befehl dump erzeugt ein Backup eines Mountpoints in eine Datei aus der, auch selektiv, wieder zurückgesichert werden kann. Dump verlässt hierbei nicht das Filesystem. Aus diesem Grund muss jeder Mountpoint eines Systems separat gesichert werden, um das System komplett zu sichern.

dump -0uan -f Ausgabedatei mountpoint 
dump -0uan -f <outputfile> /
dump -0uan -f - | ssh <user>@<remote.server> dd of=<outpufile>

Beispiel für die lokale Sicherung eines Systems:

  • /dev/sda1 /boot
  • /dev/sda2 /
  • /dev/sda3 /var
  • /dev/sda4 swap
  • /dev/sdb1 /BACKUP
dump -0uan -f /BACKUP/2020-11-20-servername-root.dump / 
dump -0uan -f /BACKUP/2020-11-20-servername-boot.dump /boot
dump -0uan -f /BACKUP/2020-11-20-servername-var.dump /var

Beispiel für die remote Sicherung eines Systems:

  • /dev/sda1 /boot
  • /dev/sda2 /
  • /dev/sda3 /var
  • /dev/sda4 swap
dump -0uan -f - | ssh bak@baksrv.com dd of=/BACKUP/2020-11-20-srv1-root.dump / 
dump -0uan -f - | ssh bak@baksrv.com dd of=/BACKUP/2020-11-20-srv1-boot.dump /boot
dump -0uan -f - | ssh bak@baksrv.com dd of=/BACKUP/2020-11-20-srv1-var.dump /var

Auf dem Zielserver muss das Verzeichnis /Backup existieren. Weiterhin muss die Authentifizierung per public key auf dem Backup-Server funktionieren und der Host-Key des Backup-Servers in der knownhosts-Datei bekannt sein.

Restore eines Backups

Um ein komplettes System wieder herzustellen, muss dieses mit einem Rescue-System gebootet werden.

Dann erzeugen wir zwei Verzeichnisse:

# mkdir /mnt/quelle 
# mkdir /mnt/ziel

Das Verzeichnis, auf dem sich die Backup-Dateien befinden kann dann mit sshfs z.B. nach /mnt/quelle gemountet werden.

# sshfs -o allow_other,default_permissions bak@baksrv.com:/BAK /mnt/quelle

Liegt das Backup auf dem lokalen Server, so kann natürlich direkt gemounter werden:

# mount /dev/sdb1 /mnt/quelle

Die root-Partition des wiederherzustellenden Systems wird nach /mnt/ziel gemountet:

# mount /dev/sda2 /mnt/ziel

Jetzt wechseln wir in das Zielverzeichnis. Sollte dieses noch Dateien enthalten, so müssen diese samt und sonders gelöscht werden. Dann stellen wird die Daten aus dem Backup wieder her:

# cd /mnt/ziel # rm -rf * 
# restore -rf /mnt/quelle/2020-11-20-srv1-root.dump

Nun mounten wir, wenn vorhanden, die anderen Partitionen in ihre Mountpoints:

# mount /dev/sda1 /mnt/ziel/boot 
# mount /dev/sda3 /mnt/ziel/var

Auch diese Partitionen müssen ein leeres Dateisystem enthalten. Jetzt stellen wir den Inhalt dieser beiden Mountpoints ebenfalls wieder her:

# cd /mnt/ziel/boot # rm -rf * # 
restore -rf /mnt/quelle/2020-11-20-servername-boot.dump

Über den Befehl blkid ermitteln wir die UUID der Partitionen:

# blkid
/dev/sda1: UUID="e02a9c57-e0c7-415e-b43c-f1f6a5f75128" TYPE="ext4" PARTUUID="ce..."
/dev/sda2: UUID="ba6d3f34-f2d3-514e-c34b-1f6f5a7f1582" TYPE="ext4" PARTUUID="54..."
/dev/sda3: UUID="f0ac32e4-e531-ded4-a342-67e4d32125ab" TYPE="ext4" PARTUUID="e6..."
/dev/sda4: UUID="ba43de3e-fe54-55ea-c48e-772eba32ef43" TYPE="ext4" PARTUUID="a3..."

Die alten UUIDS in /etc/fstab und in /boot/grub2/grub2.cfg müssen gegen die neuen UUIDs ersetzt werden. Nun muss noch dafür gesorgt werden, dass das wiederhergestellt System auch ordnungsgemäß bootet. Dazu unternehmen wir folgende Schritte:

# cd / 
# mount --bind /dev/ /mnt/ziel/dev
# mount --bind /dev/pts /mnt/ziel/dev/pts
# mount --bind /proc /mnt/ziel/proc
# mount --bind /sys /mnt/ziel/sys
# chroot /mnt/ziel
# grub2-install /dev/sda

Jetzt müssen wir noch zur Sicherheit die Konfiguration der Netzwerkkarte überprüfen, z.B. ob dort eine MAC-Adresse hinterlegt ist, die evtl. jetzt nicht mehr stimmt.

Abschließend unternehmen wir noch die folgenden Schritte:

# exit # cd / 
# umount /mnt/ziel/dev/pts
# umount /mnt/ziel/dev
# umount /mnt/ziel/proc
# umount /mnt/ziel/sys
# umount /mnt/ziel/boot
# umount /mnt/ziel/var
# umount /mnt/ziel
# umount /mnt/quelle
# reboot