Bitte warten
Bitte installieren Sie den Flash Player, wenn kein E-Book erscheint.
Autor: Christoph Berlin
Fach: Informatik - Angewandte Informatik
Details
Institution/Hochschule: Universität Ulm
Tags: linux ext2 extended filesystem dateisystem vfs
Jahr: 2002
Seiten: 18
Sprache: Deutsch
Dateigröße: 238 KB
ISBN (E-Book): 978-3-640-05235-6
Volltext (computergeneriert)
Pro Seminar Linux
Sommersemester 2002
Thema: Dateisysteme unter Linux
Christoph Berlin
Inhaltverzeichnis
Vorwort 3
VFS Virtual File System 4
interessantere Dateisysteme 5
Das EXT2 Dateisystem 6
Das Blocksystem die grundlegende Struktur eins UNIX Dateisystems 6
Der Bootblock 7
I-Nodes 7
Optimierungen im Linux-Dateisystem EXT2 9
Warum Gruppen? 10
EXT2 Umgang mit dem Dateisystem 12
Dateinamen 12
Zugriffsdatum 12
Eigentümer 12
Gruppenzugehörigkeit 12
Anzahl der Dateinamen 13
Zugriffsmodus und Dateiart 13
Das Mounten von Dateisystemen 13
Die Überprüfung beim Systemstart 14
Dateiarten unter Unix 14
Reguläre Dateien 14
Symbolische Links 15
Verzeichnisse 15
Blockorientierte Geräte 15
Zeichenorientierte Geräte 15
Schlusswort 16
Quellen: 17
2
Vorwort
Ein Dateisystem eignet sich dafür, die Aufnahme von Dateien auf Speichern (zum Beispiel
Festplatten, Disketten oder CD-ROMs) zu ermöglichen. Das System stellt ein gemeinsames
Interface für alle Dateisystemtypen bereit, mit denen es arbeiten kann. Unter Linux gehören
das Second Extended Filesystem (oder
ext2fs
) dazu, unter dem man Linux-Dateien ablegen
kann. Die Anforderungen der Einfachheit, der Sicherheit und der Erweiterbarkeit stehen im
Vordergrund und dadurch eignet sich nicht jedes Dateisystem zum Standard. Das Extended
Filesystem 2 hat sich in den letzten Jahren dank der Unterstützung dieser Eigenschaften zum
Standard durchgesetzt. Der Aufbau, die Funktionsweise und die Schnittstelle zum
Betriebssystem (VFS) werden in dieser Ausarbeitung dargestellt.
3
VFS Virtual File System
Ein großer Vorteil des Linux-Dateisystems, gegenüber anderen Betriebssystemen, ist es, dass
viele verschiedene Dateisysteme unterstützt werden. Der Linux Kernel ist so modular
aufgebaut, dass es, ab der Version 1.1.8, möglich ist, neue Dateisysteme zur Laufzeit
einzubinden.
Die Dateisysteme, wie das EXT2, werden von dem Virtual Filesystem Switch (VFS)
verwaltet.
Das VFS dient als Schnittstelle zwischen den speziellen Dateisystemen und den zugreifenden
Prozessen. Innerhalb des virtuellen Dateisystems werden die Systemaufrufe der
Applikationen an das eigentliche Dateisystem weitergeleitet.
Die Idee, die dem
virtual file system
(VFS) zugrunde liegt, besteht darin,
dateisystemunabhängige Datenstrukturen zur Repräsentation von Dateisystemtypen,
Superblöcken, Inodes und Dateien zu schaffen.
Jede der Datenstrukturen der VFS-Schicht enthält einen Zeiger auf eine Struktur, die nur aus
Funktionszeigern besteht. Diese Funktionszeiger definieren den dateisystemspezifischen Satz
von Operationen, die auf der betreffenden Datenstruktur anwendbar sind. Das VFS enthält
den allgemeinen Code, der mit Superblöcken, Inodes und Dateien umgeht. Wann immer in
diesem Kontext dateisystemspezifische Operationen notwendig sind, wird über die mit der
Datenstruktur assoziierten Funktionszeiger die zugehörige spezialisierte Funktion aufgerufen.
Wenn dem Kernel ein Dateisystemtyp bekannt ist, kann ein Dateisystem dieses Typs aktiviert
werden, indem sein Superblock mit Hilfe der durch den Funktionszeiger read_super
bezeichneten Funktion eingelesen wird. Das Ergebnis dieses Funktionsaufrufes ist ein
initialisierter Superblock, der neben typunabhängigen Informationen auch die für diesen
Dateisystemtyp spezifischen Informationen enthält. Linux verwaltet die Superblöcke aller
angemeldeten Dateisysteme unabhängig von ihrem Typ in einem Feld super_block. Der
Dateisystemtyp eines Superblocks ist über den in ihm enthaltenen Rückwärtsverweis s_type
leicht feststellbar. Ein Dateisystem kann deaktiviert werden, indem man über den Zeiger
put_super die spezifische Deaktivierungsfunktion aufruft.
Durch diese Schicht zwischen den Anwendungen und Dateisystem ist es also möglich, mit
einem Befehlssatz alle vorhandenen Systeme universell anzusprechen und mit ihnen
individuell zu arbeiten
Beispiel: rm, cp, mkdir und andere Befehle sind immer einsetzbar und werden in die
typabhängigen Funktionen übersetzt.
Um ein neues Dateisystem dem VFS bekannt zu machen, muss dieses mit der Funktion
register_filesystem()
hinzugefügt werden. Diese Funktion muss mit den entsprechenden
Parametern, von der Initialisierungsroutine des neuen Filesystems aufgerufen werden.
Die Strukturen des neuen FS werden in einer einfach verketteten Liste abgelegt.
4
Einige der interessanteren Dateisysteme fasst die folgende Tabelle zusammen:
·
bfs
UnixWare Boot Filesystem
·
ext
Der Vorgänger des ext2, kaum mehr in Gebrauch
·
ext2
Das Standarddateisystem von Linux
·
ext3
Weiterentwicklung von ext2 mit zusätzlichen Funktionen eines Journaling File
Systems, allerdings ist die Entwicklung noch nicht abgeschlossen
·
iso9660
Alle CD-ROMs speichern ihre Daten unter diesem Format
·
hpfs
OS-2 (nur lesend) loopback Mounten einer einzelnen Datei als Dateisystem
·
minix
Minix ist der eigentliche Vorgänger von Linux, sein Dateisystem wird gern
noch für (Installations-) Disketten eingesetzt
·
msdos
DOS, wichtig für den Zugriff auf DOS-formatierte Disketten
·
ncpfs
Novell Netware
·
nfs
Network File System
·
ntfs
WindowsNT, schreiben ist auf dieses Dateisystem zwar möglich, jedoch kann
dies leicht zu irreparablen Schäden führen
·
ramdisk
Mounten eines Bereichs des Hauptspeichers als Dateisystem
·
SMB
(Server Message Block) NT, Windows für Workgroups; zum Zugriff auf von
einem Windows-Rechner freigegebene Verzeichnisse
·
swap
Swap-Partitionen oder -Dateien
·
SystemV
Verschiedene Unixe
·
proc
Prozessverwaltung
·
reiserfs
Eines der ersten Journaling File Systeme für Linux
·
umsdos
DOS-Dateisystem unter Linux verwenden, hier wird vor allem ein Mapping
der unterschiedlichen Dateinamensformate und -rechte vorgenommen
·
vfat
Windows95, sowohl in der 16 bit als auch 32 bit Variante
5
Das EXT2 Dateisystem
Das Extended Filesystem gilt als der Standard in der Linuxwelt. Durch seine Stabilität und
Anpassungsfähigkeit eignet es sich für kleine Heimcomputer wie auch für große
Serversysteme. Zum heutigen Zeitpunkt mit dem verfügbaren Kernel 2.4.x kann man im ext2,
so die Abkürzung des Extended Filesystem 2, eine maximale Dateigröße von 4Gigabyte
erreichen. Wie sich diese Größe zusammensetzt, lässt sich später in Verbindung mit der
Struktur das Dateisystem einfach erklären. Weitere Möglichkeiten, das System unanfällig
gegen Ausfälle zu machen, ist z.B. die Reservierung von Speicherplatz zur Vermeindung
eines ,,Overflow". D.h. es wird eine festgelegte Größe von Speicherplatz nicht zur Verfügung
gestellt, damit im Fall, dass sehr viele Daten geschrieben werden und das Speichermedium
ausgelastet ist, kein Systemausfall passieren kann.
Das Blocksystem die grundlegende Struktur eins UNIX Dateisystems
Bootblock
Superblock
Inodeblock
Datenblock
Der Superblock
Ein Unix-Dateisystem besitzt einen so genannten Superblock, einen Block, der die
grundlegenden Informationen zum Dateisystem selbst enthält. Einige wichtige Daten des
Superblocks sind:
· Die Größe des Dateisystems in Blöcken
· Die Größe der Blöcke in Bytes
· Zeiger auf den ersten freien Datenblock
· Zeiger auf erste freie I-Node
· Verschiedene Statusbits (Flags)
Auch hier unterscheiden sich die verschiedenen Unix-Dateisysteme voneinander, was an
zusätzlichen Informationen im Superblock gespeichert ist. Das wesentliche an dieser Struktur
ist, dass der Superblock beim Mounten eines Dateisystems in den Speicher gelesen wird und
alle Veränderungen dort vorgenommen werden. Es werden dann die Daten sporadisch
gechached und beim Unmounten des Dateisystems werden diese Veränderungen physikalisch
auf der Platte gespeichert. Das erklärt auch, dass es nach einem Systemabsturz zu
Inkonsistenzen in einem Dateisystem kommen kann.
6
Der Bootblock
Noch vor dem Superblock steht der Bootblock auf der Festplatte. Der erste Block jeder
Partition kann einen Bootloader (zum Start eines Betriebssystems) enthalten, er wird beim
Einschalten des Rechners vom BIOS gelesen. Dieser Block existiert bei allen Dateisystemen.
(siehe Referat ,,Bootkonzepte")
Inodes
Unix-Dateisysteme sind nach einem anderen Prinzip aufgebaut, als etwa DOS-FAT-Systeme.
Es gibt zwar viele verschiedene Dateisysteme unter Unix, gemeinsam haben sie jedoch eben
das Prinzip der Funktionsweise. Und dieses Prinzip beruht auf den so genannten Inodes.
Jede Partition enthält ein Dateisystem, dieses Dateisystem wiederum enthält eine Art
Inhaltsverzeichnis, die
I-Node-Liste
. Die einzelnen Elemente der
I-Node-Liste
sind die
Dateiköpfe, also die Orte wo Dateiattribute, Größe usw. gespeichert sind. Diese Dateiköpfe
werden
Inodes
genannt.
Wie unter DOS auch, so verwalten Unix-Dateisysteme nicht zwangsläufig die Sektoren einer
Festplattenpartition sondern Zuordnungseinheiten, die hier aber nicht Cluster sondern
Block
heißen. Beim Anlegen eines Dateisystems kann die Blockgröße angegeben werden, die auf
dieser Partition verwendet werden soll. Typische Blockgrößen sind 512, 1024 oder 2048 Byte.
Voreingestellt sind meist 1024 Byte pro Block.
Anders als unter DOS werden diese Blöcke aber nicht in einer Tabelle (FAT)
zusammengefasst, sondern die Inodes enthalten selbst die Verweise auf diese Blöcke. Das
Format eines typischen Inodes sieht etwa so aus:
Typ und Zugriffsrechte
Anzahl der Hardlinks
Benutzernummer (UID)
Gruppennummer (GID)
Größe der Datei in Bytes
Datum der letzten Veränderung (mtime)
Datum der letzten Statusänderung (ctime)
Datum des letzten Zugriffs (atime)
Adresse von Datenblock 0
...
Adresse von Datenblock 12
Adresse des ersten Indirektionsblocks
Adresse des Zweifach-Indirektionsblocks
Adresse des Dreifach Indirektionsblocks
7
Nach den Datumsfeldern stehen zwölf Felder, die direkt die Adressen der Datenblöcke
beinhalten können. Benutzt die Datei weniger Platz sind die Felder einfach leer.
Ist die Datei größer als 12 Blöcke (also größer als 13*1024 oder 13*2048 oder 13*512), so
enthält das nächste Feld der I-Node eine Adresse eines Blockes, der wiederum bis zu 128
Adressen anderer Blöcke enthalten kann. Sollte das auch noch nicht ausreichen, so enthält der
nächste I-Node-Eintrag eine Adresse eines Zweifach-Indirektionsblocks, eines Blocks, der bis
zu 128 Adressen auf Blöcke mit wiederum 128 Adressen enthält. Und falls auch das noch zu
wenig sein sollte, so enthält der nächste Eintrag die Adresse eines Blockes, der wiederum 128
Adressen von Zweifach-Indirektionsblöcken enthalten kann. Mit dieser Möglichkeit der
3fach-Indizierung sind also, wie oben besprochen, Dateigrößen von bis zu 4Gigabyte (je nach
Blockgröße von 512, 1024, 2048 oder 4096 Byte) möglich.
Datablock
Datablock
Datablock
Rechte
Datablock
Datablock
Besitzer
Datablock
Größe
Zeitstempel
Datablock
Indexpointer
Indirekter
Datablock
Indexpointer
2.Indirekter
Indexpointer
3.Indirekter
Indexpointer
Zu beachten ist, dass der Dateiname nicht in der I-Node auftaucht. Die I-Node ist sozusagen
nur die Referenz auf die Datenblöcke, die eine Datei benutzt und der Ort, an dem die
Attribute wie Eigentümer, Gruppe, Größe und Zugriffsdaten gespeichert sind.
Je nach verwendetem Dateisystem liegt das Wurzelverzeichnis auf einer festgelegten I-Node,
meist 1 oder 2. Grundsätzlich ist es aber dem Dateisystem bekannt, welche I-Node das
Wurzelverzeichnis enthält.
8
Jedes Verzeichnis (Ordner, Directory) - auch das Wurzelverzeichnis ist unter Unix nichts
anderes als eine Datei, deren Inhalt einfach die Dateinamen der enthaltenen Dateien samt
ihren I-Node-Nummern enthält. Damit wird auch klar, warum Unix kein Problem mit Hard-
Links hat, also mit Dateien mit mehreren Namen. Es handelt sich ja nur um verschiedene
Namenseinträge, die eben dieselbe I-Node-Nummer besitzen.
Das Standard Linux-Dateisystem ext2 hat zusätzlich zu den gezeigten I-Node Einträgen noch
verschiedene andere, die das System in mancherlei Hinsicht noch leistungsfähiger macht. Für
den Anwender ergeben sich dadurch keinerlei Veränderungen, in der Praxis sind aber einige
positive Effekte feststellbar.
Optimierungen im Linux-Dateisystem EXT2
Bootblock
Gruppe0
Gruppe1
...Gruppe n
Superblock
Gruppen-
Block Inode Inodetabellen
Datenblock
deskriptoren
Bitmap
Scheinbar besitzt das ext2 keinerlei Ähnlichkeit mit herkömmlichen Unix-Dateisystemen.
Abgesehen vom Bootblock, aber über diesen verfügt bekanntlich jedes Dateisystem. Jedoch
erscheinen bei einem direkten Vergleich beider Strukturen n Gruppen mit dem
ursprünglichen Unix-Blocksystem. Diese Gruppen beinhalteten die Struktur aller weiteren
Blöcke, wie Super,- Inode- und Datenblock. Zusätzlich existieren aber noch weitere Blöcke
mit den Bezeichnungen: Gruppendeskriptor und Inode Bitmap Block.
Superblock
Die Superblöcke der einzelnen Gruppen sind exakte Kopien des
Superblockes aus Gruppe 0. Er enthält in einer 1024 Bytes großen
Struktur alle wichtigen Informationen zum Dateisystem, wie die
Anzahl von Inodes und Datenblöcken (gesamt/frei), Blockgröße der
Datenblöcke (ein Inode ist immer 128 Byte groß), Zeitpunkt des
letzten Mountens, Zähler der Anzahl der Mountvorgänge, Status,
Zeit der letzten Überprüfung usw.
9
Gruppendeskriptoren
Hier wurde zusätzliche Sicherheit eingebaut. Die Deskriptoren
enthalten alle notwendigen Informationen zu allen anderen Gruppen,
um diese nach einem Defekt restaurieren zu können. Sind in einer
Gruppe also die Verwaltungsinformationen (Superblock,
Gruppendeskriptoren oder Bitmaps) zerstört worden, können diese
repariert werden und die Daten sind weiterhin verfügbar.
Bitmaps
Sie dienen dem schnellen Auffinden von freien Inode/Datenblöcken.
Ihre Größe entspricht der Datenblockgröße und beschränkt die
Anzahl der Datenblöcke einer Gruppe (bei einer Blockgröße von
4096 Bytes sind es somit 32768).
Inodetabelle /
Wie oben.
Datenblöcke
Warum Gruppen?
Der entscheidende Performanceverlust auf heutigen Festplatten ist Bewegung der Schreib-
Lese-Köpfe. Die gewählte Aufteilung stellt nun sicher, dass die Datenblöcke relativ nahe bei
den zugehörigen Inodes liegen. Also muss der Schreib-Lese-Kopf nicht ständig bewegt über
große Entfernungen bewegt werden. Darüber hinaus wird ebenso versucht, die Inodes der
Dateien nahe dem zugehörigen Verzeichnis-Inode zu halten.
Löcher in Dateien
Ist der Verweis auf einen Datenblock null, obwohl der referenzierte Block einen Teil des
Dateiinhaltes repräsentieren müsste, so handelt es sich dabei um ein so genanntes Loch in der
Datei. Beim lesen dieses Bereiches muss für den gesamten Block null zurückgegeben
werden. Auf diese Weise ist möglich, dass große Dateien, die in weiten Bereichen nur Nullen
enthalten, physisch nur wenige oder sogar keine Datenblöcke benötigen. Die tatsächliche Zahl
der von dem Inodes benutzten Datenblöcke kann also gegenüber der scheinbaren Dateigröße
variieren.
Blockallokierung
Neue Datenblöcke werden immer in der Nähe des Vorgängerblocks gesucht. Wurde für den
Inodes noch kein Datenblock allokiert, so sucht man in der Nähe des InodeTable-Blocks der
den Inode enthält. Sollte der Vorgängerblock ein Loch sein, so sucht man solange den
Vorgänger des Vorgängers bis man einen Vorgängerblock gefunden hat, oder bis es keinen
mehr gibt. Im Allgemeinen werden 32 Blöcke vor und hinter dem Zielblock durchsucht.
Wurde dort kein freier Block gefunden versucht man zumindest einen freien Block in
derselben Blockgruppe zu allokieren. Ist auch dies nicht möglich, so wird in allen anderen
Blockgruppen gesucht.
10
Preallokation
Wurde ein freier Block gefunden, so kann man mehrere (i.a. bis zu acht) der folgenden
Blöcke reservieren, sofern diese frei sind. Auf diese Weise liegen die Datenblöcke einer Datei
in relativer Nähe zueinander. Wird die Datei geschlossen, werden die unbenutzten
reservierten Blöcke wieder freigegeben.
11
EXT2 Umgang mit dem Dateisystem
Dateinamen
Die ersten wesentlichen Unterschiede sind schon im Dateinamen erkennbar. Die maximale
Länge eines Unix-Dateinamens ist auf 256 Zeichen beschränkt. Ein wesentlicher Unterschied
zu DOS/Windows Dateinamen ist die Tatsache, dass unter Unix streng zwischen Groß- und
Kleinschreibung unterschieden wird. Das heißt die Dateinamen
Datei1.txt
datei1.txt
DATEI1.TXT
bezeichnen drei unterschiedliche Dateien.
Zugriffsdatum
Im Gegensatz zu DOS kennt Unix nicht nur ein Datum pro Datei, sondern drei. Das erste
bezeichnet den letzten schreibenden Zugriff, also das Datum aus dem ersichtlich wird, wann
die Datei das letzte Mal verändert wurde. Dieses Datum wird mtime (Modification-Time)
genannt.
Das zweite Datum bezeichnet den letzten Zugriff überhaupt, also auch lesende Zugriffe
werden hier bemerkt. Dieses Datum wird atime (Access-Time) genannt.
Das dritte Datum registriert schließlich die letzte Statusänderung, also z.B. Wechsel der
Zugriffsrechte, des Eigentümers, der Gruppe usw. Dieses Datum heißt ctime (Change-Time)
Natürlich kann dieses Datum nur funktionieren, wenn der Datenträger nicht als ReadOnly
gemountet ist. Auf CD-Roms etwa kann es logischerweise nicht funktionieren.
Eigentümer
Jede Datei gehört einem User. In der Regel sind die Eigentümer die User, die eine Datei
angelegt haben. Die Systemdateien gehören meist dem Systemverwalter oder bestimmten
Verwaltungsusern. Im Dateisystem ist nicht der Username sondern die numerische UserID
gespeichert.
Gruppenzugehörigkeit
Jede Datei gehört genau einer Gruppe an. Diese Gruppenzugehörigkeit kann beliebig variiert
werden. Es ist nicht zwangsweise nötig, dass der Eigentümer einer Datei auch Mitglied der
Gruppe sein muss, auch wenn es in der Praxis meist der Fall ist. Die Gruppenzugehörigkeit
spielt eine große Rolle bei der Frage der Zugriffsrechte auf eine Datei.
12
Anzahl der Dateinamen
Unter Unix können Dateien mehrere Dateinamen haben, so genannte Hard-Links.
Zugriffsmodus und Dateiart
Jede Datei hat einen so genannten Zugriffsmodus, der beschreibt, um was für eine Art Datei
es sich handelt, wer was damit anstellen darf. Dazu wird die 16 Bit-Zahl, die diese
Zusammenhänge darstellt, in fünf Werte (einmal 4 Bit für den Dateityp, viermal 3 Bit für die
Rechte) aufgeteilt.
Die wichtigsten Werte davon werden durch das ls -l Kommando dargestellt. Dabei werden
folgende Abkürzungen benutzt:
Numerisch ausgedrückt könnten wir die Rechte folgendermaßen darstellen:
rw- = 4+2+0 = 6
r-- = 4+0+0 = 4
--- = 0+0+0 = 0
Der numerische Wert des gesamten Zugriffsmodus in Oktalziffern ist also 640.
Für Programme gibt es noch eine vierte Angabe, die sich auch mit den Oktalziffern 1,2 und 4
bzw. aus einer Kombination aus diesen Ziffern ergibt. Diese vierte Angabe wird VOR den
drei üblichen Angaben gemacht, streng genommen hätte also die Datei aus dem letzten
Beispiel die numerische Darstellung 0640. Diese weitere Angabe wird später, beim
Usersystem genauer beschrieben.
Das Mounten von Dateisystemen
Im Gegensatz zu anderen Betriebssystemen fasst ein Unix-System grundsätzlich alle
Partitionen und angeschlossenen Laufwerke zu einem Dateibaum zusammen. Dadurch
entfallen die lästigen Laufwerksbuchstaben, die in größeren Netzwerken schnell an die
Grenze der Übersichtlichkeit führen.
Dieses Prinzip erfordert logischerweise eine besondere Partition, nämlich die, die die
eigentliche Wurzel des ganzen großen Dateibaums enthält. Diese Partition wird als
Wurzelpartition (root-partition) bezeichnet und beim booten ins Verzeichnis / gemountet. Alle
weiteren Partitionen werden dann in Verzeichnisse gemountet, die ihrerseits entweder auf der
Wurzelpartition oder auf schon gemounteten anderen Partitionen liegen. Die Wurzelpartition
muss zwingend einige Verzeichnisse enthalten, die nicht auf anderen Partitionen liegen
dürfen. Ein simples Beispiel ist das Verzeichnis, das die Bauanleitung enthält, wohin die
anderen Partitionen gemountet werden sollen (/etc) oder das Verzeichnis, dass den mount-
Befehl selber enthält (/bin).
13
Die Überprüfung beim Systemstart
Jedes Mal, wenn das System neu gebootet wird, werden alle Dateisysteme überprüft. In der
Regel wird aber nur überprüft, ob sie sauber sind - nur wenn nicht wird die eigentliche
Überprüfung gestartet. Das funktioniert aber nur bei der Verwendung des Ext2-
Dateisystemtyps.
Dieser Typ hat im Superblock ein sogenanntes Valid-Flag (manchmal auch Clean-Flag
genannt). Jedes Mal, wenn ein Dateisystem gemountet wird, wird dieses Flag auf 0 gesetzt,
erst beim ordentlichen Abhängen durch umount wird es wieder auf 1 gesetzt. Beim
Systemstart überprüft das fsck-Programm also zunächst, ob dieses Flag auf 1 steht, wenn ja,
so gilt das Dateisystem als sauber und wird nicht weiter überprüft (es sei denn die -f Option
ist dem fsck.ext2 Programm mitgegeben).
Falls das System vorher nicht sauber heruntergefahren wurde, die Dateisysteme also das
Clean-Flag nicht setzen konnten, erkennt das fsck Programm dies und überprüft die
Dateisysteme.
Zusätzlich enthält der Superblock einer ext2-Partition noch einen Zähler, der beschreibt, wie
oft das Dateisystem gemountet wurde, seit es das letzte Mal überprüft wurde. Nach x
(variabel) erfolgten Mounts wird das Dateisystem überprüft, auch wenn es das Clean-Flag
gesetzt hat.
Dateiarten unter Unix
Unter Unix werden weitaus mehr Dinge in Dateiform verwaltet, als z.B. unter DOS/Windows.
Neben den regulären Dateien (regular files) gibt es noch verschiedene weitere Konstrukte, die
genauso verwaltet werden. Grundsätzlich unterscheidet Unix die folgenden Dateiarten
· Reguläre Dateien (regular file)
· Verzeichnisse (directory)
· Symbolische Links (symbolic link)
· Blockorientierte Geräte (block device)
· Zeichenorientierte Geräte (char device)
· Feststehende Programmverbindungen (named pipe)
· Netzwerk-Kommunikationsendpunkte (socket)
Reguläre Dateien
Reguläre Dateien sind alle "normalen Dateien", also das, was wir auch unter DOS als Dateien
kennen. Sie haben einen Inhalt, der als Bitfolge auf einem Datenträger gespeichert ist, Die
wesentlichen Eigenschaften sind schon im letzten Kapitel besprochen worden. Der einzige
Punkt, der noch nicht dargestellt wurde ist die Frage, warum jede Datei die Angabe besitzt,
wie viele Dateinamen sie besitzt.
Unter Unix existiert für Dateien so genannte Links, einer davon, der symbolische Link, wird
gleich im Anschluss besprochen. Unter diesen Links ist etwas Ähnliches zu verstehen, wie
unter den Verknüpfungen von Windows 95/98. Die Tatsache, dass Dateien mehrere Namen
besitzen können wurde unter Unix schon sehr früh eingeführt, es handelt sich hierbei
14
eigentlich um mehrere Dateinamen im Inhaltsverzeichnis einer Platte, die auf dieselben
Blöcke zeigen. Unter Unix spricht man hier von so genannten Hard-Links.
Symbolische Links
Im Gegensatz zu Hardlinks sind symbolische Links wesentlich flexibler, aber auch
fehleranfälliger. Hier handelt es sich tatsächlich um Verweise auf eine bestehende Datei, d.h.,
der symbolische Link ist in Wahrheit eine Datei, die nur den Dateinamen einer anderen Datei
enthält. Damit das System diese Datei nicht als Textdatei mißinterpretiert wird sie als
SymLink gekennzeichnet, als Dateityp steht ein l statt eines Bindestrichs.
Verzeichnisse
Verzeichnisse sind unter Unix auch nur Dateien, die allerdings eben den Typ d statt
Bindestrich haben um sie von regulären Dateien zu unterscheiden.
Blockorientierte Geräte
Unix betrachtet auch jedes Stück Hardware als Datei. Dabei wird zwischen block- und
zeichenorientierten Geräten unterschieden. Als blockorientiertes Gerät gilt jedes Gerät, das
nicht einzelne Zeichen verarbeitet, sondern ganze Blocks. Dabei handelt es sich z.B.
typischerweise um Festplatten, Disketten und andere Laufwerke. Diese Laufwerke werden
dann als Dateien verwaltet, für den Anwender bleibt der Unterschied zwischen Gerät und
Datei nahezu transparent.
Die Gerätedateien (engl. special files), sowohl die block- wie auch die zeichenorientierten
befinden sich im Verzeichnis /dev. Sie belegen physikalisch keinen Platz auf der Festplatte,
sind also selbst nicht die Gerätetreiber, wie oft fälschlicherweise gedacht wird. Diese Dateien
haben eigentlich nur zwei Nummern, die die Adresse des Gerätetreibers im Kernel
symbolisieren. Die erste Nummer, auch major number genannt zeigt, um welchen
Gerätetreiber es sich handelt, die zweite (minor number) beschreibt, das wievielte Gerät es ist,
das diesen Treiber benutzt.
Zeichenorientierte Geräte
Grundsätzlich trifft alles, was wir für die Blockorientierten Geräte oben gesagt haben auch auf
die Zeichenorientierten Geräte zu, nur dass es sich bei ihnen um Geräte handelt, die nicht
Blockweise angesteuert werden sondern durch einzelne Bytes. Typischerweise handelt es sich
hier um serielle oder parallele Schnittstellen, auch und gerade die Terminalleitungen (auch die
der virtuellen Terminals) aber auch etwa der Soundanschluss.
Sowohl die block- als auch die zeichenorientierten Gerätedateien werden mittels dem Befehl
mknod angelegt. Die einzige Information, die man dazu braucht ist die der Major- und
Minornummer und die Frage, ob es sich um ein block- oder zeichenorientiertes Gerät handelt.
15
Schlusswort
Zum heutigen Zeitpunkt arbeiten sehr viele Entwickler in der Linux-Gemeinde an
Weiter- und Neuentwicklungen der Dateisysteme. Journaling-Eigenschaften bei
EXT3, Verschlüsselungsmöglichkeiten zur Sicherstellung sensibler Daten und die
Restauration gelöschter Daten sind nur einige Beispiele für innovative Gedanken.
Manche von ihnen sind schon verwirklicht, manche auf dem Prüfstand.
Das EXT2 Dateisystem zählt aber immer noch zu den stabilsten Systemen und wird
daher immer wieder eingesetzt...
16
Quellen:
Linux-Kernel-Programmierung 1. Aufl. 1994 Addison-Wesley
Michael Beck
Linux Unix Shells
3. Aufl. 1999 Addison-Wesley
Helmut Herold
www.linuxfibel.de
http://www.linux-magazin.de/ausgabe/2000/04/Ext2fs/ext2fs.html
http://home.fhtw-berlin.de/~s0323090/
das große UNIX-Buch
5. Aufl.
DATA Becker Dreggel-Kappel
17
Kommentare
Dieser Text kann über folgende URL aufgerufen und zitiert werden: