Gibt es einen Befehl wie rsync, mit dem große, spärliche Dateien von einem Linux-Server auf einen anderen synchronisiert werden können?
Es ist sehr wichtig, dass die Zieldatei dünn bleibt. Es kann länger (aber nicht größer) sein als das Laufwerk, auf dem es sich befindet. Nur geänderte Blöcke sollten über die Leitung gesendet werden.
Ich habe rsync ausprobiert, aber keine Freude bekommen. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M
Wenn ich dazu ein Programm schreibe, erfinde ich dann nur das Rad neu? http://www.finalcog.com/synchronise-block-devices
Vielen Dank,
Chris.
linux
rsync
kvm-virtualization
fadedbee
quelle
quelle
Antworten:
So erstellen Sie neue Dateien im Sparse-Modus
gefolgt von
So aktualisieren Sie alle vorhandenen Dateien (einschließlich der zuvor erstellten spärlichen) an ihrem Platz.
quelle
rsync --existing --inplace
und dannrsync --ignore-existing --sparse
eine Synchronisierungsbeschleunigung zu habenRsync überträgt nur Änderungen an jede Datei und mit --inplace sollten nur die geänderten Blöcke überschrieben werden, ohne die Datei neu zu erstellen. Von ihrer Eigenschaftsseite .
Die Verwendung von --inplace sollte für Sie funktionieren. Dies zeigt Ihnen den Fortschritt, komprimiert die Übertragung (auf der Standardkomprimierungsstufe), überträgt den Inhalt des lokalen Speicherverzeichnisses rekursiv (der erste abschließende Schrägstrich ist wichtig), nimmt die Änderungen an den vorhandenen Dateien vor und verwendet ssh für den Transport.
Ich benutze oft auch das Flag -a, das ein paar Dinge mehr macht. Es ist gleichbedeutend mit -rlptgoD. Ich überlasse das genaue Verhalten Ihnen, damit Sie es in der Manpage nachschlagen können.
quelle
Am Ende habe ich Software geschrieben, um dies zu tun:
http://www.virtsync.com
Hierbei handelt es sich um kommerzielle Software für 49 USD pro physischem Server.
Ich kann jetzt eine 50-GB-Sparse-Datei (mit 3 GB Inhalt) in weniger als 3 Minuten über das private Breitband replizieren.
quelle
Werfen Sie einen Blick auf Zumastor Linux Storage Project , das über das
ddsnap
Tool ein "Snapshot" -Sicherungsprogramm unter Verwendung der Binärdatei "rsync" implementiert .Von der Manpage:
ddsnap bietet eine Block-Device-Replikation mit einer Block-Level-Snapshot-Funktion, mit der mehrere Snapshots gleichzeitig effizient gespeichert werden können. ddsnap kann eine Liste von Snapshot-Chunks erstellen, die sich zwischen zwei Snapshots unterscheiden, und diese Differenz dann über die Leitung senden. Schreiben Sie auf einem Downstream-Server die aktualisierten Daten auf ein Snapshot-Block-Gerät.
quelle
lvmsync macht das.
Hier ist ein Nutzungsprotokoll . Es wird ein LVM-Snapshot auf der Quelle erstellt und die logische Partition übertragen. Sie können inkrementelle Aktualisierungen der Änderungen seit der Snapshot-Erstellung beliebig oft übertragen.
quelle
Könnte das Replizieren des gesamten Dateisystems eine Lösung sein? DRBD? http://www.drbd.org/
quelle
Vielleicht ein bisschen seltsam hier, aber ich habe kürzlich herausgefunden, dass NFS das in Ordnung bringt.
Sie exportieren also ein Verzeichnis auf einen Rechner und hängen es dann auf den anderen und kopieren die Dateien einfach mit einfachen Hilfsprogrammen wie
cp
. (Einige alte / alte Dienstprogramme können Probleme mit spärlichen Dateien haben.)Ich fand es
rsync
besonders ineffizient, spärliche Dateien zu übertragen.quelle
Um große Dateien oder Blockgeräte mit geringen bis mäßigen Unterschieden zu synchronisieren, können Sie entweder eine einfache Kopie erstellen oder bdsync verwenden . Rsync ist für diesen speziellen Fall absolut nicht geeignet *.
bdsync
Arbeitete für mich, scheint ausgereift genug, es ist die Geschichte der Fehler ermutigend (kleine Probleme, schnelle Lösung). In meinen Tests lag die Geschwindigkeit in der Nähe des theoretischen Maximums, das Sie ** erreichen konnten (dh Sie können ungefähr in der Zeit synchronisieren, in der Sie die Datei lesen müssen). Endlich ist es Open Source und kostet nichts.bdsync
Liest die Dateien von beiden Hosts und tauscht Prüfsummen aus, um sie zu vergleichen und Unterschiede zu erkennen. All dies zur gleichen Zeit . Schließlich wird eine komprimierte Patch-Datei auf dem Quellhost erstellt. Anschließend verschieben Sie diese Datei auf den Zielhost und führen bdsync ein zweites Mal aus, um die Zieldatei zu patchen.Bei der Verwendung über eine relativ schnelle Verbindung (z. B. 100-Mbit-Ethernet) und bei Dateien mit geringen Unterschieden (wie dies häufig bei VM-Festplatten der Fall ist) verkürzt sich die Synchronisierungszeit auf die Zeit, die zum Lesen der Datei erforderlich ist. Über eine langsame Verbindung benötigen Sie etwas mehr Zeit, da Sie die komprimierten Änderungen von einem Host auf den anderen kopieren müssen (anscheinend können Sie mit einem netten Trick Zeit sparen , haben ihn aber nicht getestet).
*: rsync ist bei großen Dateien äußerst ineffizient. Auch wenn --inplace zuerst die gesamte Datei auf dem Zielhost liest, beginnt AFTERWARDS, die Datei auf dem Quellhost zu lesen und schließlich die Unterschiede zu übertragen (führen Sie einfach dstat oder ähnliches aus, während Sie rsync ausführen und beobachten). Das Ergebnis ist, dass selbst bei Dateien mit kleinen Unterschieden etwa doppelt so viel Zeit erforderlich ist, um die Datei zu lesen und zu synchronisieren.
**: Unter der Annahme, dass Sie keine andere Möglichkeit haben, festzustellen, welche Teile der Dateien geändert wurden. LVM-Snapshots verwenden Bitmaps, um die geänderten Blöcke aufzuzeichnen, sodass sie extrem schneller sind (die Readme- Datei von lvmsync enthält weitere Informationen).
quelle
Mir ist ein solches Dienstprogramm nicht bekannt, nur die Systemaufrufe, die es verarbeiten können. Wenn Sie also ein solches Dienstprogramm schreiben, kann es hilfreich sein.
Was Sie tatsächlich tun können, ist qemu-img convert, um die Dateien zu kopieren, aber es wird nur funktionieren, wenn das Ziel-FS Sparse-Dateien unterstützt
quelle