Tutorial: VServer sichern & wiederherstellen

Ich muss leider feststellen, dass sich die meisten Tutorials zur Sicherung eines Servers auf die Erstellung des TAR-GZ-Archives beschränken. Weniger Worte werden hingegen darüber verloren, wie man damit so ein System wiederherstellen kann… Ein bisschen Trial & Error hat mich nun dazu geführt, wie ich dies durchführen kann. Diesen Weg habe ich hier dokumentiert. Ich hoffe, dass jemandem das hilft. 🙂

Backups erstellen

Mein Backup-Skript liegt in /sbin/backup.sh und sieht so aus:

#!/bin/sh
apt-get clean;  
apt-get autoremove;  
apt-get autoclean;  
mkdir -p /backups; # Anlegen, falls es fehlt  
tar -zcvpf /backups/fullbackup-$(date +%Y-%m-%d).tar.gz --directory=/ \  
 --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=tmp \
 --exclude=lost+found --exclude=var/cache/apt --exclude=var/run \
 --exclude=backups --exclude=restore .

Dieses Skript räumt erst ein paar Cache-Dateien weg, legt einen /backups-Ordner an (falls er nicht schon existiert) und erzeugt ein gezipptes Vollbackup. Dabei sind folgende Ordner ausgenommen:

  • proc, sys, dev  sind Verzeichnisse des Systems und haben im Backup nichts zu suchen.
    Diese zurückzuspielen ist nicht sinnvoll.
  • Das tmp Verzeichnis enthält nur zwischengespeicherte Dateien.
  • lost+found ist intern für das Dateisystem
  • In /var/cache/apt liegen eventuell fette Cache-Dateien
  • /run *bzw. /var/run* bezieht sich auf das laufende System
  • /backups & /restore sind für die Backup/Restore-Skripte wichtige Verzeichnisse

Regelmäßige Backups per Cronjob

So ein Vollbackup möchte ich regelmäßig erstellen. In meinem Fall einmal pro Woche:

echo '* * * * 1 root /sbin/backup.sh' >> /etc/crontab
/etc/init.d/cron reload # Änderung bekannt machen

Backup wiederherstellen

Auf dem wiederherzustellenden System sollte das Paket rsync installiert sein/werden, da dieses für einen Abgleich des Systems mit dem Backup im Folgenden benötigt wird.

Herunterladen des Systembackups von Copy.com & Entpacken in /restore

wget --no-check-certificate -c -O /backup.tar.gz https://copy.com/dieUrl 
mkdir -p /restore 
tar xvfz /backup.tar.gz -C /restore

Natürlich kann das Backup auch von woanders herkopiert oder per SSH gezogen werden. Ich finde es für mich nur so am bequemsten, da ich für meine Maschinen verschiedene Snapshots auf meinem Online-Speicher liegen habe und so auch mal zum Testen ein Image auswechseln kann.

Abgleich über rsync

rsync -avz --delete \  
 --exclude '/backups' --exclude '/restore' \
 --exclude '/proc' --exclude '/sys' --exclude '/dev' --exclude '/run' \
 --exclude '/tmp' --exclude '/lost+found' --exclude='/var/run' \
 /restore/ /
  • Der Parameter –delete löscht alles, was nicht mit im Backup ist und somit zuviel installiert wurde. Aber auch genau deswegen muss hier vorsichtig damit umgegangen werden, was alles ausgenommen wird.
  • Der Versuch etwas an proc, sys, dev* *zu verändern würde wegen Schreibrechten scheitern oder die Systemstabilität beeinflussen. Beides wäre nicht gut. Diese Verzeichnisse werden beim nächsten Systemstart sowieso neu befüllt und korrigiert.
  • In /run bzw. /var/run liegen Inodes für die laufenden Prozesse. Werden diese gelöscht, lässt sich z.B. ein SSH-Dienst nicht mehr mit kontrollieren. Wenn dieser nicht neu gestartet werden kann, ist das ziemlich schlecht.
  • Aus einem ähnlichen Grund darf auch das tmp-Verzeichnis bei der Wiederherstellung nicht verändert werden. Aktuell laufende Dienste beziehen sich darauf.

Neustart von SSH zum Testen

An dieser Stelle teste ich, ob ich den Dienst SSH, den man ja immer hat, neustarten und mich mit einem User aus dem Backup einloggen kann:

/etc/init.d/ssh restart

Wenn das nicht klappt, hat man jetzt noch die Chance zu reagieren.

Durchstarten des Systems

Da das Backup Dienste enthält, die jetzt noch nicht gestartet sind und auch die Verzeichnisse *proc, sys, dev, run *und so weiter nicht aktuell sind, ist ein Reboot des Systems ratsam.

init 6

System durchtesten

Um sicherzugehen, dass hier jetzt alles passt, guck ich mir mit „ps -e“ die Prozessliste an und teste kurz, ob der Apache meine Webseiten ausliefert und mein WebMailer E-Mails empfängt. Wenn dies der Fall ist, wurde das System genauso wiederhergestellt, wie es gewesen ist. 🙂

Restore löschen

Als letzten Schritt lösche ich das /restore-Verzeichnis wieder, weil ich dieses ja nun nicht mehr benötige.

rm -rf /restore/

Alternative Rsync

Wer das etwas professioneller und regelmäßiger machen möchte, kann hier auch per Rsync den Server remote sichern. Das Sichern über TAR ist nur halt einfacher, da kein zweiter Server involviert sein muss.