Netzlaufwerke einbinden

Aus DebianforumWiki

Wechseln zu: Navigation, Suche
WikiNetzwerk ‹ Netzlaufwerke einbinden

Review.png Review: Dieser Artikel ist für das Review freigegeben.


Getestet.png Getestet: Dieser Hinweis soll dir dabei helfen, zu entscheiden, ob dieser Artikel auf deinem System funktionieren wird oder nicht. Solltest du feststellen, dass dieser Artikel bei einer ungetestet Version funktioniert, kannst du das gerne hier korrigieren oder im Forum anmerken.


Inhaltsverzeichnis

Problemstellung

Dieser Artikel beschreibt, wie sich über das Netzwerk bereitgestellte Dateisysteme (SMB, NFS und weitere) automatisiert ein- und aushängen lassen. Ein simpler Mount über die fstab ist oftmals nicht sinnvoll, da das Netzwerk mitunter erst nach dem Einhängen der Dateisysteme bereitsteht oder vor dem Aushängen derselben getrennt wird. Dies kann zu störenden Verzögererungen beim Hoch- oder Herunterfahren des Rechners führen.

Eine elegante Lösung ist, die Dateisysteme erst nach Verfügbarkeit des Netzwerks einzuhängen bzw. erst dann, wenn auf sie zugegriffen wird. Dies kann über systemd-Automounts umgesetzt werden. Automounts machen ältere Verfahren wie autofs überflüssig.

Alternativ können bei Nutzung von NetworkManager sog. Dispatcher-Skripte ereignisgesteuert ausgeführt werden, die das Ein- oder Aushängen von Netzwerk-Dateisystemen bewirken.

Verwendung von systemd-Automounts

Ein systemd-Automount bewirkt, dass das tatsächliche Einhängen erst in dem Moment passiert, in dem auf den Mountpoint zugegriffen wird. Umgekehrt kann man über einen Automount steuern, dass nach einer bestimmten Zeitspanne ohne Zugriff ein automatischer Umount erfolgt.

Zusammengefasst: wir brauchen

  • eine Mount-Unit, die beschreibt, wie und und unter welchem Mountpoint das Dateisystem eingehängt wird,
  • und eine Automount-Unit, die bei Zugriff auf den Mountpoint die Mount-Unit startet.

Das bedeutet, dass die Automount-Unit, nicht aber die Mount-Unit enabled wird.

Mount und Automount lassen sich in der /etc/fstab auch in einer Zeile definieren, die Definition über separate Units ist jedoch übersichtlicher.

Mount-Unit

Im folgenden werden Beispiele für Mount-Units gezeigt. Eine Mount-Unit hat nicht die Endung .service, sondern .mount. Der Name der Unit muss dem Namen des Mountpoints entsprechen, wobei die / durch - zu ersetzen sind. Mount- und Automount-Units werden üblicherweise in /etc/systemd/system abgelegt. Bei Änderungen muss man systemd über systemctl daemon-reload dazu bringen, veränderte Units zu erkennen.

Der Aufbau von Mount-Units wird in der Manpage 5 systemd.mount beschrieben.

Wichtig: die Mount-Unit wird nicht enabled, da sie bei Bedarf von der Automount-Unit gestartet werden soll.

Mount-Unit für NFS

Eine Mount-Unit mnt-datengrab.mount, die NFS-Exporte des Servers datengrab unter /mnt/datengrab einbindet, sieht folgendermaßen aus:

[Unit]
Description=Mount /mnt/datengrab via NFS

[Mount]
What=datengrab:/
Where=/mnt/datengrab/
Type=nfs
Options=soft,nfsvers=4,async

Die Optionen für NFS werden im Artikel NFSv4-Mini-Howto beschrieben.

Mount-Unit für SMB/CIFS

Die folgende Unit mnt-datengrab-music.mount bindet die Freigabe music vom Server datengrab über SMB/CIFS ein:

[Unit]
Description=CIFS-Freigabe //datengrab/music einbinden

[Mount]
What=//datengrab/music
Where=/mnt/datengrab/music
Options=username=CIFS-Benutzername,password=CIFS-Passwort,workgroup=CIFS-Arbeitsgruppe,rw
Type=cifs

[Install]
WantedBy=multi-user.target

Unter Options müssen die Angaben zu Benutzernamen, Passwort und Arbeitgruppe entsprechend gepflegt werden. Das Passwort kann auch aus einer Datei gelesen werden.

Automount-Unit

Die Automount-Unit startet die Mount-Unit, wenn der zugehörige Mountpoint betreten wird. Sie muss den gleichen Namen wie die zugehörige Mount-Unit haben, jedoch mit der Endung .automount. Die Automount-Unit muss enabled und gestartet werden.

Der Aufbau von Mount-Units wird in der Manpage 5 systemd.automount beschrieben.

Für die obige NFS-Mount-Unit mnt-datengrab.mount kann eine Automount-Unit mnt-datengrab.automount wie folgt aussehen:

[Unit]
Description=Automount /mnt/datengrab
Requires=NetworkManager.service
After=network-online.target
Wants=network-online.target

[Automount]
Where=/mnt/datengrab
TimeoutIdleSec=10min

[Install]
WantedBy=multi-user.target

Die Angaben entsprechen im Wesentlichen denen einer „normalen” systemd-Unit, weshalb hier nicht weiter darauf eingegangen werden soll.

  • Über Where wird der Mountpoint angegeben, der überwacht werden soll.
  • Über die optionale Angabe TimeoutIdleSec kann man angeben, dass ein Umount versucht werden soll, wenn innerhalb der angebenen Zeitdauer keine Zugriffe stattgefunden haben.

Verwendung von NetworkManager-Dispatcherskripten

NetworkManager arbeitet beim Eintritt von Ereignissen die in /etc/NetworkManager/dispatcher.d/ liegenden Skripte der Reihe nach ab. Die hier maßgeblichen Ereignisse sind up und down, die nach Aktivierung bzw. Deaktivierung eines Netzwerkgerät eintreten. Der Name der Netzwerkverbindung und das Ereignis werden als Parameter übergeben und können im Skript ausgewertet werden.

Details lassen sich in der manpage 8 NetworkManager nachlesen.

 Starten/Stoppen von systemd-Automounts

Das folgende Skript startet die Automount-Unit für /mnt/datengrab, wenn Verbindung zum WLAN „Zuhause“ besteht und stoppt ihn, wenn die Verbindung getrennt wurde. Die zugehörige Mount-Unit wird gleichermaßen gestoppt; wenn das Dateisystem eingehängt war, wird dabei es ausgehängt. Die Automount-Unit darf nicht enabled sein.

#!/bin/sh

iface="$1"
action="$2"

# beenden, wenn nicht das heimische WLAN
[ "$iface" != "Zuhause" ] || exit 0

case $action in
    up)
        systemctl start mnt-datengrab.automount
        ;;
    down)
        systemctl stop mnt-datengrab.automount
        ;;
esac

exit 0

unmittelbares Mounten/Umounten

In einem Skript lässt sich analog zum obigen Beispiel eine Mount-Unit starten oder stoppen oder ein Dateisystem per mount/umount einhängen oder aushängen.

Meine Werkzeuge