Verlinkt rsync auf exakte Dateien oder nur auf Dateien mit demselben Namen?

Verlinkt rsync auf exakte Dateien oder nur auf Dateien mit demselben Namen?

Ich habe ein kleines Rsync-Backup-Skript für meinen kürzlich ausgetauschten Computer (interne Festplatte zu externer Festplatte) geschrieben.

Als ich den neuen Computer bekam, habe ich die Dateien kopiert (von der alten internen Festplatte auf die neue interne Festplatte). Dieselbe Dateistruktur, Dateinamen usw.

Ich frage mich, ob ich das Sicherungsskript einfach auf dem neuen Computer ausführen kann, der jetzt an die alte externe Festplatte angeschlossen ist.

Das potenzielle Problem, das ich voraussehe, dreht sich um die Frage, ob rsync auf bestimmte Dateien oder nur auf Dateinamen verweist.

Ich erinnere mich, etwas darüber gelesen zu haben, dass Dateisysteme „unter der Haube“ für jede Datei spezifische Kennungen (eine Seriennummer oder so etwas) hätten und dass sich durch eine Änderung des Namens diese Nummer nicht ändere.

Wenn rsync also auf diese Nummer und nicht nur auf einen Dateinamen an einer bestimmten Position in der Verzeichnisstruktur verweist, kann es die externe Festplatte völlig durcheinanderbringen, indem alles doppelt kopiert wird oder ein anderes seltsames Ergebnis auftritt.

Es ist nur so, dass rsync mit Hard-/Softlinks arbeitet und ich bin kein ausreichender Experte auf diesem Gebiet, um die Einzelheiten oder ihre Auswirkungen zu kennen …

Jede Hilfe ist willkommen!

MacOS Ventura 13.4.1, APFS (Dateisystem)

Antwort1

tl;dr

Es gibt nichts, worüber Sie sich Sorgen machen müssen. Lassen Sie Ihr Skriptrsync --dry-run --verbose …und überzeugen Sie sich selbst. Wenn es sinnvoll erscheint, verwenden Sie weiterhin das Originalskript (ohne --dry-run).


Inode-Nummern

Ich erinnere mich, etwas darüber gelesen zu haben, dass Dateisysteme „unter der Haube“ für jede Datei spezifische Kennungen (eine Seriennummer oder so etwas) hätten und dass sich durch eine Änderung des Namens diese Nummer nicht ändere.

InodeNummern. Native Dateisysteme in Unix/Linux verwenden dieses Konzept häufig (und macOS ist Unix). Dateisysteme, die intern keine Inodes verwenden, erscheinen so, als ob sie sie verwenden würden, sodass sie auf ähnliche Weise behandelt werden können. Also ja, Dateien haben Seriennummern, ls -idruckt sie aus.

Wenn rsync also auf diese Nummer und nicht nur auf einen Dateinamen verweist …

rsyncbasiert nicht auf Inode-Nummern, es verwendetPfadnamen(und Pfadnamen bestehen ausDateinamen). Inode-Nummern sind nicht dazu gedacht, außerhalb ihres Dateisystems etwas zu bedeuten. Und ich meine damit nicht einen Dateisystemtyp; ich meine, sie sind intern für ihre jeweilige Instanz eines Dateisystems und nicht mit Inode-Nummern in einem anderen Dateisystem (selbst vom gleichen Typ) verbunden.

Sie haben Recht, wenn rsyncman versucht, auf Inode-Nummern zu basieren, könnte das verheerende Folgen haben. Das passiert aber nicht. Soweit ich weißEs gibt keine Standardschnittstelle für den Zugriff auf Dateien über Inode-Nummern. Und Sie (oder rsync) können beim Erstellen einer neuen Datei keine bestimmte Nummer anfordern. Für Dateisysteme, die keine Inodes verwenden und nur so tun, als ob sie sie verwenden würden, können Inode-Nummern im laufenden Betrieb generiert werden, und in vielen (allen?) Fällen gibt es keine Garantie, dass genau dieselben Nummern genau denselben Dateien zugeordnet sind, nachdem Sie ein solches Dateisystem ausgehängt und erneut eingehängt haben.

All dies bedeutet, dass sich Programme nicht um Inode-Nummern kümmern sollten, es sei denn, sie müssen sich mit den Innereien eines Dateisystems selbst befassen. Inode-Nummern sind intern im Dateisystem. Programme mögen cpoder rsyncsollten auf einer anderen Abstraktionsebene arbeiten und das tun sie auch. Die andere Abstraktionsebene ist der Verzeichnisbaum mit Pfadnamen.

Ein Szenario, in dem Inode-Nummern „durchsickern“ und (sicher) von solchen Programmen verwendet werden, ist, wenn ein Programm Hardlinks erkennen möchte. Hardlink-Dateien sind zwei oder mehr Pfadnamen, die zu einer einzigen Datei (Inode-Nummer) führen. Programme können Inode-Nummern vergleichen und so feststellen, welche Pfadnamen zur gleichen Datei führen. Hardlinks funktionieren nur innerhalb eines einzigen Dateisystems; Dateien, die zufällig identische Inode-Nummern haben, aber in unterschiedlichen Dateisystemen existieren, sind nicht verwandt, Programme berücksichtigen dies.

Sie können beispielsweise die Option / rsyncverwenden :--hard-links-H

Dies weist an rsync, in der Quelle nach fest verknüpften Dateien zu suchen und die entsprechenden Dateien im Ziel miteinander zu verknüpfen. Ohne diese Option werden fest verknüpfte Dateien in der Quelle so behandelt, als wären sie separate Dateien.

[…]

Beachten Sie, dass rsync nur Hardlinks zwischen Dateien erkennen kann, die sich innerhalb des Übertragungssatzes befinden. […]

(Quelle:man 1 rsync)

rsync -Hversucht, Hardlinks in der Quelle zu erkennen und Hardlinks auf dem Ziel zu erstellen. Aber selbst dann haben Inode-Nummern auf dem Ziel nichts mit Inode-Nummern in der Quelle zu tun. Wenn rsync -Hfestgestellt wird, dass einige Pfadnamen in der Quelle zur gleichen Inode-Nummer innerhalb desselben Dateisystems führen, versucht es, die entsprechenden Pfadnamen auf dem Ziel so zu erstellen, dass sie zumancheeinzelne Inode-Nummer; mit anderen Worten wird versucht, fest verknüpfte Dateien zu erstellen. Wie hoch die Nummer genau sein wird, liegt außerhalb des Umfangs (und der Möglichkeiten) von rsync. Das Tool muss sich nicht um die Nummer kümmern, da selbst die Schnittstelle zum Erstellen von Hardlinks ( link(2)) Pfadnamen und keine Inode-Nummern verwendet.


Kann ich einfach das Sicherungsskript ausführen?

Ich habe die Dateien kopiert (von der alten internen Festplatte auf die neue interne Festplatte). Dieselbe Dateistruktur, Dateinamen usw. Ich frage mich, ob ich das Sicherungsskript einfach auf dem neuen Computer ausführen kann, der jetzt an die alte externe Festplatte angeschlossen ist.

Du kannst.Die Inode-Nummern in der neuen Quelle können (und sind höchstwahrscheinlich) völlig anders als die Inode-Nummern in der alten Quelle sein, aber das spielt überhaupt keine Rolle. Eine identische Verzeichnisstruktur der Quelle ist ausreichend.

Denken Sie daran, es gibt--dry-run/-n.Auf der sicheren Seite sein, erstellen Sie eine Kopie Ihres Skripts und verwenden Sie es rsync --dry-run --verbose …. Führen Sie es aus und analysieren Sie die Ausgabe. Eventuelle Probleme haben jedoch nichts mit den Inode-Nummern zu tun.

verwandte Informationen