10 März 2006

Dateien mit System

Daten werden ja bekanntermaßen meißtens auf Festplatten gespeichert. Egal, ob es nun eine, oder mehrere im Raid sind, sie müssen in geordneter Form gesichert werden, damit man sie wiederfindet. Wir Menschen sortieren unsere Dateien in Verzeichnisse bzw. Ordner ein. Auf der Ebene des Betriebssystems werden Dateien in einem Dateisystem abgeleg. Windows kennt, grob gesagt zwei Dateisysteme, FAT und NTFS. Das FAT-Dateisystem ist recht antiquiert, wird aber auf Speicherkarten und sonstigen Medien mit eingebautem Speicher immer noch verwendet. Da es nicht über ein Journal verfügt, geht bei der Formatierung von kleinen Medien kein kostbarer Speicherplatz verloren. Bei einem Systemabsturz kann es aber sein, dass Daten vernichtet werden (verlorene Cluster). Das FAT-System ist recht ineffizient, weil es sehr schnell fragmentiert und der Schreib-Lese-Kopf bei Zugriffen auf große Dateien sehr häufig zwischen Dateizuordnungstabelle und Datenbereich hin und her springen muss. Um das im Rahmen zu halten sollte ein FAT-System in regelmäßigen Abständen defragmentiert werden, weil sonst die Systemleistung extrem leidet. Hinzu kommt, das eine FAT32-Partition höchstens 32 GB groß sein darf und die maximale Dateigröße 2 GB beträgt. NTFS ist für ein reines Windows-System die klügere Wahl, weil hier nicht nur diese Beschränkungen stark erhöht sind (ich kenne die genauen Zahlen jetzt nicht, aber sie sind jeweils im Terabyte-Bereich), sondern das Dateisystem auch über ein Journal verfügt, was die Datenintegrität (nicht unbedingt die Daten selbst) bei einem Systemabsturz sichert. Die Zuordnungstabellen arbeiten effizienter, wenn auch nicht optimal, und es verfügt über diverse Funktionen, die beim FAT-System fehlen. NTFS kann transparent (der Zugriff erfolgt, wie auf eine normale Partition) komprimiert und/oder verschlüsselt werden. Hinzu kommen die Benutzer- und Gruppenspezifischen Zugriffsbeschränkungen, die sogar noch leistungsfähiger sind, als bei Linux-Systemen, weil man einer Datei explizit sagen kann, welche Gruppe und welcher Benutzer wie auf sie zugreifen kann. Wie bei Linux-Systemen können NTFS-Partitionen auch in den Verzeichnisbaum gemountet werden (erscheinen dann nicht als Laufwerk), aber dies ist, soweit ich informiert bin, statisch und lässt sich, wenn überhaupt, nur sehr schwer ändern. NTFS neigt leider auch zur Fragmentierung und das Defragmentierungsprogramm, welches bei WindowsXP beiliegt behebt den Zustand zwar, aber nicht mehr so effizient, wie sein Vorgänger bei Windows 9x. Es entstehen relativ kleine Lücken zwischen den Datenblöcken, wodurch im zukünftigen Betrieb die Fragmentierung beschleunigt wird. Hierfür gibt es allerdings von Drittherstellern bessere Tools, wie zum Beispiel das Defragmentierungsprogramm, der Norton-Utilities.

Linux-User können zwischen mehreren wirklich guten Dateisystemen wählen. Ich werde jetzt hier nicht alle erklären, aber ich werde kurz auf die, meiner Meinung nach, wichtigsten eingehen.
Auch wenn ReiserFS mitlerweile von einigen Distributionen als Standard verwendet wird, möchte ich mit Ext2 bzw. Ext3 beginnen. Ext2 kann man mit dem FAT-System von Windows vergleichen, da es nicht über ein Journal verfügt. Allerdings unterliegt es nicht den Grenzen von FAT. Je nach Inode- (Block-)Größe (1KB bis 4KB) sind auf PCs Partitionsgrößen von 2TB bis 16 TB möglich und Dateien dürfen maximal 16 GB bis 2 TB groß sein. Das Ext3-System erweitert Ext2 um die Journaling-Funktion, und wird deswegen neben ReiserFS of als Dateisystem für Linux verwendet. Beide Ext-Systeme sind so konzipiert, das sie sehr schwer fragmentieren, und selbst bei einer Fragmentierung der Schreib-Lesekopf sich effizienter bewegt, als bei den Windows-Systemen, was nicht nur die Geschwindigkeit erhöht, sondern auch die Platte leiser laufen lässt (was eine persönliche Beobachtung von mir ist). Bemerkenswert ist, das Ext3-Dateisysteme, wenn das Journal sauber ist, auch als Ext2 gemountet werden können, ohne, dass die Datenintegrität verloren geht. Das ist z.B. praktisch, wenn man bei einem Kernelwechsel den Ext3-Support vergessen hat.
ReiserFS verwendet zur Speicherung von Dateien anstatt Tabellen, Bäume, die im Endeffekt mit der Verzeichnisstruktur übereinstimmen. Der Dateizugriff erfolgt, vor allem bei kleineren Dateien, sehr viel schneller, als bei den Ext-Systemen.
Zu erwähnen wären da noch XFS und JFS, die beide vorzugsweise in Server-Systemen verwendung finden. Ich habe beide nicht getestet und kann deswegen nur sehr wenig darüber sagen. JFS ist ein sehr schnelles Dateisystem, was vor allem daran liegt, das alle Datenträger zugriffe so spät wie möglich erfolgen und alles gecached wird. Das hat allerdings den Nachteil, das bei einem Stromausfall mehr Daten verloren gehen, als beispielsweise bei ReiserFS.
Zu XFS kann ich noch weniger sagen, außer, dass es die höchste Partitionsgröße, der hier vorgestellten Dateisysteme bietet (18 Exabyte) und sehr robust sein soll. So wie es sich anhört ist es für den normalen Anwender etwas "overpowered", obwohl mich für diese Aussage sicher einige Leute hassen werden ;-)
Einige Konzepte vereinen alle Linux-Dateisysteme in sich und die werde ich jetzt zum Schluß noch vorstellen.
Alle Systeme bieten die Unix-typischen Nutzerrechte. Jede Datei hat für den Benutzer, die Gruppe und für alle anderen die Attribute "lesen", "schreiben" und "ausführen". Jede Datei hat einen Besitzer und wird einer Gruppe zugeordnet, wobei beides änderbar ist. Diese Attribute können alle vom Besitzer der Datei oder vom superuser (root) manipuliert werden. Verzeichnisse besitzen die selben Attribute, wobei sie hier etwas anders zu verstehen sind. "Ausführbar" bedeutet, dass man in dieses Verzeichnis wechseln darf, "lesen" bedeutet, dass man sich den Inhalt auflisten lassen darf und "schreiben", dass man eigene Dateien hinzufügen darf. Mit diesen Mitteln lassen sich recht komplexe Zugriffs-Strukturen erzeugen, die denen von Windows (mit NTFS) allerdings etwas unterlegen sind, wobei sie einfacher zu verstehen und umzusetzen sind.
Der größte Vorteil gegenüber der Windows-Systeme ist das Konzept der Links. Man unterscheidet zwei Arten von Links, die Softlinks und die Hardlinks. Hardlinks sind zusätzliche einträge im Dateisystem und können daher nur auf der selben Partition existieren. Streng genommen ist der einzige Eintrag einer Datei im System auch ein Hardlink. Eine Datei wird erst dann gelöscht (der belegte speicher freigegeben), wenn der letzte Eintrag (Hardlink) entfernt wurde. Softlinks sind da etwas flexibler, weil sie Partitionsübergreifend erzeugt werden können. Sie haben aber keinerlei Einfluß auf die original-Datei. Man kann sie in etwa mit den Verknüpfungen bei Windows vergleichen. Anders als bei Windows werden sie aber als Vollwertige Dateien bzw. Verzeichnisse betrachtet und können den Verzeichnisbaum dynamischer gestalten (z.B. ein symbolischer Link im eigenen Home-Verzeichnis auf /mnt). Löscht man einen symbolischen Link, wird nur der Link gelöscht, und die Datei bzw. das Verzeichnis bleibt unberührt. Löscht man allerdings die Datei, zeigt der Link immer noch auf sie und wird somit ungültig, aber er kann nicht automatisch gelöscht werden, da in einer Datei nicht gespeichert wird, ob und wo Softlinks auf sie existieren.
Zusammenfassend kann gesagt werden, dass Linux-User (mal wieder) die größere und vor allem bessere Auswahl haben. Windows-User sollten nur dann ein FAT32-System wählen, wenn sie Daten mit einem Linux-System tauschen wollen. Linux kann zwar NTFS lesen, aber der Schreibzugriff sollte mit Vorsicht genossen werden. Mit FAT hat Linux keine Probleme.
Ich arbeite sowohl mit Ext3, als auch mit ReiserFS. Wie genau meine Partitionierung aussieht, werde ich in einem anderen Artikel genauer beschreiben.

1 Kommentar:

Anonym hat gesagt…

Tolle Beschreibung und sehr hilfreich. Geschwindigkeitsverlgleich zwischen FAT/EXT2 und NTFS/EXT3 waere nicht interessant gewesen.