Copyright © 1995 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux - Wegweiser zur Installation & Konfiguration", dann klicken Sie hier.


Kapitel 4

Mit Dateisystemen arbeiten

Auf UNIX-Sytemen ist ein Dateisystem ein Gerät (device), das für die Aufnahme von Dateien formatiert wurde (z.B. Festplatten, Disketten oder CD-ROMs). Dateisysteme finden Sie auf diesen Geräten ebenso wie auf anderen, die den wahlfreien Zugriff erlauben. (Die wichtigste Ausnahme sind Streamer, auf die nur sequentiell zugegriffen werden kann, und die deshalb per se kein Dateisystem enthalten können.)

Das genaue Format und die Methode der Speicherung von Dateien sind nicht wichtig; 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 Sie wahrscheinlich Ihre Linux-Dateien ablegen; das MS-DOS-Dateisystem, mit dessen Hilfe Sie auf Dateien in DOS-Partitionen und auf DOS-formatierten Floppies zugreifen; außerdem verschiedene andere wie z.B. das ISO-9660-Dateisystem für CD-ROMs.

Jeder dieser Dateisystemtypen benutzt ein anderes Format für die Speicherung von Daten. Wenn Sie allerdings unter Linux auf ein beliebiges Dateisystem zugreifen, wird das System Ihnen die Daten in der vertrauten Umgebung von Verzeichnishierarchien zusammen mit den Angaben zu Eigner und Gruppe, den Berechtigungsbits sowie allen anderen bekannten Merkmalen präsentieren.

Tatsächlich werden die Informationen zu Eignerschaft, Berechtigungen usw. nur von den Dateisystemen verwaltet, die für die Speicherung von Linux-Dateien vorgesehen sind. Bei solchen Dateisystemen, die diese Informationen nicht speichern, »erfinden« die Treiber, mit denen auf die Dateisysteme zugegriffen wird, diese Informationen. Das MS-DOS-Dateisystem z.B. kennt das Konzept der Eignerschaft gar nicht; deshalb werden alle Dateien so dargestellt, als ob sie root gehörten. Auf diese Weise gleichen sich die Dateisysteme oberhalb einer bestimmten Ebene, und jeder Datei werden gewisse Attribute zugeordnet. Ob das darunterliegende Dateisystem diese Attribute nutzt oder nicht, ist eine ganz andere Frage.

Als Systemverwalter müssen Sie wissen, wie Dateisysteme erzeugt werden, falls Sie Linux-Dateien auf Disketten speichern oder zusätzliche Dateisysteme auf der Festplatte einrichten wollen. Sie werden auch verschiedene Tools kennenlernen müssen, mit denen Dateisysteme im Fall von Datenverlusten geprüft und repariert werden. Außerdem müssen Sie wissen, mit welchen Befehlen und Dateien auf Floppy- oder CD-ROM-Dateisysteme zugegriffen wird.

Die Dateisystemtypen

In Tabelle 4--1 finden Sie alle Dateisystemtypen aufgelistet, die vom Linux-Kernel unterstützt werden (Stand: Ende 1994). Es werden ständig neue Typen hinzugefügt und für mehrere hier nicht aufgeführte Dateisysteme gibt es experimentelle Treiber. Im Verzeichnis /usr/src/linux/fs können Sie nachsehen, welche Typen von Dateisystemen Ihr Kernel unterstützt. Beim Kompilieren des Kernels können Sie bestimmen, welche Dateisysteme unterstützt werden sollen; lesen Sie dazu den Abschnitt » Den Kernel kompilieren « weiter oben in diesem Kapitel.

Tabelle 4-1: Die Dateisystemtypen unter Linux

 Dateisystem                  Name      Beschreibung                          
---------------------------------------------------------------------------
Second Extended-Dateisystem   ext2      Das Standard-Linux-Dateisystem        
Extended-Dateisystem          ext       Ersetzt durch  ext2 
Minix-Dateisystem             minix     Original-Minix-Dateisystem; selten    
                                        benutzt                               
Xia-Dateisystem               xia       Wie  ext2  , aber selten benutzt         
UMSDOS-Dateisystem            umsdos    Wird benutzt, um Linux in einer MS-   
                                               DOS-Partition zu installieren         
MS-DOS-Dateisystem            msdos     Für den Zugriff auf MS-DOS-Dateien    
HPFS-Dateisystem              hpfs      OS/2-Dateisystem                      
/proc-Dateisystem             proc      Liefert Zugriffsinformationen für  ps 
ISO-9660-Dateisystem          iso9660   Von den meisten CD-ROMs benutzt       
Xenix-Dateisystem             xenix     Für den Zugriff auf Xenix-Dateien     
System-V-Dateisystem          sysv      Für den Zugriff auf Dateien von       
                                        System-V-Systemen                     
Coherent-Dateisystem          coherent  Für den Zugriff auf Coherent-Dateien  
---------------------------------------------------------------------------

Jeder Dateisystemtyp hat individuelle Eigenschaften und Beschränkungen; MS-DOS z.B. erlaubt nur achtstellige Dateinamen mit einer dreistelligen Erweiterung. Sie sollten dieses Dateisystem nur für den Zugriff auf bereits existierende DOS-Partitionen oder -Disketten benutzen. Sie werden für den größten Teil der Arbeit unter Linux das Second Extended-Dateisystem benutzen, das in erster Linie für Linux entwickelt wurde. Es erlaubt Dateinamen bis einer Länge von zu 256 Stellen, Dateisysteme bis zu vier Terabytes Größe und bietet einen Haufen anderer Goodies. Frühere Linux-Systeme benutzten die inzwischen verdrängten Dateisysteme Extended und Minix. (Ursprünglich wurde aus mehreren Gründen Minix benutzt. Einerseits wurde Linux am Anfang unter Minix kompiliert. Andererseits kannte sich Linus mit Minix ziemlich gut aus und es war einfach, Minix in die frühen Original-Kernel einzubinden.) Das Xia-Dateisystem ist dem Second Extended-Dateisystem ähnlich, aber seine Weiterentwicklung ist praktisch eingestellt worden; es hat sich nie richtig durchsetzen können.

Das Dateisystem UMSDOS wird für die Installation eines Linux-Systems in einem Verzeichnis innerhalb einer bestehenden DOS-Partition benutzt. Auf diese Weise können Linux-Neulinge mit Linux experimentieren, ohne die Festplatte neu zu partitionieren. Das MS-DOS-Dateisystem dagegen wird für den direkten Zugriff auf DOS-Dateien benutzt. Das Dateisystem HPFS dient dem Zugriff auf das OS/2-Filesystem. Linux unterstützt momentan nicht den direkten Zugriff auf MS-DOS-Dateien, die mit DoubleSpace oder Stacker komprimiert wurden. Auf die unkomprimierten Teile der Dateien kann zwar zugegriffen werden, aber an die komprimierten Dateien kommt man nur mit einigen Tricks. Wer mehr darüber wissen will, sollte die aktuellsten Informationen aus der Linux HOWTO-Dokumentation beziehen.

/proc ist ein virtuelles Dateisystem, d.h., daß ihm kein Speicherplatz zugeordnet ist. Im Verzeichnis /proc finden Sie eine Reihe von »Dateien« und »Verzeichnissen«, deren Inhalt sich im Laufe der Zeit verändert. Der Kernel stellt durch das Dateisystem /proc statistische Informationen über das System und die Prozesse bereit. Wenn Sie versuchen, auf irgendeine Datei im Dateisystem /proc zuzugreifen, erkennt der Kernel dies und gibt einige Daten aus, um Ihre Leseanforderung zu erfüllen. Alle diese »Dateien» und «Verzeichnisse« existieren nicht auf der Festplatte. Sie werden vom Kernel als eine einfache Möglichkeit erzeugt, Programmen wie ps und top den Zugriff auf diese Informationen zu gewähren. (9)

Das ISO-9660-Dateisystem (früher als High Sierra Filesystem bekannt und auf anderen UNIX-Systemen mit hsfs abgekürzt) wird von den meisten CD-ROMs benutzt. Ähnlich wie unter DOS sind auch hier die Länge der Dateinamen und die Menge der Informationen, die zu jeder Datei gespeichert werden, beschränkt. Die meisten CD-ROMs kennen allerdings die Rock-Ridge-Erweiterungen zum ISO-9660-Standard, so daß der Kernel-Treiber den Dateien lange Namen, Eignerschaft und Berechtigungen zuordnen kann. Als Folge bekommen Sie beim Zugriff auf eine ISO-9660-CD-ROM unter DOS nur Dateinamen im 8.3-Format, während Sie unter Linux die »echten«, kompletten Namen erhalten.

Schließlich kennt Linux noch drei Dateisysteme, die in anderen UNIX-Systemen für PCs verwendet werden: Xenix, System V und Coherent. (Diese werden in Wirklichkeit von demselben Kernel-Treiber mit jeweils leicht geänderten Parametern bedient.) Falls Sie auf Dateisysteme stoßen, die in einem dieser Formate erzeugt wurden, können Sie auf die Dateien darin auch unter Linux zugreifen.

Dateisysteme aufsetzen

Damit Sie unter Linux auf ein beliebiges Dateisystem zugreifen können, müssen Sie es auf ein bestimmtes Verzeichnis aufsetzen (mounten). Dies läßt die Dateien in diesem Dateisystem so erscheinen, als ob sie in diesem Verzeichnis stünden, so daß Sie darauf zugreifen können.

Dies wird mit dem Befehl mount erledigt und muß in der Regel als root ausgeführt werden. (Wir werden noch sehen, daß normale Benutzer mount ausführen können, wenn der betreffende Gerätename in der Datei /etc/fstab aufgelistet ist.) Der Befehl hat folgendes Format:

mount -t typ gerät  mount-point

Der Typ ist der Name des Dateisystems, wie er in Tabelle 4--1 erscheint; das Gerät ist das physikalische Gerät, auf dem das Dateisystem existiert (der Gerätename in /dev ); und der Mount-Point (Aufsetzpunkt) ist das Verzeichnis, auf das dieses Dateisystem aufgesetzt wird. Sie müssen das Verzeichnis vor dem Aufruf von mount anlegen.

Wenn Sie z.B. ein Second Extended-Dateisystem auf /dev/hda2 haben, das Sie auf das Verzeichnis /mnt aufsetzen möchten, geben Sie folgenden Befehl ein:

mount -t ext2 /dev/hda2 /mnt

Wenn alles klappt, sollten Sie auf das Dateisystem unter /mnt zugreifen können.

Mit folgendem Befehl mounten wir ein Dateisystem, das auf einer Diskette erzeugt wurde:

mount -t msdos /dev/fd0 /mnt

Anschließend können Sie unter /mnt auf Dateien zugreifen, die auf einer DOS-formatierten Diskette stehen.

Der Befehl mount kennt viele Optionen, die Sie mit dem Schalter -o spezifizieren können. Ein Beispiel: Die Dateisysteme MS-DOS und ISO-9660 unterstützen die »automatische Konvertierung« von Textdateien im DOS-Format (die am Ende jeder Zeile die Codes CR + LF enthalten) in das UNIX-Format (bei dem am Zeilenende nur ein LF steht). Mit dem Befehl:

mount -o conv=auto -t msdos /dev/fd0 /mnt

schalten Sie diese Konvertierung bei solchen Dateien ein, deren Suffix nicht auf eine Binärdatei hinweist (wie .exe , .bin usw.).

Eine häufig benutzte Option beim Aufsetzen ist -o ro (oder, mit demselben Effekt, -r ), mit der Sie Dateisysteme im Lesemodus (read-only) aufsetzen. Alle schreibenden Zugriffe auf ein solches Dateisystem haben die Fehlermeldung »permission denied« zur Folge. Medien, die nicht beschrieben werden können (etwa CD-ROMs), müssen read-only aufgesetzt werden. Wenn Sie versuchen, eine CD-ROM ohne die Option -r zu mounten, erhalten Sie die kryptische Fehlermeldung:

mount: block device /dev/cdrom is not permitted on its filesystem

Geben Sie in diesem Fall statt dessen ein:

mount -t iso9660 -r /dev/cdrom /mnt

Dies gilt auch, wenn Sie versuchen, eine schreibgeschützte Diskette zu mounten.

In der Man-Page zu mount finden Sie alle Optionen für das Aufsetzen von Dateisystemen. Sie werden nicht alle davon sofort benutzen, aber eines Tages müssen Sie vielleicht doch auf einige davon zurückgreifen.

Das Gegenteil zum Aufsetzen eines Dateisystems ist natürlich das Absetzen (unmounting). Das Absetzen bewirkt zweierlei: Der Inhalt des Dateisystems wird aus den Systempuffern aktualisiert, und auf das Dateisystem kann nicht mehr über seinen Aufsetzpunkt zugegriffen werden. Anschließend können Sie auf diesen Mount-Point ein anderes Dateisystem aufsetzen.

Das Absetzen geschieht mit dem Befehl umount (beachten Sie, daß das »n« in der Vorsilbe von »unmount« fehlt). Ein Beispiel:

umount /dev/fd0

setzt das Dateisystem auf /dev/fd0 ab. Mit einem Befehl wie:

umount /mnt

setzen Sie ein beliebiges, auf ein bestimmtes Verzeichnis aufgesetztes Dateisystem ab.

Es ist wichtig, daß Sie Wechselmedien wie Floppies und CD-ROMs nicht aus dem Laufwerk entfernen oder gegen andere austauschen, solange sie aufgesetzt sind. Das hätte zur Folge, daß die Systeminformationen über das Gerät nicht mehr mit dem übereinstimmen, was tatsächlich vorhanden ist; dies kann unendliche Probleme bereiten. Wenn Sie eine Floppy oder CD-ROM wechseln wollen, sollten Sie das alte Medium erst absetzen, bevor Sie das neue Medium aufsetzen.

Ebenso wie bei Festplatten wird auch das Lesen und Schreiben von/auf Diskettendateisysteme(n) im Arbeitsspeicher gepuffert. Das bedeutet, daß das Laufwerk beim Lesen und Schreiben nicht sofort aktiv wird. Das System arbeitet die Ein/Ausgabe von/auf Floppies asynchron ab und führt Lese- und Schreibvorgänge nur durch, wenn es wirklich notwendig ist. Wenn Sie also eine kleine Datei auf die Diskette kopieren, und die Kontrolleuchte am Laufwerk blinkt nicht sofort auf, brauchen Sie nicht in Panik auszubrechen -- die Daten werden schließlich doch noch geschrieben. Mit dem Befehl:

sync

zwingen Sie das System, alle Puffer für das Dateisystem zu leeren, d.h., daß alle Daten in den Puffern physikalisch auf die Diskette geschrieben werden. Dasselbe geschieht beim Absetzen eines Dateisystems.

Wenn Sie gewöhnlichen Sterblichen erlauben wollen, bestimmte Geräte auf- und abzusetzen, gibt es zwei Möglichkeiten. Die erste davon ist, für ein solches Gerät die Option user in /etc/fstab einzutragen (wir gehen weiter unter in diesem Abschnitt darauf ein). Danach sind alle Benutzer in der Lage, mount und umount für dieses Gerät aufzurufen. Die andere Möglichkeit ist die Benutzung eines Programms, das unter Linux das Auf- und Absetzen übernimmt. Diese Programme werden mit setuid root ausgeführt und erlauben normalen Benutzern das Aufsetzen bestimmter Geräte. Im allgemeinen werden Sie nicht zulassen, daß Benutzer eine Festplattenpartition auf- und absetzen, aber die Benutzung eines CD-ROM- oder Diskettenlaufwerks könnte erlaubt sein.

Es gibt eine ganze Reihe von Fehlern, die beim Mounten von Dateisystemen auftreten können. Unglücklicherweise gibt mount auf verschiedene Probleme dieselbe Fehlermeldung aus:

mount: wrong fs type, /dev/cdrom already mounted, /mnt busy, or other error

wrong fs type ist einfach: Es bedeutet, daß Sie dem Befehl mount den verkehrten Typ übergeben haben. Wenn Sie keinen Typ definieren, wird auf Linux-Systemen -t minix als Voreinstellung benutzt.

device already mounted bedeutet genau das: Dieses Gerät ist bereits auf ein anderes Verzeichnis aufgesetzt. Mit dem Befehl mount ohne Argumente können Sie feststellen, welche Geräte wo aufgesetzt sind:

rutabaga# mount 
/dev/hda2 on / type ext2 (rw)
/dev/hda3 on /msdos type msdos (rw)
/dev/cdrom on /cdrom type iso9660 (ro)
/proc on /proc type proc (rw,none)

Wir sehen zwei Festplattenpartitionen, eine vom Typ ext2 , die andere vom Typ msdos ; ein CD-ROM-Laufwerk, das auf /cdrom aufgesetzt ist; und schließlich das Dateisystem /proc . Das letzte Feld in jeder Zeile (z.B. (rw)) zeigt die Optionen, unter denen das Dateisystem aufgesetzt ist. Mehr dazu in Kürze.

Beachten Sie, daß das CD-ROM-Laufwerk auf /cdrom aufsetzt. Wenn Sie häufig mit CD-ROMs arbeiten, ist es eine gute Idee, ein Verzeichnis /cdrom anzulegen, um dieses Gerät dort zu mounten. /mnt wird im allgemeinen benutzt, um dort z.B. Floppy-Dateisysteme vorübergehend aufzusetzen.

Die Fehlermeldung mount-point busy ist schwer nachzuvollziehen. Grundsätzlich deutet sie auf irgendeine Art von Aktivität unterhalb des Mount-Point hin, welche verhindert, daß Sie dort ein Dateisystem aufsetzen. Meistens ist das eine offene Datei unterhalb dieses Verzeichnisses oder ein Prozeß, der sein aktuelles Arbeitsverzeichnis unterhalb des Aufsetzpunktes hat. Stellen Sie beim Aufruf von mount sicher, daß sich Ihre Root-Shell nicht innerhalb von Mount-Point befindet; gehen Sie mit cd / in die oberste Verzeichnisebene. Es könnte auch sein, daß bereits ein anderes Dateisystem auf demselben Mount-Point aufsetzt; mit mount ohne Argumente können Sie dies feststellen.

Die Meldung other error ist natürlich nicht sehr hilfreich. Es gibt verschiedene Fälle, in denen mount mißlingen könnte. Falls das betreffende Dateisystem irgendwelche Daten- oder Datenträgerfehler enthält, wird mount eventuell melden, daß es den Superblock des Dateisystems nicht lesen kann. Unter UNIX-artigen Betriebssystemen enthält der Superblock den Teil des Dateisystems, der Informationen zu einzelnen Dateien und die Attribute des Dateisystems insgesamt enthält. Wenn Sie versuchen, ein CD-ROM- oder Diskettenlaufwerk aufzusetzen, ohne daß eine CD-ROM oder Floppy vorhanden ist, erhalten Sie eine Meldung wie diese:

mount: /dev/cdrom is not a valid block device

Disketten sind besonders anfällig für physikalische Schäden (mehr als Sie vielleicht glauben); CD-ROMs leiden unter Staub, Kratzern, Fingerabdrücken und werden auch nicht gerne verkehrt herum eingelegt. (Wenn Sie versuchen, Ihre Stan-Rogers-CD als ISO-9660-Format zu mounten, werden Sie wahrscheinlich ähnliche Probleme bekommen.)

Vergewissern Sie sich auch, daß der Aufsetzpunkt, den Sie benutzen möchten (etwa /mnt ), tatsächlich existiert. Falls das nicht der Fall ist, können Sie ihn mit dem Befehl mkdir anlegen.

Falls beim Aufsetzen oder beim Zugriff auf ein Dateisystem Probleme auftauchen, kann es sein, daß Daten beschädigt sind. Unter Linux gibt es verschiedene Tools zum Reparieren bestimmter Dateisystemtypen; im Abschnitt » Dateisysteme prüfen und reparieren « weiter unten finden Sie mehr zu diesem Thema.

Beim Booten setzt das System automatisch mehrere Dateisysteme auf. Dies wird von der Datei /etc/fstab gesteuert, die einen Eintrag für jedes Dateisystem enthält, das beim Booten aufgesetzt werden soll. Die Zeilen haben das Format:

gerät mount-point typ  optionen

Dabei haben Gerät , Mount-Point und Typ dieselbe Bedeutung wie im Befehl mount ; die Optionen sind eine durch Kommata getrennte Liste der Optionen, die Sie bei mount mit dem Schalter -o angeben würden.

In Beispiel 4--2. sehen Sie, wie die Datei /etc/fstab aussehen könnte:

Beispiel 4-2. Beispielhafte /etc/fstab-Datei

# device        directory       type      options
/dev/hda2       /               ext2      defaults
/dev/hda3       /msdos          msdos     defaults
/dev/cdrom      /cdrom          iso9660   ro
/proc           /proc           proc      none
/dev/hda1       none            swap      sw

Die letzte Zeile in dieser Datei bezeichnet eine Swap-Partition. Im Abschnitt » Swap-Space benutzen « gehen wir genauer darauf ein.

Die Man-Page zu mount enthält auch die möglichen Optionen ; wenn Sie mehr als eine Option angeben wollen, führen Sie sie durch Kommata getrennt, aber ohne Leerstellen dazwischen auf:

/dev/cdrom      /cdrom          iso9660   ro,user

Die Option user läßt auch andere Benutzer als root Dateisysteme aufsetzen. Wenn diese Option eingetragen ist, kann ein Benutzer z.B. mit:

mount /cdrom

ein CD-ROM-Laufwerk aufsetzen. Beachten Sie, daß Sie immer nur ein Gerät oder einen Mount-Point (aber nicht beide) an mount übergeben; der Befehl wird den Aufsetzpunkt oder das Gerät in /etc/fstab nachschlagen und das Gerät mit den dort eingetragenen Parametern aufsetzen. Auf diese Weise lassen sich Geräte, die in /etc/fstab eingetragen sind, ganz einfach mounten.

Sie sollten für die meisten Dateisysteme die Option defaults (Standardwerte) benutzen; damit schalten Sie eine Reihe weiterer Optionen ein wie z.B. rw (Schreib- und Lesezugriff), async (asynchrones Leeren der E/A-Puffer) usw. Solange Sie keinen besonderen Grund haben, diese Parameter zu ändern, sollten Sie defaults für fast alle Dateisysteme und ro ausschließlich für Geräte mit Lesezugriff (wie CD-ROMs) benutzen.

Mit dem Befehl mount -a werden alle Dateisysteme aufgesetzt, die in /etc/fstab eingetragen sind. Der Befehl wird beim Booten von einem der Skripts in /etc/rc.d ausgeführt, in der Regel rc.S . Auf diese Weise werden alle in /etc/fstab aufgeführten Dateisysteme beim Systemstart aktiviert; alle Partitionen Ihrer Festplatte, das CD-ROM-Laufwerk usw. werden aufgesetzt.

Hierzu gibt es eine Ausnahme: das Dateisystem root . Dieses Dateisystem, das in der Regel auf / aufgesetzt wird, enthält meistens sowohl die Datei /etc/fstab als auch die Skripts in /etc/rc.d . Damit der Kernel darauf zugreifen kann, muß er beim Booten das Root-Dateisystem selbst aufsetzen. Das Gerät, das das Root-Dateisystem enthält, ist direkt in den Kernel einkompiliert und kann mit dem Befehl rdev geändert werden (lesen Sie hierzu » Von einer Diskette booten « ). Während des Bootens versucht der Kernel, dieses Gerät als Root-Dateisystem aufzusetzen, und probiert dazu nacheinander verschiedene Dateisystemtypen aus (zuerst Minix, dann Extended usw.). Wenn Sie beim Booten eine Fehlermeldung wie:

VFS: Unable to mount root fs

erhalten, kann das eine der folgenden Ursachen haben:

Für jeden dieser Fälle gilt, daß der Kernel nicht weiterarbeiten kann und in »Panik« ausbricht. Lesen Sie in » Die Rettung in der Not « nach, was Sie tun können. Falls ein beschädigtes Dateisystem die Ursache ist, läßt sich das in der Regel beheben; lesen Sie dazu » Dateisysteme prüfen und reparieren « .

Ein Dateisystem muß nicht in /etc/fstab eingetragen sein, damit es aufgesetzt werden kann, aber für das »automatische« Aufsetzen durch mount -a sowie die Benutzung der Option user ist dies eine Voraussetzung.

Dateisysteme erzeugen

Mit dem Befehl mkfs erzeugen Sie ein Dateisystem. Das Anlegen eines Dateisystems entspricht dem »Formatieren« einer Partition oder Diskette als Vorbereitung für das Speichern von Daten.

Zu jedem Dateisystemtyp gehört ein eigener mkfs -Befehl -- für MS-DOS z.B. ist das mkfs.msdos , ein Second Extended-Dateisystem wird mit mkfs.ext2 erzeugt usw. Das Programm mkfs selbst ist ein Front-End (Hilfsprogramm), das beliebige Dateisysteme erzeugen kann, indem es die passende Version von mkfs aufruft. (10)

Bei der Installation Ihres Linux-Systems haben Sie eventuell mit einem Befehl wie mke2fs ein Dateisystem von Hand erzeugt. (Falls nicht, hat die Installationssoftware das für Sie erledigt.) Tatsächlich ist mke2fs dasselbe wie mkfs.ext2 . Die Programme sind identisch (und auf vielen Systemen ist das eine nur ein Link auf das andere), aber man benutzt die Version mkfs.dateisystemtyp , damit es für mkfs einfacher wird, das entsprechende Programm für jedes Dateisystem auszuführen. Wenn Sie das Front-End mkfs nicht auf Ihrem System haben, können Sie auch mke2fs oder mkfs.ext2 direkt aufrufen.

Wir gehen davon aus, daß Sie das Front-End mkfs benutzen; dann erzeugen Sie mit folgendem Befehl ein Dateisystem:

mkfs -t typ gerätedatei blöcke

Dabei ist der Typ der zu erzeugende Dateisystemtyp, wie er in Tabelle 4--1 erscheint, die Gerätedatei gibt an, wo das Dateisystem erzeugt werden soll (z.B. /dev/fd0 für eine Diskette), und die Blöcke geben die Größe des Dateisystems in Blöcken zu 1024 Bytes an.

Wenn Sie z.B. ein ext2 -Dateisystem auf einer Diskette anlegen möchten, geben Sie ein:

mkfs -t ext2 /dev/fd0 1440

Hier werden 1440 Blöcke angegeben, womit eine 3,5-Zoll-HD-Diskette mit 1,44-Megabytes bezeichnet wird. Wenn Sie statt dessen -t msdos eingäben, könnten Sie eine DOS-formatierte Floppy erzeugen.

Anschließend können wir die Disketten mounten, wie wir das im vorhergehenden Abschnitt beschrieben haben, und dann Dateien dorthin kopieren usw. Vergessen Sie nicht, die Floppy wieder abzusetzen, bevor Sie sie aus dem Laufwerk entfernen.

Mit dem Erzeugen eines Dateisystems werden alle Daten auf dem betreffenden physikalischen Datenträger (Diskette, Festplattenpartition usw.) gelöscht. mkfs wird normalerweise vor dem Anlegen eines Dateisystems keine Warnung ausgeben -- überlegen Sie deshalb genau, was Sie tun wollen.

Auf dieselbe Weise erzeugen Sie auch ein Dateisystem auf einer Festplattenpartition, nur geben Sie dabei den Namen der Partition (etwa /dev/hda2 ) als Gerätedatei an. Versuchen Sie niemals, auf einem Gerätenamen wie /dev/hda ein Dateisystem zu erzeugen. Dies bezieht sich auf die gesamte Festplatte, nicht nur eine einzelne Partition. Mit dem Befehl fdisk können Sie Partitionen einrichten, wie wir das im Abschnitt » Linux-Partitionen anlegen « in Kapitel 2 beschrieben haben.

Sie sollten beim Erzeugen von Dateisystemen auf Festplattenpartitionen ganz besonders vorsichtig sein. Vergewissern Sie sich, daß die Werte für Gerätedatei und Blöcke korrekt sind. Wenn Sie eine falsche Gerätedatei angeben, kann es passieren, daß Sie Daten in bestehenden Dateisystemen zerstören; wenn Sie einen falschen Wert für die Blöcke angeben, überschreiben Sie eventuell Daten in anderen Partitionen. Geben Sie für die Blöcke genau den Wert ein, den das fdisk von Linux meldet.

Wenn Sie Dateisysteme auf Disketten erzeugen möchten, ist es meistens eine gute Idee, zunächst eine Low-level-Formatierung vorzunehmen. Damit werden die Sektor- und Spurinformationen auf die Floppy geschrieben, so daß bei der Benutzung der Gerätenamen /dev/fd0 und /dev/fd1 die Diskettenkapazität automatisch erkannt wird. Der FORMAT-Befehl unter DOS ist eine Möglichkeit der Low-level-Formatierung; eine andere Möglichkeit ist das Programm fdformat unter Linux. Wenn Sie z.B. die Floppy im ersten Diskettenlaufwerk formatieren möchten, geben Sie ein:

rutabaga#  fdformat /dev/fd0 
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done

Mit der Option -n zu fdformat überspringen Sie die Verifizierung.

Alle Versionen von mkfs für die einzelnen Dateisystemtypen unterstützen verschiedene nützliche Optionen. Fast alle Versionen kennen die Option -c , mit der beim Erzeugen des Dateisystems eine Überprüfung des physikalischen Mediums auf beschädigte Blöcke eingeschaltet wird. Wenn beschädigte Blöcke gefunden werden, werden diese markiert und bei Schreibvorgängen in diesem Dateisystem ausgespart. Wenn Sie solche spezifischen Optionen benutzen möchten, sollten Sie sie hinter der Option -t typ von mkfs angeben, etwa so:

mkfs -t typ -c gerätedatei blöcke

Schauen Sie in der Man-Page der betreffenden Version von mkfs nach, welche speziellen Optionen unterstützt werden. (Für das Second Extended-Dateisystem lesen Sie also in der Man-Page zu mke2fs nach.) Die meisten Versionen kennen -c zum Testen auf beschädigte Blöcke und -v für ausführliche Meldungen.

Eventuell haben Sie nicht alle speziellen Versionen von mkfs installiert. Falls nicht, kann mkfs nicht ausgeführt werden, wenn Sie versuchen, ein Dateisystem eines Typs zu erzeugen, für den Sie kein mkfs.typ installiert haben. Irgendwo gibt es für fast alle Dateisystemtypen, die von Linux unterstützt werden, auch ein entsprechendes mkfs.typ .

Falls Sie beim Aufruf von mkfs auf Probleme stoßen, kann es sein, daß Linux physikalisch nicht auf das Gerät zugreifen kann. Wenn es sich um eine Diskette handelt, ist es vielleicht nur ein defektes Exemplar. Bei einer Festplatte könnte es sich um einen ernsteren Fehler handeln -- eventuell kann der Gerätetreiber für die Festplatte im Kernel nicht auf dieselbe zugreifen. Dabei kann ein Hardwarefehler vorliegen, oder die Plattengeometrie ist einfach falsch spezifiziert worden. Lesen Sie die Man-Pages der verschiedenen Versionen von mkfs sowie die Abschnitte in Kapitel 2 zum Thema: Probleme bei der Installation. Das dort Gesagte gilt auch hier.

Dateisysteme prüfen und reparieren

Von Zeit zu Zeit werden Sie die Linux-Dateisysteme auf ihre Konsistenz untersuchen und ggf. reparieren müssen, wenn dabei Fehler oder verlorene Daten festgestellt werden. Solche Fehler entstehen in der Regel bei einem Systemcrash oder durch Stromausfall, wenn der Kernel keine Gelegenheit mehr hat, den Inhalt der Schreibpuffer auf die Festplatte zu bringen. Meist sind solche Fehler relativ unbedeutend. Wenn das System allerdings beim Schreiben einer großen Datei unterbrochen wird, könnte diese Datei verlorengehen, wobei die Blöcke, die zu dieser Datei gehören, als »belegt« (in use) markiert werden, obwohl es dafür keinen Dateieintrag mehr gibt. Solche Fehler können auch entstehen, wenn versehentlich Daten direkt auf die Festplatte (etwa /dev/hda ) oder eine der Partitionen geschrieben werden.

Das Programm fsck dient der Untersuchung von Dateisystemen und ggf. der Reparatur von Fehlern. Wie mkfs ist auch fsck ein Front-End für dateisystemspezifische Versionen von fsck.typ , etwa fsck.ext2 für das Second Extended-Dateisystem. (Ähnlich wie bei mkfs.ext2 ist auch fsck.ext2 ein symbolischer Link auf e2fsck ; Sie könnten eines der Programme auch direkt aufrufen, falls das Front-End fsck nicht installiert ist.)

Die Benutzung von fsck ist recht einfach; der Befehl hat das Format:

fsck -t typ gerätedatei

wobei der Typ den Typ des zu reparierenden Dateisystems bezeichnet, wie er in Tabelle 4--1 erscheint, und die Gerätedatei das Gerät (Partition oder Floppy) bezeichnet, auf dem das Dateisystem lebt.

Wenn wir z.B. das ext2 -Dateisystem auf /dev/hda2 überprüfen wollen, geben wir ein:

rutabaga# fsck -t ext2 /dev/hda2 
Parallelizing fsck version 0.5a (5-Apr-94)
e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
/dev/hda2 is mounted.  Do you really want to continue (y/n)? yes 
/dev/hda2 has reached maximal mount count, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Check reference counts.
Pass 5: Checking group summary information.

Free blocks count wrong for group 3 (3331, counted=3396).  FIXED
Free blocks count wrong for group 4 (1983, counted=2597).  FIXED
Free blocks count wrong (29643, counted=30341).  FIXED
Inode bitmap differences: -8280.  FIXED
Free inodes count wrong for group #4 (1405, counted=1406).  FIXED
Free inodes count wrong (34522, counted=34523).  FIXED

/dev/hda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/hda2: ***** REBOOT LINUX *****
/dev/hda2: 13285/47808 files, 160875/191216 blocks

Beachten Sie zunächst, daß die Prüfung eines aufgesetzten Dateisystems ausdrücklich bestätigt werden muß. Falls während der Ausführung von fsck in einem aufgesetzten Dateisystem Fehler gefunden und korrigiert werden, müssen Sie das System neu booten. Das liegt daran, daß die Änderungen, die fsck durchführt, eventuell nicht an das System zurückgemeldet werden, um dem System den aktuellen Aufbau des Dateisystems mitzuteilen. Im allgemeinen ist es keine gute Idee, aufgesetzte Dateisysteme zu prüfen.

Wie Sie sehen, wurden mehrere Probleme entdeckt und korrigiert; weil dieses Dateisystem aufgesetzt war, werden wir aufgefordert, den Rechner neu zu booten.

Wie können Sie aber Dateisysteme prüfen, während sie abgesetzt sind? Außer dem Root-Dateisystem können Sie alle Dateisysteme vor dem Aufruf von fsck einfach absetzen ( umount ). Das Root-Dateisystem läßt sich allerdings nicht absetzen. Eine Möglichkeit, dieses Dateisystem im abgesetzten Zustand zu prüfen, besteht darin, eine Kombination aus Boot- und Root-Diskette einzusetzen -- z.B. die Installationsdisketten aus Ihrer Linux-Distribution. Auf diese Weise ist ein Root-Dateisystem auf der Diskette enthalten, während das Root-Dateisystem auf der Festplatte für die Überprüfung abgesetzt bleibt. In » Die Rettung in der Not « finden Sie weitere Details hierzu.

Eine andere Möglichkeit besteht darin, das Root-Dateisystem im Zustand read-only zu mounten. Dazu benutzen Sie am LILO-Boot-Prompt die Option ro (siehe auch den Abschnitt » Die Boot-Optionen festlegen « ). Allerdings kann es sein, daß andere Teile Ihrer Systemkonfiguration (z.B. die Programme, die beim Booten von /etc/init aus aufgerufen werden) auch schreibenden Zugriff auf das Root-Dateisystem haben müssen. Mit der Option ro könnten solche Programme nicht ausgeführt werden. Damit Sie das System mit der ro-Option für das Root-Dateisystem booten können, könnten Sie auch im Single-User-Modus booten (mit der Option single). Damit verhindern Sie jegliche weitere Konfiguration des Systems während des Bootens -- Sie können dann das Root-Dateisystem überprüfen und anschließend das System ganz normal booten.

Damit das Root-Dateisystem als read-only aufgesetzt wird, können Sie entweder die Boot-Option ro benutzen oder mit dem Befehl rdev das Read-only-Flag direkt im Kernel setzen.

Viele Linux-Systeme prüfen die Dateisysteme selbständig beim Booten. Dazu wird in der Regel fsck von /etc/rc.d/rc.S aus aufgerufen (wir beschreiben fsck in » Dateisysteme prüfen und reparieren « ). Wenn dies geschieht, wird Linux das Root-Dateisystem zunächst als read-only mounten, es mit fsck prüfen, und dann mit:

mount -w -o remount /

wieder aufsetzen. Die Option -o remount bewirkt, daß das betreffende Dateisystem mit den neuen Parametern erneut aufgesetzt wird (remount); in diesem Fall wird durch die Option -w (entspricht -o rw ) das Dateisystem als read-write aufgesetzt. Das Ergebnis dieser Operation ist ein Root-Dateisystem mit Lese- und Schreibzugriff.

Wenn fsck während des Bootens aufgerufen wird, prüft es alle Dateisysteme außer Root, bevor diese aufgesetzt werden. Sobald fsck beendet ist, werden mit mount die anderen Dateisysteme aufgesetzt. In den Dateien unter /etc/rc.d , insbesondere rc.S (sofern vorhanden) können Sie nachvollziehen, wie das geschieht. Wenn Sie diesen Schritt auf Ihrem System unterbinden wollen, sollten Sie in den entsprechenden Dateien in /etc/rc.d die Zeilen auskommentieren, in denen fsck aufgerufen wird.

Es gibt mehrere Optionen, die Sie mit dem dateisystemspezifischen fsck angeben können. Die meisten Typen kennen die Option -a , die automatisch alle Aufforderungen bestätigt, welche von fsck.typ eventuell ausgegeben werden; die Option -c , die die Suche nach defekten Blöcken einschaltet (wie bei mkfs ); und die Option -v , die während der Überprüfung ausführliche Meldungen ausgibt.

Sie sollten diese Optionen hinter dem Argument -ttyp angeben, etwa so:

fsck -t typ -v gerätedatei

um fsck mit ausführlichen Meldungen aufzurufen.

In den Man-Pages zu fsck und e2fsck finden Sie weitere Details.

Es gibt nicht für alle Dateisystemtypen, die von Linux unterstützt werden, eine fsck -Version. Wenn Sie MS-DOS-Dateisysteme prüfen und reparieren wollen, sollten Sie dazu eines der DOS-Programme wie z.B. die Norton Utilities benutzen. Auf jeden Fall sollte Ihr System Versionen von fsck für die Dateisysteme Second Extended, Minix und Xia enthalten.

Weiter unten in diesem Kapitel, im Abschnitt » Die Rettung in der Not « , werden wir noch einmal auf die Themen »Prüfung eines Dateisystems« und »Rettung aus der Not« eingehen. fsck kann auf keinen Fall alle Fehler in Ihren Dateisystemen finden und reparieren, aber es sollte mit den häufigsten Problemen zurechtkommen. Es gibt zur Zeit keine einfache Methode, eine wichtige Datei wiederherzustellen, die Sie gelöscht haben -- fsck ist dazu nicht geeignet. Es wird gerade an einem »undelete«-Utility für das Second Extended-Dateisystem gearbeitet. Sichern Sie also Ihr System, oder benutzen Sie rm -i , damit Linux vor dem Löschen noch einmal nachfragt.


Fußnoten

(9)
Beachten Sie, daß das /proc-Dateisystem unter Linux nicht dasselbe Format hat wie ein SVR4-/proc-Dateisystem (etwa Solaris 2.x). Unter SVR4 hat jeder aktive Prozeß einen eigenen »Datei«-Eintrag in /proc, der mit bestimmten ioctl()-Aufrufen geöffnet und bearbeitet werden kann, um Prozeßinformationen zu gewinnen. Linux dagegen stellt die Informationen in /proc über read()- und write()- Anforderungen bereit.
(10)
In frühen Versionen von Linux wurde mit mkfs ein Minix-Dateisystem erzeugt. In neueren Versionen ist dies ein Front-End zur Erzeugung beliebiger Dateisysteme, und Minix-Dateisysteme werden mit mkfs.minix erzeugt.


Inhaltsverzeichnis Vorherige Abschnitt Nächste Abschnitt