Durchführen genauer Snapshots und inkrementeller Sicherungen auf einem Remote-Server

7

Ich habe einige Ubuntu-Server (und möglicherweise RHEL-Server), die ich auf einem zentralen Sicherungsserver (über rsh / SSH) sichern möchte. Ich möchte sowohl Snapshot- als auch inkrementelle Sicherungen durchführen. Das Ziel ist, dass ich bei einem plötzlichen Ausfall eines der gesicherten Server ein Bootstrap-Image installieren, aus dem Backup wiederherstellen und im Idealfall sofort danach betriebsbereit sein könnte.

Diese Server haben eindeutige Benutzer und Gruppen sowie einige unterschiedliche Gids und Uids für denselben Namen. Ich habe über rsync nachgedacht (lokale Sicherungen funktionieren einwandfrei und ich habe eine fein abgestimmte Steuerung, damit ich auch xattrs und ACLs sichern kann), aber dann habe ich festgestellt, dass rsync auf einem Remote-Server diese Nuancen wahrscheinlich nicht wie erwartet beibehält.

Was ist ein besserer Weg, um dies zu erreichen? Gibt es ein Paket, das üblicherweise für diesen Zweck verwendet wird?

MartyMacGyver
quelle
1
Klingt so, als würden Sie Bacula oder ähnliches beschreiben.
Derobert
Möglicherweise ... werde ich das untersuchen.
MartyMacGyver
Anstatt Ihre Antwort als Bearbeitung der Frage zu veröffentlichen, klicken Sie auf "Beantworten Sie Ihre eigene Frage" und veröffentlichen Sie sie als Antwort ... oder, noch besser, bearbeiten Sie sie in Stephane Chazelas 'Antwort.
Derobert
Ich habe stattdessen meine eigene Antwort hinzugefügt. rsync - mit dem ich angefangen habe und für das ich die meisten Optionen kannte - ist nicht die einzige Lösung, wird es aber vorerst tun.
MartyMacGyver

Antworten:

4

Ja rsyncbietet Optionen zum Beibehalten von ACLs, erweiterten Attributen, ext2-Attributen, festen Links, numerischen Benutzer-IDs, Spärlichkeit ...

Früher hatte ich ein System, das Dateisysteme mit einem Dateisystem auf einen Sicherungsserver synchronisierte btrfs(um Snapshots auf dem Sicherungsserver zu erstellen), und aufgrund von Stabilitätsproblemen auf zfs-on-linux umgestellt (das POSIX-ACLs leider noch nicht unterstützt) , aber es gibt Workarounds).

rsyncOptionen, an denen Sie interessiert sein könnten: --archive --one-file-system --xattrs --hard-links --delete --numeric-ids --sparse --aclsund möglicherweise solche für die direkte Synchronisierung.

Eine Sache, die rsync nicht tut, ist das Erkennen von Umbenennungen (obwohl es einen Patch dafür gibt, aber ich bin nicht sicher, wie sehr es vertrauenswürdig ist, und es erkennt nur das Umbenennen von Dateien).

zfsmuss zfs sendnur die seit einem bestimmten Snapshot vorgenommenen Änderungen senden (mit an einen anderen zfs zpool zfs receive). Wenn ich das richtig verstehe, wurde diese Funktion kürzlich ebenfalls hinzugefügt btrfs. Wenn Sie also einen btrfsFS auf einem anderen btrfsFS auf dem neuesten Kernel sichern, könnte dies eine Option sein.

Stéphane Chazelas
quelle
Ich habe einige der rsync-Optionen in der ursprünglichen Frage selbst angegeben, nachdem ich sie bei lokalen Sicherungen (auf einer anderen Partition / Festplatte auf demselben System) verwendet hatte. Aber bleiben UIDs, GIDs, ACLs usw. beim Sichern über SSH auf einer anderen Box erhalten, die möglicherweise nicht die Gruppen oder Benutzer hat, die der ursprüngliche Computer hat? Architektonisch scheint die Antwort "Nein" zu sein, also fragte ich, was ist eine bessere Option (eine, die nicht nur mit Ubuntu und mit ext3, ext4, xfs usw. funktioniert)?
MartyMacGyver
Ein Dateisystem kümmert sich nicht um die Benutzerdatenbank des Systems. Alles, was es interessiert, sind Benutzer-IDs. Mit --numeric-id gibt es also kein Problem beim Senden von Daten an einen anderen Computer. Es spielt keine Rolle, ob Benutzer mit diesen Benutzeroberflächen vorhanden sind oder nicht. Gleiches gilt für ACLs (die tatsächlich als erweiterte Attribute gespeichert sind). Die einzigen Probleme, die Sie möglicherweise finden, sind, wenn der Ziel-FS nicht den gleichen Funktionsumfang wie der Quell-FS unterstützt (wie POSIX-ACLs für ZFS)
Stéphane Chazelas,
Sie können die --fake-superOption auch auf dem Remote- Rsync ausprobieren . Beispiel aus der Manpage:rsync -av --rsync-path="rsync --fake-super" /src/ host:/dest/
derobert
Ich werde diese Option untersuchen und einige Tests durchführen, um festzustellen, was auf dem Ziel (und während einer Wiederherstellung) passiert.
MartyMacGyver
4

Schauen Sie sich rsnapshot an , einen Perl-Wrapper um das rsyncBefehlszeilenprogramm. Rsnapshot fügt rsync eine zusätzliche Konfigurationsebene hinzu, die inkrementelle Sicherungen vereinfacht. (Ältere Versionen einer Datei sind unverändert fest mit der aktuellen Version verknüpft. Jede inkrementelle Version Ihres gesicherten Dateisystems sieht also wie eine vollständige Kopie aus.)

Eine andere ähnliche Möglichkeit ist die Duplizität , auf der stattdessen basiert librsync. Ich verstehe, dass dies eine ausgefeiltere Benutzeroberfläche hat, aber ich habe sie nicht verwendet. Oder rdiff-backup , das meiner Meinung nach vom selben Entwickler stammt, oder jedenfalls, das einmal wahr war.

Es gibt natürlich viele, viele Backup-Systeme. Hier ist eine Liste der unter FreeBSD verfügbaren, von denen die meisten auch unter Linux verfügbar sein werden. Aber ich denke, die drei, die ich oben erwähnt habe, sind natürlich, wenn Sie daran gewöhnt sind rsync. (Ein wunderbares Werkzeug.)

zweifelhaft
quelle
Behalten diese die richtigen Metadaten, GIDs, UIDs usw. bei, selbst wenn der Zielhost diese Gruppen und Benutzer nicht kennt?
MartyMacGyver
Ich weiß, dass rsync mit den richtigen Befehlszeilenargumenten funktioniert und dass rsnapshot so konfiguriert werden kann, dass alle benutzerdefinierten Argumente an rsync übergeben werden, die Sie möchten. (Wenn es nicht bereits rsync -a --deletesofort korrekt konfiguriert ist.) Ich würde die Argumente verwenden (diese werden sicherlich standardmäßig vorhanden sein) und vielleicht --numeric-ids, vielleicht --hard-links, vielleicht --xattrsoder --aclswenn Sie diese beibehalten müssen. Sehr zu empfehlen, sich damit vertraut zu machen man rsync.
Dubiousjim
Ich hatte diese und mehr bereits, aber ich wusste nicht, ob dies für diesen Zweck gut oder schlecht funktionieren würde. Es stellte sich heraus, dass sie in Ordnung waren (obwohl es schön wäre, dies vollständig mit solchen Optionen archivieren zu können, anstatt es als flaches Dateisystem mit numerischen IDs und dergleichen zu betreiben ... leider ist tar AFAIK nicht in der Lage, dies zu tun die Aufgabe).
MartyMacGyver
Ich bin mir nicht sicher, was du hier mit "flach" meinst. Iirc rdiff-backup macht das Backup nicht als Live-Dateisystem verfügbar, und wahrscheinlich auch nicht, da es einen ähnlichen zugrunde liegenden Mechanismus verwendet.
Dubiousjim
Flach wie in meinem Backup sind eine Reihe von Dateien und Ordnern auf der Festplatte im Vergleich zu Blobs, die die Daten enthalten, ähnlich wie bei einem Tarball.
MartyMacGyver
3

Edit: Danke an alle! Ich kenne jetzt einige andere Pakete, um die Arbeit zu erledigen, und ich weiß viel mehr über rsync-Interna. Wenn Sie sich mit der Option --numeric_ids auf einen anderen Computer synchronisieren, wird für diejenigen, die sich möglicherweise auch fragen, nicht versucht, die UIDs / GIDs zuzuordnen oder zu erstellen, sondern sie werden einfach so übergeben, wie sie sind. Der Besitz der Elemente im Sicherungsverzeichnis mag seltsam aussehen, entspricht jedoch bei der Wiederherstellung 1: 1 (vorausgesetzt, ein Teil Ihrer Wiederherstellung umfasst die ursprünglichen Zuordnungsdateien, wenn Sie auf einem neuen Computer wiederherstellen).

Hier ist die vollständige Liste der Optionen, die ich jetzt für eine vollständige Systemsicherung verwende (als Root über sudo). Beachten Sie, dass {{my_exclusions}} eine Übung für den Leser ist (ich habe immer noch Probleme, das so zu machen, wie es sollte). Beachten Sie auch die Verwendung von --link-dest ... Wenn dieses Verzeichnis auf dem Ziel vorhanden ist, werden überall dort feste Links zu Dateien hergestellt, die bereits in der vorherigen Sicherung vorhanden sind und in der aktuellen unverändert bleiben.

rsync \
  --recursive \
  --links \
  --hard-links \
  --perms \
  --acls \
  --xattrs \
  --owner \
  --group \
  --devices \
  --specials \
  --times \
  --one-file-system \
  --partial \
  --numeric-ids \
  --compress \
  --delete-during \
  --stats \
  --human-readable \
  --progress \
  --verbose \
  --super \
  --log-file=/tmp/my.log \
  --link-dest=/backup/latest_backup \
  --exclude={{my_exclusions}} \
  --link-dest=/backup/latest \
  / \
  {{remote_hostname_or_ip}}:/backup/new_backup
MartyMacGyver
quelle