Datensicherung zwischen Servern
Dieser Leitfaden erklärt, wie Sie Daten zwischen Linux-Servern mit rsync kopieren und sichern sowie Festplatten mit dd auf niedriger Ebene klonen können.
Bevor Sie beginnen
Die in diesem Leitfaden verwendeten Befehle werden auf dem Quellserver ausgeführt – also auf dem Server, von dem Sie die Daten kopieren. Der Zielserver muss über SSH erreichbar sein, und der im Befehl angegebene Benutzer muss Leserechte auf dem Quellpfad und Schreibrechte auf dem Zielpfad besitzen.
Um den SSH-Zugriff auf den Zielserver vor dem Start einer Sicherung zu üaberprüfen:
ssh user@destination_host
Ersetzen Sie user durch den Benutzernamen auf dem entfernten Server und destination_host durch die IP-Adresse oder den Hostnamen des Zielservers.
Für automatisierte oder zeitgesteuerte Backups sollten Sie die SSH-Authentifizierung über Schlüssel anstelle von Passwörtern konfigurieren.
Ein Verzeichnis auf einen Remote-Server kopieren
Beachten Sie, dass der abschließende Schrägstrich im Quellpfad beeinflusst, wie rsync arbeitet: /source/ kopiert den Inhalt des Verzeichnisses, während /source das Verzeichnis selbst kopiert.
Verwenden Sie vor Befehlen mit --delete immer --dry-run, um versehentlichen Datenverlust zu vermeiden. Um eine Vorschau der zu übertragenden Daten anzuzeigen, ohne Änderungen vorzunehmen:
rsync -a --delete --dry-run -e ssh /path/to/source/ user@destination_host:/path/to/backup/
Nachdem Sie die Ausgabe überprüft haben, führen Sie denselben Befehl ohne --dry-run aus. Fügen Sie -P hinzu, damit eine unterbrochene Übertragung fortgesetzt werden kann und der Fortschritt angezeigt wird:
rsync -a --delete -e ssh -P /path/to/source/ user@destination_host:/path/to/backup/
Die Option -a bewahrt Berechtigungen, Zeitstempel und symbolische Links. Die Option --delete sorgt dafür, dass das Ziel eine exakte Spiegelung der Quelle ist, indem Dateien entfernt werden, die auf der Quelle nicht vorhanden sind. Fügen Sie -v hinzu, um eine detaillierte Ausgabe anzuzeigen.
Die Option --delete entfernt Dateien auf dem Ziel, die auf der Quelle nicht vorhanden sind. Verwenden Sie diese Option nicht, wenn das Ziel Dateien enthält, die unabhängig von der Quelle erhalten bleiben sollen.
Die meisten Systemdateien kopieren
Um den Großteil des Dateisystems zu kopieren und dabei virtuelle sowie temporäre Verzeichnisse auszuschließen:
rsync -aAXv --delete --one-file-system --numeric-ids \ --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found,/swapfi le} \ / user@destination_host:/path/to/backup/
Die hier verwendeten Optionen: -a bewahrt Berechtigungen, Zeitstempel, symbolische Links und führt den rekursiven Kopiervorgang durch; -A bewahrt ACLs; -X bewahrt erweiterte Attribute; -v zeigt eine detaillierte Ausgabe. Die Option -H für Hardlinks wird absichtlich weggelassen: System-Hardlinks müssen in einem Remote-Backup nicht repliziert werden, und ihre Beibehaltung erhöht Übertragungszeit und Komplexität. Die Option --one-file-system verhindert, dass rsync in andere eingehängte Dateisysteme wechselt. Die Option --numeric-ids bewahrt UID- und GID-Werte, ohne sie auf Benutzernamen abzubilden. Dies ist wichtig, wenn Quell- und Zielserver unterschiedliche Benutzerkonfigurationen besitzen.
Bei den meisten ausgeschlossenen Pfaden wird ein abschließender Schrägstrich verwendet, um den Inhalt des Verzeichnisses auszuschließen, während das Verzeichnis selbst erhalten bleibt. /lost+found hat keinen abschließenden Schrägstrich, da das gesamte Verzeichnis ausgeschlossen werden soll und nicht nur dessen Inhalt. Dieselbe Regel gilt für den Quellpfad: /source/ kopiert den Inhalt des Verzeichnisses, während /source das Verzeichnis selbst kopiert.
Diese Methode erstellt kein bootfähiges Systemabbild und sollte nicht als vollständiger Ersatz für ein System-Backup verwendet werden. Für konsistente Backups laufender Systeme sollten Sie wichtige Dienste vor der Ausführung des Befehls anhalten oder Dateisystem-Snapshots wie LVM-Snapshots verwenden.
Vollständiger Verzeichnis-Klon mit rsync
Um einen vollständigen Klon einer Verzeichnisstruktur unter Beibehaltung von Hardlinks, ACLs und erweiterten Attributen zu erstellen:
rsync -aAHXv /source/dir/ user@destination_host:/destination/dir/
Die hier verwendeten Optionen: -a bewahrt Berechtigungen, Zeitstempel, symbolische Links und führt den rekursiven Kopiervorgang durch; -A bewahrt ACLs; -H bewahrt Hardlinks, was für einen exakten Verzeichnis-Klon wichtig ist; -X bewahrt erweiterte Attribute; -v zeigt eine detaillierte Ausgabe.
Eine Festplatte mit dd klonen
Um eine vollständige Festplatte auf eine andere Festplatte desselben Servers zu klonen:
dd if=/dev/sdX of=/dev/sdY bs=1M conv=noerror,sync status=progress
Ersetzen Sie sdX durch die Quellfestplatte und sdY durch die Zielfestplatte. Die Optionen conv=noerror,sync ermöglichen es, den Kopiervorgang trotz Lesefehlern fortzusetzen, indem beschädigte Blöcke mit Nullen aufgefüllt werden. Wenn die Datenintegrität besonders wichtig ist, lassen Sie diese Optionen weg, damit dd beim ersten Fehler stoppt, anstatt fehlerhafte Blöcke stillschweigend durch Nullen zu ersetzen.
Um eine Festplatte über SSH auf einen Remote-Server zu klonen:
dd if=/dev/sdX bs=1M status=progress | ssh user@destination_host 'dd of=/dev/sdY bs=1M'
Als Ziel kann anstelle eines Blockgeräts auch ein Dateipfad verwendet werden.
dd schreibt ohne Bestätigung direkt auf das Zielgerät oder in die Zieldatei. Überprüfen Sie die Quell- und Zielangaben sorgfältig, bevor Sie den Befehl ausführen. Bei laufenden Systemen sollten Sie nach Möglichkeit alle Partitionen der Quellfestplatte aushängen oder nur-lesbar einbinden. Für konsistente Backups eingehängter Dateisysteme sollten Sie LVM-Snapshots verwenden oder das System aus einer Rescue-Umgebung starten.
Backup überprüfen
Nach der Übertragung verbinden Sie sich mit dem Zielserver und überprüfen Sie die Größe des Backups sowie die grundlegende Struktur:
ssh user@destination_host du -sh /path/to/backup/ ls /path/to/backup/
Für eine gründliche Integritätsprüfung führen Sie rsync mit --checksum und --dry-run aus. Dabei werden Dateiinhalte statt Zeitstempeln verglichen und alle Unterschiede gemeldet:
rsync -av --checksum --dry-run /path/to/source/ user@destination_host:/path/to/backup/
Beachten Sie, dass dieser Vorgang bei großen Datenmengen deutlich länger dauern kann als ein normaler rsync-Lauf.