Zur Hauptseite
Hat dir diese Seite weitergeholfen?
Durchschnittliche Bewertung (Rootserver):
2.93/3 (450 Stimmen)

Datensicherung mit LVM und FTP

...sicher ist sicher

Hinweis

Inzwischen habe ich die auf dieser Seite angebotenen Skripte überarbeitet und in ein neues Backup-Programm namens Tartarus integriert. Die hier veröffentlichten Programme werden nicht mehr gepflegt, ich empfehle daher, auf das neue Projekt umzusteigen

FTP-Backup mit LVM

Viele Provider bieten für Backupzwecke Speicherplatz auf einem FTP-Server. Nutzt man diesen Speicherplatz für eine Datensicherung, müssen einige Punkte bedacht werden:

  1. Das Backup soll nicht erst auf dem Server erzeugt und dann hochgeladen werden, da hierzu der SPeicherplatz unter Umständen nicht ausreicht, stattdessen soll es direkt auf den FTP-Server geschrieben werden.
  2. Dateirechte und Sonderdateien (z.B. Links) sollen erhalten bleiben, daher können die Dteien nicht einzeln in ein Verzeichnis auf dem FTP-Server kopiert werden.
  3. Das Backup soll "on-the-fly" erstellt werden (Der Server soll weiterlaufen), allerdings soll der Zustand der Dateisysteme dabei eingefroren werden.

Der dritte Punkt ist dabei gerade auf Systemen wichtig, auf denen viele Schreibzugriffe erfolgen. Stellen wir uns folgendes Szenario vor: Die zu sichernden Daten enthalten zwei Verzeichnisse A, B und C. Nachdem das Backupprogramm A in das Archiv gepackt hat und sich dem Verzeichnis B widmet, verschiebt ein Benutzer eine Datei von C nach A, mit dem Ergebnis, dass die Datei nun gar nicht im Backuparchiv auftaucht.

Dateisystem "on the rocks"

Die im LVM enthaltene Snapshot-Funktionalität vermeidet dieses Problem, indem es ein eingefrorenes Abbild ("Snapshot") des Volumes erzeugt: Während auf das ursprüngliche Dateisystem weiter zugegriffen werden kann, bleibt die Welt auf dem neuen Snapshot-Volume einfach stehen: Um die wachsenden Unterschiede zu speichern, wird eine frei wählbare Menge Speicher benötigt (daher auch der "ungenutzte" Speicher innerhalb der Volume Group). Werden mehr Daten auf dem ursprungsvolume verändert, wird das Abbild ungültig.

lvcreate --size 100m --snapshot --name home_snap /dev/mainvol/home

Dieser Befehl erstellt ein Abbild des logischen Volumes "home" der Volumegroup "mainvol", und reserviert 100 MB für Änderungen an den Originaldaten. Danach kann das neue Volume /dev/mainvol/home_snap ganz normal mounte. Allerdings ist diese Vorgehensweise nicht perfekt: Die Snapshot-Funktionalität ist leider nicht auf Dateisystem-, sondern auf Blockdevice-Ebene implementiert. Das bedeutet, dass der Snapshot einem Zustand entspricht, den man bei einem rüden Abschalten des Servers erhält. In der Tat kannd as Dateisystem des Abbilds inkonsistent sein, was jedoch bei Dateisystemen mit Journal (z.B. ext3) in der Regel (!) kein Problem darstellen sollte. Misstrauische sollten aber dennoch das Dateisystem mit einem "fsck"-Aufruf überprüfen.

Das Skript lvmbackup.sh erledigt alle notwendigen Schritte, um ein Backup von einem LVM-gestützten Dateisystem zu erstellen. Es erstellt das Abbild, mountet es unterhalb von /snap, startet das gewünschte Backupprogramm und entfernt danach den Snapshot wieder.

Damit das Skript fehlerfrei arbeitet, muss das Verzeichnis /snap angelegt werden, ebenso muss das zu verwendende Backup-Skript eingetragen werden. Aufgerufen wird das Programm mit zwei Parametern, einmal dem Volume-Pfad im Format /dev/volumegroup/volumename, und einmal mit dem Mountpoint, unter dem das Dateisystem normalerwese eingeklinkt wird.

Datenstrom

Damit in der Sicherungskopie alle Dateirechte erhalten bleiben, bietet sich das klassische "tar" an. Der Befehl kann die erzeugten Archivdaten auch auf der Standardausgabe ausgeben, so dass er nicht auf der Server-Festplatte zwischengespeichert werden muss. Den direkten Transfer auf den Alturo-FTP-Server implementiert das Programm curl; Auf diese Weise ist es mit dem Skript backup-upload.sh möglich, ein Verzeichnis zu archivieren, und auf dem FTP-Server abzulegen.

Im Skript selbst werden lediglich die Daten des Backupservers eingetragen; Beim Aufruf erwartet das Programm zwei Parameter: Zum einen den zu sichernden Pfad, zum anderen einen Namen des Backups (also z.B. "Website", "Home", "Config" o.ä.). Das Skript erstellt dann ein bzip2-komprimiertes Backup des Pfades auf dem FTP-Server unter dem gewünschten Namen, erweitert um das aktuelle Datum.

Kombiniert mit dem obigen Skript lässt sich so recht einfach ein regelmäßiges Backup erstellen.

Da viele FTP-Implementierungen keine Transfers von Dateien über 2 GB erlauben, reiht sich das Skript pipesplit.pl in die Reihe ein: Es übernimmt die Archivdaten von Tar, und teilt sie on-the-fly in handliche Portitionen auf, die es schließlich dem Upload-Script übergibt.

Und zurück?

Mit curl oder wget lassen sich die Dateien natürlich auch wieder herunterladen und direkt ohne Zwischenstation durch "tar" pipen: Dadurch sollte eine Wiederherstellung auch vom Rettungssystem aus recht einfach sein, indem man wget einfach nacheinander alle Teile des Archivs laden lässt:

wget -O - --ftp-user=$FTPUSER --ftp-password=$FTPPASS ftp://$FTPSRV/name-chunk0000.tar.bz2 ftp://$FTPSRV/test-chunk0001.tar.bz2 ... | tar tvj