Rsync -avzHP folgt Hardlinks, anstatt sie als Hardlinks zu kopieren

13

Ich benutze rsnapshot, um stündliche / tägliche / wöchentliche / monatliche Backups meiner "Arbeit" -Freigabe zu erstellen. Jetzt versuche ich, das gesamte Backup-Verzeichnis mit rsync auf ein externes Laufwerk zu kopieren.

Ich habe diesen Befehl / diese Parameter in einer Bildschirmsitzung verwendet (ja, die Datei rsync-exclude.txt befindet sich in dem Verzeichnis, in dem ich den Befehl ausführe).

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

Das Ganze läuft auf einem QNAP TS-439, das interne Laufwerk ist eine einzelne Festplatte (kein RAID) mit der Form EXT4, das externe Laufwerk ist EXT3.

Was passiert ist: Rsync folgt jedem Hardlink und kopiert die eigentliche Datei, anstatt den aktualisierten Hardlink auf dem externen Laufwerk neu zu erstellen . Ich habe dies nicht sofort erkannt, sodass das externe Laufwerk mit xxx Kopien derselben Dateien belegt wurde.

Was ich erreichen möchte, ist: Kopieren der gesamten von rsnapshot generierten Dateistruktur auf das externe Laufwerk unter Beibehaltung der Hardlinks, um Platz zu sparen. Hinweis: Dies muss nicht unbedingt mit rsync erfolgen.

Vielen Dank für Ihre Ideen und Zeit. Ich würde mich über Ihre Hilfe freuen, große Zeit.

Update: Ich habe erfahren, dass rsnapshot keine Symlinks verwendet, sondern Hardlinks. Daher verwende ich jetzt die Option -H, mit der die Hardlink-Struktur gemäß Rsnapshot für mehrere Ziele beibehalten werden soll (oder die Hardlink-Struktur beibehalten soll), die jedoch immer noch nicht funktioniert ... was vermisse ich hier?

Update 2: Ich habe hier eine andere Meinung / Aussage zu diesem Thema gefunden: rsync mit --hard-links friert ein Steven Monday schlägt vor, nicht zu versuchen, große Dateistrukturen mit Hardlinks zu rsyncieren, da dies viel Speicherplatz beansprucht und eine schwierige Aufgabe für rsync ist. Eine wahrscheinlich bessere Lösung wäre es, ein .img der Datenstruktur zu erstellen, die ich sichern möchte. Was denkst du?

woerndl
quelle
Ich mache genau das Gleiche wie du! +1. Werde den dd Ansatz versuchen
mmalmeida

Antworten:

10

Die Option (oder ) des rsyncBefehls führt theoretisch das aus, was Sie erreichen möchten. Kurz gesagt: Erstellen Sie eine Kopie Ihres Dateisystems, die die fest verknüpfte Struktur des Originals beibehält. Wie ich in meiner Antwort auf eine andere ähnliche Frage erwähnt habe , ist diese Option zum Scheitern verurteilt, sobald Ihr Quelldateisystem einen bestimmten Schwellenwert für die Komplexität von Hardlinks überschreitet.-H--hard-links

Die genaue Position dieses Schwellenwerts hängt möglicherweise von Ihrem RAM und der Gesamtzahl der festen Verbindungen (und wahrscheinlich einer Reihe anderer Dinge) ab, aber ich habe festgestellt, dass es keinen Sinn macht, zu versuchen, ihn genau zu definieren. Was wirklich wichtig ist, ist, dass die Schwelle in realen Situationen nur allzu leicht zu überschreiten ist und Sie nicht wissen, dass Sie sie überschritten haben, bis der Tag kommt, an dem Sie versuchen, eine rsync -aHoder eine zu laufen cp -a, die kämpft und schließlich versagt .

Was ich empfehle, ist Folgendes: Kopieren Sie Ihr stark verknüpftes Dateisystem als eine Einheit, nicht als Dateien. Kopieren Sie also die gesamte Dateisystempartition als einen großen Blob. Hierfür stehen eine Reihe von Tools zur Verfügung, die jedoch am allgegenwärtigsten sind dd.

Mit der Standard-Firmware sollte Ihr QNAP NAS auch ddeingebaut sein fdisk. Mit fdiskErstellen mindestens so groß ist eine Partition auf das Ziellaufwerk , das als Quellpartition. Verwenden Sie dann dd, um eine genaue Kopie Ihrer Quellpartition auf der neu erstellten Zielpartition zu erstellen.

Während die ddKopie ausgeführt wird, müssen Sie sicherstellen, dass sich im Quelldateisystem nichts ändert, damit Sie nicht eine beschädigte Kopie auf dem Ziel erhalten. Eine Möglichkeit, dies zu tun, besteht in umountder Quelle, bevor der Kopiervorgang gestartet wird. Eine andere Möglichkeit besteht darin, die Quelle im schreibgeschützten Modus bereitzustellen.

Steven Montag
quelle
Angenommen, ich verwende niemals feste Links außerhalb des rsnapshot-Sicherungsverzeichnisses. Bekomme ich trotzdem Probleme? Ich habe wirklich wenig Festplattenspeicher, möchte aber rsnapshot-Backups erstellen. Derzeit ist meine Festplatte voll.
Sridhar Sarnobat
Ich glaube, ich habe die Situation getroffen, auf die Sie hingewiesen haben. Ich habe ein Sicherungsverzeichnis mit vielen mit rsync erstellten Snapshots. Es hat viele Dateien mit vielen festen Links. Die gesamte Festplattennutzung beträgt ca. 200G. Ich kopiere es mit 'rsync -avH' auf eine andere Partition. Aber nach 4 (oder 5?) Tagen und Nächten läuft der Kopiervorgang immer noch. Ich denke, rsync ist durch die Gesamtzahl der Hardlinks im Quellverzeichnis völlig verwirrt.
Guangliang
In Ubuntu 18.04 ist es --hard-links(mit einem 's').
Nobar
1

-l ist für Symlinks, warum sollte es etwas für Hardlinks tun?

(Entschuldigung, dies ist eine Antwort und kein Kommentar. Ich habe noch keine Kommentarrechte und diese Antwort benötigt eine Antwort.)

Ein weiterer Hinweis, der ein Kommentar sein sollte: Ist dies alles native Hardware oder befinden Sie sich auf einer VM mit Netzwerk-Mount?

Bearbeiten

Ignoriere meinen früheren Kommentar dazu, warum du Hardlinks verwendest. Ich habe den rsnapshotKommentar verpasst .

Es wäre hilfreich, einen Test durchzuführen, bei dem zuerst rsync zwischen zwei lokalen Verzeichnissen und dann auf Ihrer Remote-Festplatte getestet wird. Dieser kleine Test zeigt die -HOption wokrs wie erwartet. Die -iOption für lszeigt die Inodes an und zeigt damit an, dass die Links ohne zusätzliche Kopien beibehalten wurden.

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

Bei einem anschließenden Test rsync -avzHP src/ host:/tmpfür einen Remote-Host wurden die Hardlinks weiterhin beibehalten

nhed
quelle
Sie haben vollkommen recht, nach einigen weiteren Recherchen habe ich festgestellt, dass rsnapshot keine Symlinks, sondern Hardlinks verwendet. Ich habe meine Frage entsprechend aktualisiert. Die Lösung sollte also -H verwenden und das gesamte Verzeichnis kopieren (wie ich es tue), um die von rsnapshot erstellte Hardlink-Struktur beizubehalten, aber es funktioniert immer noch nicht. Wenn ich anfange, alles aus täglich zu kopieren, wird 0 kopiert, nicht nur die geänderten Dateien. // Und ja, ich verwende für diesen Vorgang einen Qnap TS-439 und ein externes Lacie-Laufwerk.
Woerndl
Können Sie dieses Problem reduzieren, indem Sie ein Testquellverzeichnis und ein Testzielverzeichnis mit nur 2 Dateien in der Quelle haben, die fest miteinander verbunden sind? Wie stellen Sie außerdem fest, dass der Link nicht korrekt behandelt wurde, und warum sollten Sie Hardlinks verwenden? Wenn Sie -Hden Langtext auf der Manpage lesen , können Sie feststellen, dass es mehrere Einschränkungen gibt, die ich sagen würde, versuchen Sie es von Hardlinks fern zu bleiben ...
nhed
Ich werde einen Testfall einrichten und Sie auf dem Laufenden halten. Vielen Dank für Ihre bisherigen Ideen.
Woerndl
1

Dies ist ein langer Weg, aber wenn Sie keine andere Lösung finden können, würde ich vorschlagen, das USB-Laufwerk als EXT4 zu formatieren. Möglicherweise ist dies das Problem: https://bugzilla.samba.org/show_bug.cgi?id=7670

Bei genügend festen Links in einem Quellordner und einem ausreichend kleinen Zielvolume kann das Kopieren mit rsync --hard-links fehlschlagen. Rsync schlägt fehl, indem die maximale Anzahl von Hardlinks auf dem Ziel <...> ausgeschöpft wird. Das eigentliche Problem ist nicht rsync, sondern das zugrunde liegende Dateisystem.

Motsel
quelle
Vielen Dank für Ihre Teilnahme an meinem Problem! Sieht so aus, als ob dies mit Samba zusammenhängt. Mein Laufwerk ist direkt mit dem NAS verbunden.
Woerndl
1
Hallo, nein, dieses Problem hat nichts mit Samba zu tun. Es ist die Heimat der rsync-Website: rsync.samba.org
Motsel
0

Haben Sie versucht, die hinzuzufügen -l Option ?

Ich weiß, dass die Manpage sagt, dass sie enthalten ist, -aaber Manpages sind nicht immer 100% genau.

Ladadadada
quelle
Vielen Dank für Ihr Feedback. Ich musste meine Frage aktualisieren: Rsnapshot verwendet keine Symlinks, sondern Hardlinks, um seine inkrementelle Sicherungsstruktur aufzubauen. Also -l hilft sowieso nicht, aber -H sollte, was leider auch nicht funktioniert.
Woerndl