Verschlüsseltes Strato Backup
Der Webhoster Strato bietet einen FTP Server an, den man zu Backupzwecken nutzen kann. Dort bekommt man ein Kontingent reserviert, welches exakt die Größe der lokalen Platte (bzw. des lokalen Raids) hat. Zugriff gibt es “nur” per FTP.
Es gibt nun verschiedene Methoden, wie man ein Backup der lokalen Platte zieht und auf dem FTP Server ablegt. Meine Methode1) nutzt dabei das Tool dump & restore und verschlüsselt mit openssl die Daten vor der Übertragung per ncftp.
Auf die im Folgenden beschriebene Art und Weise habe ich den Inhalt meines 64bit Debian Linux Servers in zwei Images gespeichert und dann davon einen komplett neuen Server aufgesetzt (beim alten war die Hardware defekt). Dank guter Anbindung an den Backupserver und ordentlich Dampf unter der Opteron Motorhaube geht das sehr schnell - obwohl die Daten zusätzlich noch verschlüsselt werden!
Booten des Rescue Modus
Über das Strato Webinterface stellt man ein, dass beim nächsten Reboot das Rescue System ausgewählt wird; in meinem Fall ist es die 64bit Version des Rescue Systems. Nun muss man noch ein paar Minuten warten, bevor man den reboot inititert, weil derweil einige Strato Skripte ablaufen müssen.
Das Webinterface nennt einem ein root Passwort, mit dem man sich in das Rescue System als root per SSH anmelden kann. Es ist natürlich ein anderes, wie das vom Hauptsystem.
Modifizieren des Rescue Systems
Im Rescue System eingeloggt, muss man als erstes das Debian Package von dump einspielen, weil das unverständlicherweise fehlt. Aber das geht zum Glück recht einfach und schnell:
# wget http://ftp.de.debian.org/debian/pool/main/d/dump/dump_0.4b41-3_amd64.deb # dpkg -i dump_0.4b41-3_amd64.deb
(Bei einem 32Bit System muss man das entsprechend andere Paket nehmen
)
Backup Skript
Jetzt braucht man sich nur noch ein Skript schreiben, welches das Wegsichern der beiden System-Partitionen übernimmt. Wichtig ist, dass man sich vorher schon den Zugang zum Backupserver im Webinterface freigeschaltet hat und dass man die Zugangsdaten parat hält bzw. in das Skript einsetzt.
Falls man ein Software-Raid im Server hat, sollte sichergestellt sein, dass die beiden Devices auch existieren. Andernfalls muss man den mdadm bemühen.
Das Skript sieht dann so aus:
#!/bin/sh # # Legt einen verschluesselten Dump auf dem FTP Server an # SCHLUESSEL="Meine Schnuersenkel sind beide bunt." BENUTZER="b323989" KENNWORT="palimpalim" echo "=== Sichere /dev/md0" dump -0 -a -f - /dev/md0 | \ openssl aes-256-cbc -pass pass:"$SCHLUESSEL" -salt | \ ncftpput -u $BENUTZER -p $KENNWORT -c backup.serverkompetenz.de /dump_md0.bin echo "=== Sichere /dev/md1" dump -0 -a -f - /dev/md1 | \ openssl aes-256-cbc -pass pass:"$SCHLUESSEL" -salt | \ ncftpput -u $BENUTZER -p $KENNWORT -c backup.serverkompetenz.de /dump_md1.bin
Das Wegsichern des Systems geht schnell vonstatten: so habe ich bei mir knapp 5MB/Sekunde gemessen (das sind ca. 15GB/Stunde). Vermutlich ist bloss die Netzwerkverbindung der Flaschenhals.
Restore Skript
Sollte man irgendwann mal den Restore Vorgang bemühen müssen, dann muss man das System wieder über das Strato Webinterface herunterfahren und im passenden Rescue-Modus neu starten lassen.
In meinem Fall wurde zwischenzeitlich die Hardware getauscht und ich hatte einen frisch installierten Debian Linux Server. Diesen lies ich zunächst das Software-Raid fertig initialisieren, was ca. eine Stunde dauerte (zwischendurch den Stand der Dinge mit # cat /prco/mdstat abfragen), bevor ich in den Rescue-Modus rebootete.
Dort heisst es dann erstmal wieder das fehlende dump-Paket zu installieren und die beiden Partitionen neu zu formatieren. Dieser Schritt ist ganz wichtig!
# mkfs.ext2 /dev/md0 # mkfs.ext3 /dev/md1
Und zuletzt das Skript, welches die frisch formatierten Partitionen unter /mnt/root und /mnt/boot einhängt, die verschlüsselten dump Images von FTP herunterläd, dekodiert und auf die Platte schreibt. Auch dies ging hier bei mir mit ca. 5MB/Sekunde über die Bühne.
#!/bin/sh # # Restored ein verrschluesseltes Backup # SCHLUESSEL="Meine Schnuersenkel sind beide bunt." BENUTZER="b323989" KENNWORT="palimpalim" mkdir -p /mnt/boot mount /dev/md0 /mnt/boot mkdir -p /mnt/root mount /dev/md1 /mnt/root echo "=== Restore von /mnt/boot (aka /dev/md0)" cd /mnt/boot/ ncftpget -u $BENUTZER -p $KENNWORT -c backup.serverkompetenz.de /dump_md0.bin | \ openssl aes-256-cbc -pass pass:"$SCHLUESSEL" -d | \ restore -rv -f - echo "=== Restore von /mnt/root (aka /dev/md1)" cd /mnt/root/ ncftpget -u $BENUTZER -p $KENNWORT -c backup.serverkompetenz.de /dump_md1.bin | \ openssl aes-256-cbc -pass pass:"$SCHLUESSEL" -d | \ restore -rv -f -