# 1.104.3

# Kontrolle des Ein- und Aushängen von Dateisystemen

Beschreibung: Prüfungskandidaten sollten in der Lage sein, das Einhängen (Mounten) eines Dateisystems zu konfigurieren. Dieses Lernziel beinhaltet die Fähigkeit, Dateisysteme manuell ein- und auszuhängen, die Konfiguration des Mountens von Dateisystemen bei Systemstart und das Konfigurieren von wechselbaren Datenträgern, die von Benutzern gemountet werden können, wie z.B. Bänder, Disketten und CDs.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- `/etc/fstab`
- mount
- umount

Unter Linux/Unix werden die verschiedenen Laufwerke nicht wie etwa unter Windows als einzelne Dateisysteme mit eigenem Laufwerksbuchstaben verwaltet, sondern sie werden zu einem einzigen Baum zusammengebaut. Der englische Begriff to mount (anbringen, montieren) steht für das Einhängen der verschiedenen Dateisysteme in den Dateibaum. Dieses Einhängen geschieht entweder automatisch beim Systemstart, oder einzelne Dateisysteme werden manuell während des Betriebs gemountet. Dieses manuelle Mounten bezieht sich in der Regel auf Wechsemedien, wie etwa Disketten, CD-ROMs oder auch Netzverbindungen (im Windows-Jargon: Netzlaufwerke)

In diesem Zusammenhang sind für uns zwei Programme und zwei Dateien wichtig. Die Programme sind diejenigen, die wir zum Einhängen (mount) und Abhängen (umount) benötigen, die Dateien zeigen, was wohin eingehängt werden soll (/etc/fstab) und was gerade eingehängt ist (/etc/mtab). Diese vier Elemente sollen hier dargestellt werden.

### Das Programm mount

Mit dem Programm mount werden Dateisysteme an bestimmte Plätze, also in bestimmte Verzeichnisse eingehängt, neudeutsch gemountet. Die grundsätzliche Form des Programms ist simpel:

      mount [-t Dateisystemtyp] [ -o Optionen] [Gerätedatei] [Mountpoint]

Die meisten Dateisystemtypen werden heute von mount selbstständig erkannt, die Angabe des Dateisystemtyps kann daher meist weggelassen werden. Die Optionen sind abhängig vom verwendeten Dateisystemtyp, sie werden später noch etwas genauer dargestellt. Wichtig ist also zunächst einmal die Angabe, welches Gerät (Gerätedatei in /dev) soll wohin eingehängt werden.

Um z.B. eine Diskette (/dev/fd0) ins Verzeichnis /floppy einzuhängen würde der Befehl

      mount /dev/fd0 /floppy

genügen. Nachdem dieser Befehl ausgeführt wurde ist der Inhalt der Diskette im Verzeichnis /floppy zu finden. Eventuelle Inhalte, die vorher in diesem Verzeichnis waren sind jetzt unsichtbar, sobald das Diskettenlaufwerk aber wieder abgehängt ist, sind sie wieder vorhanden.

Sobald ein Dateisystem mit dem mount-Befehl eingehängt wurde (und dabei nicht die Option -n gesetzt wurde) wird ein Eintrag in die Datei /etc/mtab geschrieben, der das Dateisystem und den Mountpoint beschreibt.

Existiert bereits ein Eintrag in /etc/fstab, der das zu mountende Dateisystem beschreibt, so genügt dem mount-Befehl die Angabe entweder der Gerätedatei oder des Mountpoints, um das Dateisystem einzuhängen.

Soll statt eines lokalen Dateisystems ein NFS-Verzeichnis gemountet werden, so muß statt der Gerätedatei der Rechnername des NFS-Servers, gefolgt von einem Doppelpunkt (:) und dem freigegebenen Verzeichnispfad angegeben werden. So würde die Zeile

      mount einstein.my.domain:/usr/public /mnt

das Verzeichnis `/usr/public` des Rechners `einstein.my.domain` in das lokale Verzeichnis `/mnt` einhängen.

Der mount-Befehl kann auch einfach mit dem Parameter -a aufgerufen werden, ohne Nennung eines Dateisystems. Dann werden alle Dateisysteme eingehängt, die in der Datei /etc/fstab stehen und dort nicht die Option noauto gesetzt haben. Das passiert gewöhnlich beim Hochfahren des Systems.

### Die Optionen zum Einhängen der Dateisysteme

Das Programm mount kann mit dem -o Kommandozeilenparameter verschiedene Optionen setzen, wie ein Dateisystem gemountet werden soll. Die selben Optionen können auch in der Datei /etc/fstab angegeben werden (siehe unten).

Folgende Optionen werden von allen Dateisystemen verstanden:

`async`
  Alle Ein-/Ausgabe Operationen des Dateisystems werden asynchron vorgenommen.
`atime`
  Die Zugriffszeit der Inodes (atime) werden bei jedem Zugriff gesetzt. (Voreinstellung)
`auto`
  Wenn diese Option in /etc/fstab steht, wird das Dateisystem gemountet, wenn mount mit der Option -a aufgerufen wird.
`defaults`
  Entspricht den voreingestellten Optionen: rw, suid, dev, exec, auto, nouser und async
`dev`
  Gerätedateien auf dem Dateisystem sind gültig und werden interpretiert.
`exec`
  Erlaubt die Ausführung von Binärdateien auf dem Dateisystem.
`noatime`
  Die Inode-Zugriffszeiten (atime) werden nicht bei jedem Zugriff gesetzt.
`noauto`
  Wenn ein Eintrag in /etc/fstab diese Option gesetzt hat, so wird dieses Dateisystem nicht durch den Befehl mount -a eingehängt. Also wird es auch nicht beim Systemstart automatisch gemountet.
`nodev`
  Gerätedateien auf diesem Dateisystem werden nicht interpretiert.
`noexec`
  Verbietet die Ausführung von Binärdateien auf diesem Dateisystem.
`nosuid`
  Die SUID und SGID Bits von Programmen auf diesem Dateisystem werden ignoriert.
`nouser`
  Ein Normaluser (nicht root) darf dieses Dateisystem nicht mounten.
`remount`
  Ein bereits gemountetes Dateisystem soll neu gemountet werden. Das wird meist benutzt, um die Optionen eines bereits gemounteten Dateisystems neu zu setzen, insbesondere um ein ReadOnly Dateisystem wieder beschreibbar zu mounten.
`ro`
  Read Only - Das Dateisystem wird ReadOnly (nur lesbar) gemountet.
`rw`
  ReadWrite - Das Dateisystem wird ReadWrite (les- und schreibbar) gemountet.
`suid`
  SUID und SGID Bits werden interpretiert.
`sync`
  Alle Ein- und Ausgabeoperationen werden synchron durchgeführt.
`user`
  Erlaubt einem Normaluser, das Dateisystem zu mounten.

Neben diesen Optionen, die für alle verwendeten Dateisystemtypen gelten, existieren noch viele verschiedene Optionen für jeden einzelnen Dateisystemtyp. Diese Optionen hier darzustellen würde einerseits den Rahmen dieser Darstellung sprengen und andererseits sind sie auch nicht notwendiger Bestandteil der LPIC 101 Prüfung. Wer sie nachlesen will, kann das auf der Handbuchseite des mount-Befehls tun.

### Das Programm umount

Das Programm umount (nicht unmount !!) hängt ein oder mehrere eingehängte Dateisysteme wieder ab. Das abzuhängende Dateisystem kann entweder durch die Nennung der entsprechenden Gerätedatei oder durch die Angabe des Mountpoints spezifiziert werden.

Ein Dateisystem kann nicht abgehängt werden, wenn es in Benutzung (busy) ist. Das ist in der Regel dann der Fall, wenn ein Prozess ein Verzeichnis dieses Dateisystems als aktuelles Arbeitsverzeichnis hat.

Wird umount mit dem Parameter -a aufgerufen, so werden alle Dateisysteme abgehängt, die in der Datei /etc/mtab aufgelistet sind. Das passiert gewöhnlich während des Shutdowns.

### Die Datei /etc/mtab

Die Datei /etc/mtab enthält immer eine Liste aller gerade gemounteten Dateisysteme. Diese Datei wird niemals von Hand editiert, sie ist ausschließlich von den Programmen mount und umount zu beschreiben. Es existieren zwar für beide Befehle jeweils die Option -n, die verhindert, daß dieser Eintrag gemacht wird, das dient aber nur dazu, daß auch auf Systemen, deren /etc-Verzeichnis ReadOnly gemountet ist, beide Befehle funktionieren.

### Die Datei /etc/fstab

Die Datei /etc/fstab ist sozusagen die Bauanleitung des Systems, in der genau steht, welches Dateisystem wohin gemountet werden soll. Es obliegt dem Systemadministrator, diese Datei zu erstellen und zu pflegen. Jedes Dateisystem wird durch eine separate Zeile in der fstab repräsentiert; innerhalb einer Zeile werden die Felder durch Tabs oder Leerzeichen getrennt. Die Reihenfolge der Zeilen in der fstab ist wichtig, da fsck(8), mount(8), und umount(8) diese Datei sequentiell abarbeiten.

Das erste Feld, (fs_spec), beschreibt das zu mountende blockorientierte Device oder remote filesystem.

Das zweite Feld, (fs_file), gibt den Mountpunkt für das Dateisystem an. Bei Swap-Partitionen sollte hier `none'' stehen.

Das dritte Feld, (fs_vfstype), beschreibt den Typ des Dateisystems. Hier steht entweder (bei festen Partitionen) das jeweilige Kürzel für das Dateisystem, das auf der Partition angelegt ist (ext2, minix, vfat, swap, ...) oder (bei Wechselplattenlaufwerken wie Zip- oder Diskettenlaufwerken) auto, damit der mountbefehl den jeweiligen Typ selbst erkennt. Bei NFS-Verbindungen steht hier entsprechend der Begriff nfs.

Das vierte Feld, (fs_mntops), beschreibt die zum Dateisystem gehörenden Mountoptionen. Hier werden die Optionen, die oben näher beschrieben wurden, als eine durch Kommas getrennte Liste angegeben. Falls keine speziellen Optionen gewünscht sind, wird hier der Begriff defaults eingegeben.

Das fünfte Feld, (fs_freq), wird von dump(8) benutzt um zu entscheiden welche Dateisysteme gedumpt werden müssen. Eine 1 bedeutet, daß das Dateisystem mit dump bearbeitet werden soll, eine 0 bedeutet, daß es nicht gedumpt werden muß. Ist das fünfte Feld nicht vorhanden, wird für diesen Wert Null angenommen und dump geht davon aus, daß das Dateisystem nicht gedumpt werden muß.

Das sechste Feld, (fs_passno), wird von fsck(8) benutzt um die Reihenfolge, in der die Dateisysteme während des Reboots geprüft werden, festzulegen. Das root Dateisystem sollte mit einer fs_passno von 1 versehen sein, andere Dateisysteme mit einer fs_passno von 2. Dateisysteme innerhalb eines Laufwerks werden sequentiell geprüft, Dateisysteme auf verschiedenen Laufwerken jedoch gleichzeitig, um parallel arbeitende Hardware zu unterstützen. Ist das sechste Feld nicht vorhanden oder Null, wird sinnigerweise eine Null zurückgegeben und fsck geht davon aus, daß das Dateisystem keiner Prüfung bedarf.

Normalerweise darf nur root Dateisysteme an- und abhängen. Das macht bei Festplattenpartitionen durchaus Sinn, ist aber für PC-Hardware mit Wechselmedien wie Disketten, CD-Laufwerke oder ZIP-Disks sehr unpraktisch. Wenn also gewünscht wird, daß ein Normaluser bestimmte Laufwerke auch mounten darf, so sollte bei den Optionen nach dem "defaults" noch ein "user" stehen. Damit dieses Laufwerk dann aber beim Start nicht automatisch gemountet wird (und so eine Fehlermeldung provoziert, wenn z.B. keine Diskette eingelegt ist) sollte auch noch die Option "noauto" benutzt werden.

Ein typischer Eintrag in einem sehr einfachen Linux-System könnte also folgendermaßen aussehen:

      /dev/hda2       /       ext2    defaults 1 1
      /dev/hda3       swap    swap    defaults 0 2
      /dev/hda5       /usr    ext2    defaults 1 2
      /dev/hdb        /cdrom  auto    ro,noauto,user 0 0
      /dev/fd0        /floppy auto    defaults,noauto,user 0 0