Rsync Logical Volumes / LVM
Wenn man regelmäßig Daten transferieren oder abgleichen möchte, dann ist Rsync in der Regel das beste Mittel der Wahl. Rsync überträgt nur geänderte Dateien, tut dies sehr effizient, komprimiert dabei noch und verschlüsselt die Daten während des Transfers. Rsync funktioniert für regelmäßige Dateitransfers also extrem gut.
Schön wäre es nun, wenn man so etwas wie Rsync auch für sehr große Dateien oder Logical Volumes eines LVM verwenden könnte. Ein typischer Anwendungsfall ist die Sicherung von virtuellen Maschinen, bei denen diese Images auch schon mal mehrere hundert GB groß sind.
An sich funktioniert das technisch zwar, allerdings kommt einem die Praxis in die Quere, denn...
- Überträgt man eine Datei, die in Verwendung ist, erhält man im Ziel fast automatisch Inkosistenzen, sofern man die virtuelle Maschine nicht für die Dauer des Vorgangs anhalten oder herunterfahren kann. Da ein solcher Vorgang allerdings bei großen Images auch sehr lange dauern kann, scheidet ein Anhalten oder Herunterfahren für mehrere Stunden oft aus. Eine Möglichkeit dies zu umgehen sind Snapshots. Allerdings können die meisten heute verwendeten Dateisysteme (ext3, ext4, reiserfs, xfs, etc.) keine Snapshots erstellen. Ausnahmen wie BTRFS sind noch sehr neu und kommen daher erst selten zum Einsatz.
- Liegen die virtuellen Maschinen auf Logical Volumes eines LVM, kann man Snapshots erstellen und damit sogar konsistente, lange laufende Backups erzeugen. Rsync ist jedoch nicht wirklich darauf ausgelegt, Logical Volumes zu transferieren, da es Block Devices nicht unterstützt. Zudem müsste man sich eine Lösung scripten, die zunächst einen Snapshot erstellt, dann diesen Snapshot per Rsync überträgt und danach den Snapshot wieder entfernt.
Es gibt mehrere Projekte, die Lösungen dafür anbieten. So richtig glücklich bin ich allerdings auch noch mit keinem davon:
- LVMSync - kümmert sich um die Erstellung von Snapshots und nutzt Rsync um Logical Volumes zu transferieren.
- bscp - Kopiert Block Devices über scp. In Python implementiert und so gut wie undokumentiert.
- Nur die Inhalte kopieren mit Rsync - ein durchaus interessanter Ansatz, das Block Device muss jedoch im Ziel einmal vorhanden sein.
- Lsyncd - Live Sync Daemon - klinkt sich ins Filesystem ein und transferiert Änderungen sofort, wenn sie geschehen. Also sowas wie ein Live-Backup.
- dd über ssh - Oldie but goldie. Geht natürlich. Dauert ewig und ist fehleranfällig. Transferiert alles, nicht nur Änderungen.
- Blocksync - synchronisiert Block Devices über Netzwerke. Sollte man mal testen.
Comments
Display comments as Linear | Threaded
Hartmut on :
Ich habe ein ähnliches Anliegen. Auch ich möchte die Fähigkeit eines Tools nutzen, dass nur Veränderungen überträgt, und es geht um eine Partition (z.B. /dev/sda1). Ich habe _nicht_ die Anforderung, dass dieses zwischenzeitlich im Zugriff sein muss. Auf der Zielseite sollte es eine Datei (Image) sein. Die Partition ist recht groß, das Delta für Folgeübertragungen allerdings eher klein.
Bist du an dieser Stelle weiter gekommen, oder könntest mir für meine Aufgabenstellung etwas empfehlen?
Gruß
Hartmut
Marco on :
ich habe das Problem dann anderweitig gelöst und Downtime in Kauf genommen. Wenn die Partition mit einem ZFS formatiert ist, könntest du mittels zfs send ud zfs receive die Änderungen recht schnell übertragen. Das funktioniert übrigens auch bei ZFS Volumes und damit eben auch Images.
Hilft das?
Viele Grüße,
Marco