diff --git a/linux/systemd-mount-units.md b/linux/systemd-mount-units.md index f2cf62d..075d575 100644 --- a/linux/systemd-mount-units.md +++ b/linux/systemd-mount-units.md @@ -14,6 +14,16 @@ In diesem Artikel wird beschrieben, wie CIFS-Netzwerkfreigaben mit Hilfe von sys Dies wird am Beispiel eines `SMB` Servers im lokalen Netzwerk erleutert. +> [!NOTE] +> Diese Anleitung berücksichtigt unveränderliche (immutable) Distributionen wir SteamOS oder Fedora Atomic Desktops. +> Daher werden ausschließlich systemd Services genutzt und auf systemd Hooks verzichtet, da diese in immutablen Verzeichnissen definiert werden. +> Die Verwendung einer immutable Distribution führt in einigen Fällen zu einer anderen Verzeichnisstruktur. Diese werden in dieser Anleitung verwendet. +> Die folgenden Pfade würden bei einer traditionellen Distribution abweichen: +> | Immutable | Standard | +> | ----------------------- | ----------------------- | +> | /var/mnt | /mnt | +> | /var/usrlocal/bin | /usr/local/bin | + ## Anleitung ### Schritt 1: Anmeldedaten sicher speichern @@ -182,7 +192,7 @@ exit 0 Das Skript ausführbar machen: ```bash -sudo chmod +x /usr/local/bin/mounts-connect.sh +sudo chmod +x /var/usrlocal/bin/mounts-connect.sh ``` @@ -222,6 +232,7 @@ sudo systemctl daemon-reload sudo systemctl enable mounts-connect.service ``` + ## CIFS/SMB Mounts und Standby Nach dem Standby (Suspend-to-RAM) verlieren die Mounts manchmal die Verbindung, was dazu führt, dass Dolphin und andere Programme beim Zugriff „einfrieren“ und die Verbindung zu den SMB-Shares schließlich fehlschlägt. @@ -230,34 +241,66 @@ Während des Standbys wird die Netzwerkverbindung getrennt. Nach dem Aufwachen i Systemd-automount erkennt den Verbindungsverlust nicht immer und versucht weiterhin, den Mount zu nutzen, was zu langen Timeouts führt + ### Lösung: -Die robusteste Methode ist, die Mounts beim Suspend automatisch auszuhängen und nach dem Resume neu einzuhängen. Dies kann mit `systemd-Sleep-Hooks` erreicht werden. - -Das systemd-Subsystem `system-sleep` führt bei bestimmten Energiezustandswechseln des Systems alle Skripte im Ordner `/usr/lib/systemd/system-sleep/` (bzw. auf manchen Systemen `/lib/systemd/system-sleep/`) automatisch aus. +Die robusteste Methode ist, die Mounts beim Suspend automatisch auszuhängen und nach dem Resume neu einzuhängen. Hierzu können systemd Services als trigger das `suspend.target` verwenden. Hierzu müssen zwei Services erstellt werden: +- Unmount-Service mit `Before=suspend.target` +- Mount-Service mit `After=suspend.target` Zum Wiederverbinden der Mounts verwenden wir das bereits zuvor erstellte `mounts-connect.sh` Skript. -```bash -sudo nano /usr/lib/systemd/system-sleep/mounts-reconnect.sh -``` -```sh -#!/bin/bash - -case "$1" in - pre) - umount -l /var/mnt/Dokumente - # weitere Mounts ergänzen - ;; - post) - /var/usrlocal/bin/mounts-connect.sh - ;; -esac -``` - -Das Skript ausführbar machen: +### Schritt 1: Unmount Service erstellen ```bash -sudo chmod +x /usr/lib/systemd/system-sleep/mounts-reconnect.sh +sudo nano /etc/systemd/system/mounts-disconnect.service +``` + +```ini +[Unit] +Description=Disconnect CIFS mounts before suspend +Before=suspend.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/umount -l /var/mnt/Dokumente +#ExecStart=/usr/bin/umount -l (weitere...) + +[Install] +WantedBy=suspend.target +``` + + +### Schritt 2: Bestehenden Trigger-Service erweitern + +Der bestehende `mounts-connect.service` kann um den `After=suspend.target` Trigger erweitert werden: + +```ini +[Unit] +Description=Trigger CIFS Automounts for Dolphin +-- After=network-online.target +++ After=network-online.target suspend.target +Wants=network-online.target +Before=graphical.target + +[Service] +Type=oneshot +ExecStart=/var/usrlocal/bin/mounts-connect.sh +User=root +RemainAfterExit=yes +TimeoutStartSec=60 + +[Install] +-- WantedBy=multi-user.target +++ WantedBy=multi-user.target suspend.target +``` + + +### Schritt 3: Services neu laden und aktivieren + +```bash +sudo systemctl daemon-reload +sudo systemctl enable mounts-disconnect.service +sudo systemctl enable mounts-connect.service ```