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.
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
- Grundlage dieser Anleitung:
Pro-Linux Tipps zum vfat-Dateisystem unter Linux - Zu den Zeitstempeln und wie man sie korrigiert, statt sie zu ignorieren:
How the DST Change can adversely affect FAT filesystems (englisch) - Einhängen von Dateisystemen mit UUIDs:
Linux by examples - fstab with uuid (englisch)