Login
Newsletter
Werbung

Mo, 17. Januar 2005, 00:00

Tipps zum vfat-Dateisystem unter Linux

Das vfat-Dateisystem bietet trotz der langjährigen Unterstützung unter Linux immer noch viele Fallstricke. Anhand einiger praktischen Anwendungsfälle werden diese aufgezeigt und Lösungen vorgestellt.

Einleitung

Viele Linux-Anwender winken ab, wenn von vfat die Rede ist. Unter Linux gibt es ausreichend viele Dateisystem-Alternativen, die technologisch überlegen sind. Ganz zu schweigen von der rechtlichen Seite: der Versuch von Microsoft, Lizenzen mit einem Patent auf ein vfat-Bestandteil einzufordern, hinterlässt ein ungutes Gefühl.

Leider ist vfat jedoch immer noch die einfachste Möglichkeit, ein unter Linux erstelltes Dateisystem der eingeschränkten Microsoftwelt zur Verfügung zu stellen. Mit der steigenden Popularität von mobilen Datenträgern wie CompactFlash-Karten, USB-Sticks und externen Firewire-Festplatten wuchs die Bedeutung des "kleinsten gemeinsamen Nenners" vfat sogar.

Die im Folgenden festgehaltenen Erfahrungen habe ich bei der Arbeit mit zwei externen 250GB-Firewire-Festplatten (Maxtor 5000XT) gesammelt. Während die eine Festplatte mit ext3 formatiert wurde und meine speicherhungrigen Dateien sicher aufnahm, benutzte ich die andere unter vfat als Sicherungskopie und als Brücke zur Windowswelt.

Ein Sonderangebot für eine USB-250GB-Festplatte bei einem Lebensmitteldiscounter erinnerte mich kürzlich daran, dass ich eigentlich meine Erfahrungen in einem Artikel zusammenfassen wollte. Da mit wachsender Verbreitung auch der eine oder andere Linux-Anwender auf die selben Probleme wie ich stoßen wird, hoffe ich, mit diesem Artikel all jenen viele Stunden Problemanalyse zu ersparen. Mein besonderer Dank gilt Uwe Menges, der mir als Mitstreiter dieser vfat-Odyssee beistand.

Abgleich von ext3- und vfat-Dateisystemen mit rsync

Die Besonderheiten des vfat-Dateisystems, die in dieser Sektion Erwähnung finden, sind natürlich nicht nur auf die Arbeit mit rsync beschränkt. Der Bezug zu rsync eignet sich hier jedoch sehr gut als Beispiel, bei dem sich viele der möglichen Schwierigkeiten mit vfat zeigen.

Wer rsync noch nicht kennt, sollte wissen, dass es anhand des Zeitpunktes der letzten Veränderung und anhand der Dateigröße entscheidet, ob eine schon im Zielpfad existierende Datei übertragen werden muss. Unter einem Unix-Dateisystem würde ein rsync -av quelle/* ziel gewährleisten, dass alle Dateien des Verzeichnisses quelle identisch im Verzeichnis ziel vorhanden sind. Bei einem sofortigen zweiten Aufruf des Befehls würden keine Dateien mehr übertragen werden.

Damit rsync die Dateien auf zwei so unterschiedlichen Dateisystemen wie vfat und ext3 abgleichen kann, sind einige Voraussetzungen zu schaffen, die zuerst nicht besonders offensichtlich sind.

Erforderliche Mountoptionen

Mountet man das vfat-Dateisystem ohne Mountoptionen, so wird ein normaler Benutzer keinen Schreibzugriff darauf haben. Weiterhin wird einem die Sonderbehandlung der MS-DOS-Dateinamen (DATEINAM.EXT) in Form von Kurznamen ein Bein stellen:

> mount /dev/sda1 /myvfat -t vfat
> mount | grep sda1
/dev/sda1 on /myvfat type vfat (rw)
> grep sda1 /proc/mounts
/dev/sda1 /myvfat vfat rw,nodiratime,fmask=0033,dmask=0033 0 0
> cd /myvfat
> touch ABCDEFGH
> touch ABCDEFGHI
> ls -l
-rwxr--r-- 1 root root 0 Dec 31 16:05 ABCDEFGHI
-rwxr--r-- 1 root root 0 Dec 31 16:05 abcdefgh
# Man beachte die Kleinschreibung -----------^

Man kann sich vorstellen, dass rsync nicht begeistert sein wird, wenn Dateinamen plötzlich kleingeschrieben sind, nur weil sie zufällig in das MS-DOS-Dateischema passen. Die Dateien werden in diesem Fall bei jedem Abgleich erneut übertragen, obwohl eigentlich keine Änderung vorliegt, da rsync sehr wohl auf Groß-/Kleinschreibung achtet. Die hierfür verantwortliche Standard-Mountoption heißt shortname=lower.

Um dies zu verhindern, verwendet man die Option shortname=mixed, die den Kurznamen genau so anzeigt, wie er beim Anlegen angegeben wurde. Wer auf korrekte Sonderzeichen beim Umwandeln der Kurznamen Wert legt, darf noch die Option codepage=850 setzen. In der Praxis sollte das Beibehalten der Standard-Mountoption codepage=437 jedoch keine Auswirkungen haben, da die überwiegend verwendeten, langen Dateinamen ohnehin in Unicode gespeichert werden. Mit der Standard-Mountoption iocharset=iso8859-1 werden diese übrigens für Linux in 8-Bit-Dateinamen gewandelt. Wer also ein Unicode-fähiges System hat (z.B. Fedora Core) muss iocharset=utf8 explizit angeben. Ich bin leider noch nicht so weit.

Die Datei-Berechtigungen richten sich nach der umask des mount-Benutzers root und dessen Benutzer- und Gruppen-ID. Damit man auch als berechtigter Benutzer im Dateisystem schreiben darf, setzt man am besten mit der Option umask=002 für Gruppenmitglieder Lese-, Schreib- und Ausführungsrechte. Alle anderen dürfen nicht schreibend zugreifen - es schadet nie, ein Multi-User-System als ein solches zu behandeln! Mit der Option gid=100, gehört dann - zumindest auf meinem Debian-System - jede Datei der Gruppe "users". Und damit von vfat nach ext3 kopierte Dateien nicht root als Besitzer hinterlegt bekommen, stellt man mit der Option uid=1000 auch gleich die weiteren Besitzverhältnisse auf dem vfat-Dateisystem klar. (Auf meinem System ist 1000 die Benutzer-ID meines Benutzers "t", der Mitglied der Gruppe "users" ist.)

> mount /dev/sda1 /myvfat -t vfat -o shortname=mixed,codepage=850,umask=002,uid=1000,gid=100
> mount | grep sda1
/dev/sda1 on /myvfat type vfat (rw,shortname=mixed,codepage=850,umask=002,uid=1000,gid=100)
> grep sda1 /proc/mounts
/dev/sda1 /myvfat vfat rw,nodiratime,uid=1000,gid=100,fmask=0002,dmask=0002,codepage=cp850,shortname=mixed 0 0
> cd /myvfat
> ls -la
-rwxrwxr-x 1 t users 0 Dec 31 16:05 ABCDEFGH
-rwxrwxr-x 1 t users 0 Dec 31 16:05 ABCDEFGHI

Wer diese Optionen nun in der Datei /etc/fstab festhalten möchte, kann gerne noch die Optionen noauto,user hinzufügen, damit das Dateisystem nicht automatisch beim Systemstart gemountet wird, sondern von einem normaler Benutzer gemountet werden kann. Die Option user impliziert aus Sicherheitsgründen die Optionen noexec,nosuid,nodev. Da in diesem Beispiel von einem externen Datenträger für Daten ausgegangen wird, sollte das nicht stören. Wer das Ausführen von Programmen auf dem Dateisystem erlauben möchte, setzt zusätzlich die Option exec. Als Optimierungsmaßnahme könnte man nun noch die Aktualisierung des letzten Dateizugriffs mit noatime,nodiratime ausschalten, falls man diese Information nicht benötigt. Ich persönlich benutze jedoch die Angaben, um bei Audiodateien zum Beispiel mit find -atime -21 meine Hörgewohnheiten der letzten drei Wochen zu untersuchen.

Die resultierende fstab-Zeile sieht folgendermaßen aus:

/dev/sda1 /myvfat vfat shortname=mixed,codepage=850,umask=002,uid=1000,gid=100,noauto,user 0 0
> mount /myvfat
> mount | grep sda1
/dev/sda1 on /myvfat type vfat (rw,noexec,nosuid,nodev,shortname=mixed,codepage=850,umask=002,uid=1000,gid=100)
> grep sda1 /proc/mounts
/dev/sda1 /myvfat vfat rw,nodiratime,nosuid,nodev,noexec,uid=1000,gid=100,fmask=0002,dmask=0002,codepage=cp850,shortname=mixed 0 0

Für Details verweise ich an dieser Stelle auf die Manpage des mount-Befehls, speziell auf die Sektionen "Mount options for fat" und "Mount options for vfat".

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung