[linux-l] RSync für Device-Files

Peter Ross Peter.Ross at bogen.in-berlin.de
Di Mai 29 01:49:39 CEST 2012


Hi Volker,

On Mon, 28 May 2012, Volker Grabsch wrote:

> RSync legt lediglich auf dem Zielsystem ein ähnliches Block-
> Device an.

Es tut damit genau das Richtige (mehr oder weniger;-): rsync arbeitet auf 
Filesystem-Ebene.

Devices sind lediglich Inodes, und in modernen Systemen nicht einmal 
irgendwo auf Platte, sonders von einem Device-Daemon in einem speziellen 
Device-Filesystem erzeugt (früher gabs statisch mknod)

Die Device-Nodes werden abhängig von der Hardware erzeugt und sind bei 
unterschiedlicher Hardware auch nicht die gleichen - es macht daher gar 
keinen Sinn, /dev zu synchronisieren.

Wenn /dev/sda1 bei Dir auf eine gleichgroße Partition auf einem anderen 
System "gemappt" werden kann, ist das eher Zufall als Absicht (oder halt 
Deine)

> Es gibt keine Option, mit dem ich RSync zwingen
> kann, stattdessen den _Inhalt_ des Block-Devices zu übertragen.
> Zwar gibt es inoffizielle Patches für RSync, doch auch diese
> sollen wohl ihre eigenartigen Problemchen haben.
>
> Andererseits ist das Rotating-Checksum-Verfahren von RSync
> ohnehin Overkill für diesen Zweck. Denn in ein Block-Device
> werden keine Abschnitte eingefügt oder ausgeschnitten. Eine
> "starre" Zerlegung in Blöcke, über die separate Checksummen
> gebildet werden, reicht hier vollkommen aus.
>
> Und siehe da: Diese Idee wurde bereits vor vielen Jahren
> implementiert, in einem einfachen Tool namens "blocksync.py" [1].
> Allerdings hat dieses einige Macken, weshalb ich eine (für
> mich) bessere Variante davon geschrieben habe:
>
>    https://github.com/vog/bscp

Du kannst sinnvoll nur eine Platte "syncen", wenn da kein schreibendes 
Filesystem darauf liegt, normalerweise als "unmounted" oder nur "read-only 
mount".

Ansonsten überträgst Du nur ein inkonsistentes Filesystem. Das ist 
nutzlos.

Du wirst sicherlich irgendwo ein Beispiel dafür haben, sonst hättest Du 
Dir sicher keine Gedanken drüber gemacht..

Ich benutze nun eine Weile ZFS (unter FreeBSD, aber es gibt auch 
ZFSonLinux, und das ähnlich gebaute BTRFS), und meine Strategie besteht 
aus regelmäßigen "zfs snapshot; zfs send | ssh $remote "zfs receive"

Das macht einen Snapshot und überträgt dann diesen zu einem anderen 
Rechner, in der Regel inkrementell gegenüber dem letzten Snapshot.

Da ZFS ein "copy on write"-System ist, also nur Änderungen des Filesystems 
auf die Platten geschrieben werden, braucht, im Gegensatz zu rsync, nicht 
das gesammte Filesystem nach Änderungen "durchforstet" werden, sondern die 
liegen schon bequem zum Übertragen bereit.

Gemessen an dem "ollen Kram" wir rsync und unison (nicht zu reden von 
rsync/unison-Implementierungsproblemen) ein Segen. Ich will, außer 
vielleicht für ein paar spezielle Ausnahmefälle für bestimmte Anwendungen, 
nie wieder was anderes als copy on write.

Es grüßt
Peter


Mehr Informationen über die Mailingliste linux-l