Tipps und Tricks rund um das Tool rsync

Bei dem Tool rsync handelt es sich um das Werkzeug, wenn es um den Abgleich zweier Verzeichnisse inklusive der darin enthaltenen Unterstruktur geht. Dabei können sowohl die Zeitstempel, Links (sowohl Hard als auch Symbolic), Besitzer, Gruppe und Rechte beibehalten werden. Mit einer speziellen Option kann man auch auf der Quelle bereits entfernte Dateien und Verzeichnisse auch auf dem Zielsystem löschen lassen.

Im Folgenden habe ich ein paar kleine Tipps zur Verwendung von rsync und mancher möglicher Fallstricke zusammengetragen.

« zurück (Gesammelte Anleitungen)

rsync-Abgleich der Dateisysteme FAT oder NTFS

Vorbemerkung

Grundsätzlich sollte man heutezutage von der Verwendung des Dateisystems FAT absehen, wenn es geht. Das Dateisystem hat zu viele Beschänkungen, z. B. die maximale Dateigröße von ca. 4 GiB, an die man bei Videobearbeitung oder der Ablage von DVD-Abbilddateien (max. 4,7 GiB) stößt.

Andere Probleme gelten auch für Dateisysteme wie NTFS, dem heute verwendeten Windows-Dateisystem. Problematisch beim Abgleich zwischen einem Verzeichnis zwischen einem Windows- und Linuxsystem sind die unterschiedliche Dateirechte, die von Windows nicht beachtete Groß- und Kleinschreibung der Datei- und Verzeichnisnamen und ein etwas anderer Umgang mit den Zeitstempeln.

Ich selbst nutze eine mit FAT32 formatierte externe Festplatte zum Mitnehmen von plattformunabhängigen Multimediadateien (hauptsächlich Audiodateien) bzw. auch als zusätzliches Backup dieser Dateien. Mit rsync kann ich diese Daten effizient auf dem aktuellen Stand halten.

Warum funktioniert das nicht

Fallstricke, wo man geht und steht. :-P

Folgende Probleme treten bei einem Abgleich eines Linuxdateisystems mit FAT oder NTFS auf:

  • Unterschiedliche Handhabung der Groß- und Kleinschreibung
  • Zeitstempel (v. a. Änderungsdatum)
  • Die immer wiederkehrende Zeitumstellung

Das richtige Mounten

Zuerst einmal muss die FAT-Partition richtig eingehängt (gemountet) werden:

# mount -t vfat -o user,noauto,noexec,nodev,nosuid,nodiratime,shortname=mixed,iocharset=utf8 /dev/sda1 /media/stick1

Die roten Optionen sind nicht zwingend erforderlich und dienen "lediglich" der Sicherheit. Es dürfen weder Gerätedateien (nodev) angelegt noch Dateien von dieser Partition nicht ausgeführt (noexec) werden. Ebenso sind Dateien mit SetUID-Rechten (nosuid) verboten bzw. werden nicht beachtet.

Interessant für die Verwendung von rsync sind die grünen Optionen:

  • nodiratime:
    Die Zugriffszeit der Verzeichnisse wird nicht geändert.
  • shortname=mixed:
    Hiermit erreicht man die gewünschte richtige Behandlung von Groß- und Kleinschreibung. Inzwischen ist diese Option default, um sicherzugehen sollte man sie aber immer mit angeben.
  • iocharset=utf8:
    Bei heutigen Linuxsystemen wird meistens die Codierung UTF-8 für das Dateisystem benutzt. Diese Option ist somit verantwortlich für die korrekte Behandlung von Umlauten oder dem ß.

Da man diese Zeile nicht immer wieder von Hand tippen will, nimmt man das gleich in die Datei /etc/fstab mit auf. Da sich der Gerätename bei USB-Sticks oder externen USB-Festplatten überscheiden kann, nimmt man am besten die UUID des Gerätes. Die dem Gerät zugewiesene UUID erhält man entweder über das Gerätedateisystem unterhalb von /dev/disk/by-uuid/ oder direkt über das Kommando:

# vol_id /dev/sda1
ID_FS_USAGE=filesystem
ID_FS_TYPE=vfat
ID_FS_VERSION=
ID_FS_UUID=1234-ABCD
ID_FS_UUID_ENC=1234-ABCD

Damit sieht der Eintrag in /etc/fstab wie folgt aus

UUID=1234-ABCD   /media/stick1   vfat   user,noauto,noexec,nodev,nosuid,nodiratime,shortname=mixed,iocharset=utf8 0 0

und die Parition kann durch ein einfaches

$ mount /media/stick1

korrekt eingehängt werden.

Die Optionen für rsync

Wie bereits erwähnt, haben NTFS und die Linuxdateisysteme unterschiedliche Berecchtigungskonzepte, die nicht einfach ineinander überführt werden können. Bei FAT fehlt ein Berechtigungskonzept sogar völlig. Damit ist die sehr oft verwendete Option -a keine gute Idee - sie führt zu einer Menge Fehlerausgaben.

Außerdem wird das Änderungsdatum von Windows etwas anders gehandhabt, was bei einem gewöhnlichen rsync-Aufruf immer zu einer vollständigen Übertragung der Daten führt.

Um ein FAT/NTFS-Dateisystem mit einem Linuxdateisystem abzugleichen ist folgender rsync-Aufruf notwendig:

$ rsync -rtv --modify-window=1 /data/music /media/stick1

Der Trick liegt in der Option --modify-window:
Der angegebene Wert "verbiegt" die Zeitprüfung von rsync so, dass die Änderungsdaten um ±1 Sekunde abweichen darf. Hiermit werden wirklich nur die Dateien übertragen, die seit dem letzten Mal geändert worden sind.

Behandlung der Zeitumstellung

Alle Jahre wieder... ;-)

Wer das oben verwendete Rezept angewendet hat, wird trotzdem spätestens nach der Zeitumstellung (Sommerzeit und Normalzeit) wider Erwarten eine komplette Übertragung der Daten erleben.

In meinem Fall ist es kein Problem, die Lösung steht ja schon oben: Wieder verwenden wir die Option --modify-window:

$ rsync -rtv --modify-window=3601 /data/music /media/stick1

Der Wert 3601 erlaubt ein Abweichen der Daten von ±1 h.

Man muss aber hierbei bedenken, dass wenn sich Daten in diesem Zeitraum wirklich geändert haben sollten, werden diese auch nicht übertragen.

In meinem Fall kommt das aber nie vor, da die externe Platte immer nur eine Kopie meiner lokalen, statischen Daten beinhaltet, bei denen immer nur Dateien und Verzeichnisse hinzukommen, aber keine bestehenden Daten verändert werden.

Wer sich nicht darauf verlassen kann oder will, kann in den Weiterführenden Links eine mögliche Lösung finden.

Weiterführende Links

« nach oben

« zurück (Gesammelte Anleitungen)