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.
|
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
|
## Anleitung
|
||||||
|
|
||||||
### Schritt 1: Anmeldedaten sicher speichern
|
### Schritt 1: Anmeldedaten sicher speichern
|
||||||
@ -182,7 +192,7 @@ exit 0
|
|||||||
Das Skript ausführbar machen:
|
Das Skript ausführbar machen:
|
||||||
|
|
||||||
```bash
|
```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
|
sudo systemctl enable mounts-connect.service
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## CIFS/SMB Mounts und Standby
|
## 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.
|
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
|
Systemd-automount erkennt den Verbindungsverlust nicht immer und versucht weiterhin, den Mount zu nutzen, was zu langen Timeouts führt
|
||||||
|
|
||||||
|
|
||||||
### Lösung:
|
### 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.
|
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`
|
||||||
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.
|
- Mount-Service mit `After=suspend.target`
|
||||||
|
|
||||||
Zum Wiederverbinden der Mounts verwenden wir das bereits zuvor erstellte `mounts-connect.sh` Skript.
|
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
|
### Schritt 1: Unmount Service erstellen
|
||||||
#!/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:
|
|
||||||
|
|
||||||
```bash
|
```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