systemd/Mount Units

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. Statisches Einhängen über die fstab

  3. Grundlage von Systemd-Units

  4. Steuerung von Systemd-Units via systemctl

  5. Root-Rechte

Inhaltsverzeichnis
  1. Installation
  2. Benutzung
  3. Problemlösung
  4. Links

Seit Ubuntu 15.04 werden auch Einhängepunkte von systemd verwaltet. Zwar ist die fstab im System noch vorhanden - deren Einträge werden aber im Hintergrund vom systemd-fstab-generator in systemd/Units vom Typ .mount übersetzt.

Alternativ zu den Einträgen in der fstab kann man mounts auch direkt als systemd-Units definieren.

Installation

Da systemd seit Ubuntu 15.04 integraler Bestandteil des Systems ist (und dieses ohne systemd nicht lauffähig ist), sind alle benötigten Komponenten bereits installiert.

Benutzung

Einhängen und Aushängen über bestehende Units

Der systemd-fstab-generator liest bei jedem Systemstart aus der fstab und schreibt die generierten Mount-Units temporär nach /run/systemd/generator/. Anschließend können diese wie jede andere Unit mit systemctl verwaltet werden.

Beispiel

Der fstab-Eintrag

UUID="b56fdac9-4c6a-4306-b5d5-1d635c0905b6" /VIDEO ext4 defaults 0 0

findet sich in der systemd-unit /run/systemd/generator/VIDEO.mount wieder und enthält:

# Automatically generated by systemd-fstab-generator
[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target

[Mount]
Where=/VIDEO
What=/dev/disk/by-uuid/b56fdac9-4c6a-4306-b5d5-1d635c0905b6
Type=ext4

Der Aufruf

systemctl status VIDEO.mount  

zeigt die Ausgabe

● VIDEO.mount - /VIDEO
   Loaded: loaded (/etc/fstab; generated; vendor preset: enabled)
   Active: active (mounted) since Wed 2017-12-20 13:56:49 CET; 9h ago
    Where: /VIDEO
     What: /dev/sdb9
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
  Process: 620 ExecMount=/bin/mount /dev/disk/by-uuid/b56fdac9-4c6a-4306-b5d5-1d635c0905b6 /VIDEO -t ext4 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/VIDEO.mount

Dez 20 13:56:49 josua systemd[1]: Mounting /VIDEO...
Dez 20 13:56:49 josua systemd[1]: Mounted /VIDEO.

Das Gerät ist also seit 9 Stunden eingehängt.

Alternativ kann man auch den Befehl

systemctl status <EINHÄNGEPUNKT> 

nutzen, im obigen Beispiel also

systemctl status /VIDEO  

Um das Gerät in systemd-Manier auszuhängen, kann man die Unit stoppen:

systemctl stop VIDEO.mount  

oder auch

systemctl stop /VIDEO 
systemctl status VIDEO.mount  
● VIDEO.mount - /VIDEO
   Loaded: loaded (/etc/fstab; generated; vendor preset: enabled)
   Active: inactive (dead) since Wed 2017-12-20 23:54:39 CET; 2s ago
    Where: /VIDEO
     What: /dev/disk/by-uuid/b56fdac9-4c6a-4306-b5d5-1d635c0905b6
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
  Process: 4928 ExecUnmount=/bin/umount /VIDEO -c (code=exited, status=0/SUCCESS)
  Process: 620 ExecMount=/bin/mount /dev/disk/by-uuid/b56fdac9-4c6a-4306-b5d5-1d635c0905b6 /VIDEO -t ext4 (code=exited, status=0/SUCCESS)

Dez 20 13:56:49 josua systemd[1]: Mounting /VIDEO...
Dez 20 13:56:49 josua systemd[1]: Mounted /VIDEO.
Dez 20 23:54:39 josua systemd[1]: Unmounting /VIDEO...
Dez 20 23:54:39 josua systemd[1]: Unmounted /VIDEO.

Eigene Units erstellen

Nach obigem Schema lassen sich natürlich auch eigene Units erstellen. Eigene Units werden in /etc/systemd/system abgelegt. Außerdem gibt es für Mount-Units noch eine besondere Namenskonvention: Der Dateiname muss zwingend den Pfad des Einhängepunktes widerspiegeln. Den richtigen Namen generiert man sich am besten via

systemd-escape --suffix=mount --path <EINHÄNGEPUNKT> 

Für die Unit gilt folgende Syntax:

[Unit]
# Abschnitt wird im Artikel system/Unit beschrieben

[Mount]
Type=nfs4
What=10.10.10.10:/nfs-share
Where=/mnt/nfs

[Install]
# Abschnitt wird im Artikel system/Unit beschrieben

Die Schlüssel im Abschnitt [Mount] haben folgende Bedeutung:

Schlüssel im Abschnitt [Mount]
Spalte Beschreibung
Type= Hier wird der Typ des Dateisystems angegeben, gemäß dem mount-Parameter -t. (Dieser Schlüssel ist optional.)
What= Enthält den absoluten Pfad des eingehängten Geräts, also z.B. Festplatten-Partitionen wie /dev/sda8 oder eine Netzwerkfreigabe wie NFSv4 oder Samba . (Dieser Schlüssel ist Pflicht.)
Where= Hier wird der Einhängepunkt ("Mountpunkt") festgelegt, d.h. der Ordner, in den die Partition eingehängt werden soll. Falls dieser nicht existiert, wird er beim Einhängen erzeugt. (Dieser Schlüssel ist Pflicht.)
Options= Enthält alle verwendeten Optionen, gemäß dem mount-Parameter -o. (Dieser Schlüssel ist optional.)
LazyUmount= Wenn der Wert zu diesem Schlüssel auf true gesetzt wird, wird das Dateisystem wieder ausgehängt, sobald es nicht mehr benötigt wird. Standardmäßig ist diese Option abgeschaltet.

Wie jede Systemd-Unit muss auch eine Mount-Unit vor Ihrer Verwendung aktiviert werden.

Problemlösung

eine systemd mount-Unit lässt sich mit mount nicht wieder einhängen

Eine Mount-Unit lässt sich zwar mit dem Befehl

umount /EINHÄNGEPUNKT 

stoppen, ein

mount /EINHÄNGEPUNKT 

ist jedoch nicht möglich, da mount nur die fstab nach Einträgen durchsucht.

In dem Fall muss die Unit wieder via systemctl gestartet werden:

systemctl start /EINHÄNGEPUNKT 

intern

extern