Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]


8.3 Dateisysteme

Die Liste der Dateisysteme, die eingebunden werden sollen, steht im file-systems-Feld der Betriebssystemdeklaration (siehe Das Konfigurationssystem nutzen). Jedes Dateisystem wird mit der file-system-Form deklariert, etwa so:

(file-system
  (mount-point "/home")
  (device "/dev/sda3")
  (type "ext4"))

Wie immer müssen manche Felder angegeben werden — die, die im Beispiel oben stehen —, während andere optional sind. Die Felder werden nun beschrieben.

Datentyp: file-system

Objekte dieses Typs repräsentieren einzubindende Dateisysteme. Sie weisen folgende Komponenten auf:

type

Eine Zeichenkette, die den Typ des Dateisystems spezifiziert, z.B. "ext4".

mount-point

Der Einhängepunkt, d.h. der Pfad, an dem das Dateisystem eingebunden werden soll.

device

Hiermit wird die „Quelle“ des Dateisystems bezeichnet. Sie kann eines von drei Dingen sein: die Bezeichnung („Labels“) eines Dateisystems, die UUID-Kennung des Dateisystems oder der Name eines /dev-Knotens. Mit Bezeichnungen und UUIDs kann man Dateisysteme benennen, ohne den Gerätenamen festzuschreiben23.

Dateisystem-Bezeichnungen („Labels“) werden mit der Prozedur file-system-label erzeugt und UUID-Kennungen werden mit uuid erzeugt, während Knoten in /dev mit ihrem Pfad als einfache Zeichenketten aufgeführt werden. Hier ist ein Beispiel, wie wir ein Dateisystem anhand seiner Bezeichnung aufführen, wie sie vom Befehl e2label angezeigt wird:

(file-system
  (mount-point "/home")
  (type "ext4")
  (device (file-system-label "my-home")))

UUID-Kennungen werden mit der uuid-Form von ihrer Darstellung als Zeichenkette (wie sie vom Befehl tune2fs -l angezeigt wird) konvertiert24 wie hier:

(file-system
  (mount-point "/home")
  (type "ext4")
  (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))

Wenn die Quelle eines Dateisystems ein zugeordnetes Gerät (siehe Zugeordnete Geräte) ist, muss sich das device-Feld auf den zugeordneten Gerätenamen beziehen — z.B. "/dev/mapper/root-partition". Das ist nötig, damit das System weiß, dass das Einbinden des Dateisystems davon abhängt, die entsprechende Gerätezuordnung hergestellt zu haben.

flags (Vorgabe: '())

Eine Liste von Symbolen, die Einbinde-Flags („mount flags“) bezeichnen. Erkannt werden unter anderem read-only, bind-mount, no-dev (Zugang zu besonderen Dateien verweigern), no-suid (setuid- und setgid-Bits ignorieren), no-atime (Dateizugriffs-Zeitstempel nicht aktualisieren), strict-atime (Dateizugriffs-Zeitstempel immer aktualisieren), lazy-time (Zeitstempel nur auf zwischengespeicherten Datei-Inodes im Arbeitsspeicher aktualisieren) und no-exec (Programmausführungen verweigern). Siehe Mount-Unmount-Remount in The GNU C Library Reference Manual für mehr Informationen zu diesen Einbinde-Optionen.

options (Vorgabe: #f)

Entweder #f oder eine Zeichenkette mit Einbinde-Optionen („mount options“), die an den Dateisystemtreiber übergeben werden. Siehe Mount-Unmount-Remount in The GNU C Library Reference Manual für Details; führen Sie man 8 mount aus, um die Einbinde-Optionen verschiedener Dateisysteme zu sehen.

mount? (Vorgabe: #t)

Dieser Wert zeigt an, ob das Dateisystem automatisch eingebunden werden soll, wenn das System gestartet wird. Ist der Wert #f, dann erhält das Dateisystem nur einen Eintrag in der Datei /etc/fstab (welche vom mount-Befehl zum Einbinden gelesen wird), es wird aber nicht automatisch eingebunden.

needed-for-boot? (Vorgabe: #f)

Dieser boolesche Wert gibt an, ob das Dateisystem zum Hochfahren des Systems notwendig ist. In diesem Fall wird das Dateisystem eingebunden, wenn die initiale RAM-Disk (initrd) geladen wird. Für zum Beispiel das Wurzeldateisystem ist dies ohnehin immer der Fall.

check? (Vorgabe: #t)

Dieser boolesche Wert sagt aus, ob das Dateisystem vor dem Einbinden auf Fehler hin geprüft werden soll.

create-mount-point? (Vorgabe: #f)

Steht dies auf wahr, wird der Einhängepunkt vor dem Einbinden erstellt, wenn er noch nicht existiert.

dependencies (Vorgabe: '())

Dies ist eine Liste von <file-system>- oder <mapped-device>-Objekten, die Dateisysteme repräsentieren, die vor diesem Dateisystem eingebunden oder zugeordnet werden müssen (und nach diesem ausgehängt oder geschlossen werden müssen).

Betrachten Sie zum Beispiel eine Hierarchie von Einbindungen: /sys/fs/cgroup ist eine Abhängigkeit von /sys/fs/cgroup/cpu und /sys/fs/cgroup/memory.

Ein weiteres Beispiel ist ein Dateisystem, was von einem zugeordneten Gerät abhängt, zum Beispiel zur Verschlüsselung einer Partition (siehe Zugeordnete Geräte).

Das Modul (gnu system file-systems) exportiert die folgenden nützlichen Variablen.

Scheme-Variable: %base-file-systems

Hiermit werden essenzielle Dateisysteme bezeichnet, die für normale Systeme unverzichtbar sind, wie zum Beispiel %pseudo-terminal-file-system und %immutable-store (siehe unten). Betriebssystemdeklaration sollten auf jeden Fall mindestens diese enthalten.

Scheme-Variable: %pseudo-terminal-file-system

Das als /dev/pts einzubindende Dateisystem. Es unterstützt über openpty und ähnliche Funktionen erstellte Pseudo-Terminals (siehe Pseudo-Terminals in The GNU C Library Reference Manual). Pseudo-Terminals werden von Terminal-Emulatoren wie xterm benutzt.

Scheme-Variable: %shared-memory-file-system

Dieses Dateisystem wird als /dev/shm eingebunden, um Speicher zwischen Prozessen teilen zu können (siehe shm_open in The GNU C Library Reference Manual).

Scheme-Variable: %immutable-store

Dieses Dateisystem vollzieht einen „bind mount“ des /gnu/store, um ihn für alle Nutzer einschließlich des Administratornutzers root nur lesbar zu machen, d.h. Schreibrechte zu entziehen. Dadurch kann als root ausgeführte Software, oder der Systemadministrator, nicht aus Versehen den Store modifizieren.

Der Daemon kann weiterhin in den Store schreiben, indem er ihn selbst mit Schreibrechten in seinem eigenen „Namensraum“ einbindet.

Scheme-Variable: %binary-format-file-system

Das binfmt_misc-Dateisystem, durch das beliebige Dateitypen als ausführbare Dateien auf der Anwendungsebene (dem User Space) zugänglich gemacht werden können. Es setzt voraus, dass das Kernel-Modul binfmt.ko geladen wurde.

Scheme-Variable: %fuse-control-file-system

Das fusectl-Dateisystem, womit „unprivilegierte“ Nutzer ohne besondere Berechtigungen im User Space FUSE-Dateisysteme einbinden und aushängen können. Dazu muss das Kernel-Modul fuse.ko geladen sein.


Fußnoten

(23)

Beachten Sie: Obwohl es verführerisch ist, mit /dev/disk/by-uuid und ähnlichen Gerätenamen dasselbe Resultat bekommen zu wollen, raten wir davon ab: Diese speziellen Gerätenamen werden erst vom udev-Daemon erzeugt und sind, wenn die Geräte eingebunden werden, vielleicht noch nicht verfügbar.

(24)

Die uuid-Form nimmt 16-Byte-UUIDs entgegen, wie sie in RFC 4122 definiert sind. Diese Form der UUID wird unter anderem von der ext2-Familie von Dateisystemen verwendet, sie unterscheidet sich jedoch zum Beispiel von den „UUID“ genannten Kennungen, wie man sie bei FAT-Dateisystemen findet.


Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]