Use systemd services instead of sleep hooks.
This commit is contained in:
parent
86cfe8af58
commit
afebe67937
@ -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
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user