[GELÖST] systemd und automount

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

[GELÖST] systemd und automount

Beitrag von scientific » 08.09.2014 22:11:55

Hi Leute!

Ich beschäftige mich ja gerade intensiv mit systemd. Momentan steht das Thema automounten an.
Die Aufgabenstellung:

Ich habe eine externe HD, welche mit cryptsetup und einem Key auf einem extra USB-Stick verschlüsselt und versperrt ist.
Wenn ich die Platte anstecke, soll erstmal gar nichts geschehen.
Sobald ich aber in das Backupverzeichnis wechsle, oder das Backup von cron angestoßen wird, soll die Platte entsperrt und gemountet werden. Also -> Automount. Und da systemd so praktisch ist, will ich das damit erledigen lassen.
Ausgehängt wird die Platte dann manuell.

Soweit so gut. Die große Herausforderung war das Entsperren der Platte, da in systemd die Option "keyscript" ignoriert wird. Gelöst hab ich es durch folgenden systemd-Service:

Code: Alles auswählen

meinRechner: # cat systemd-cryptsetup@mars.service 
# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=var-cache-backup.device
#Before=cryptsetup.target
RequiresMountsFor=/dev/disk/by-id/usb-_USB_DISK_Pro_XXXXXXXXXXXX-0:0
BindsTo=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device
After=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=15
ExecStart=/lib/systemd/systemd-cryptsetup attach 'mars' '/dev/disk/by-uuid/XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' '/dev/disk/by-id/usb-_USB_DISK_Pro_XXXXXXXXXXXX-0:0' 'luks,tries=3,keyfile-size=1024,keyfile-offset=1024'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'mars'

[Install]
WantedBy=emergency.target multi-user.target
RequiredBy=var-cache-backup.device backup.device
In meiner fstab hab ich folgende Einträge:

Code: Alles auswählen

/dev/mapper/mars                /var/cache/backup       ext4    defaults,nofail,comment=systemd.automount,noauto        0       3
/var/cache/backup/snapshots     /backup                 none    bind,ro,nofail,comment=systemd.automount,noauto         0       0
damit kommen mit mount folgende Einträge

Code: Alles auswählen

systemd-1 on /backup type autofs (rw,relatime,fd=41,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
systemd-1 on /var/cache/backup type autofs (rw,relatime,fd=27,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
Ein

Code: Alles auswählen

systemctl enable systemd-cryptsetup@mars.service
erzeugt schön die Symlinks in den entsprechenden Verzeichnissen und ein

Code: Alles auswählen

systemctl --system daemon-reload
aktiviert das ganze Spiel.

Das Ergebnis:
Der Service systemd-cryptsetup@mars.service wird automatisch gestartet (Es gibt keine udev-Regel!!!) und damit die Platte entsperrt. /dev/mapper/mars wird angelegt. (Soll es aber nicht!!)

Code: Alles auswählen

ls /backup
bleibt hängen.

Das Syslog sagt folgendes:

Code: Alles auswählen

Sep  8 21:53:36 pluto systemd[1]: Starting Cryptography Setup for mars...
Sep  8 21:53:36 pluto systemd[1]: Expecting device /dev/mapper/mars...
Sep  8 21:53:36 pluto systemd-cryptsetup[24256]: Set cipher aes, mode xts-plain64, key size 512 bits for device /dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
Sep  8 21:53:42 pluto systemd[1]: Found device /dev/mapper/mars.
Sep  8 21:53:42 pluto systemd[1]: Starting File System Check on /dev/mapper/mars...
Sep  8 21:53:42 pluto systemd[1]: Started Cryptography Setup for mars.
Breche ich ls mit Ctrl+C ab kommt die Fehlermeldung "ls: Öffnen von Verzeichnis /backup nicht möglich: Unterbrechung während des Betriebssystemaufrufs"
Ein erneutes

Code: Alles auswählen

systemctl --system daemon-reload
löst dann den Mount von alleine aus.

Syslog sagt dann folgendes:

Code: Alles auswählen

Sep  8 21:55:37 pluto systemd[1]: Reloading.
Sep  8 21:55:37 pluto systemd-fsck[24614]: /dev/mapper/mars: sauber, 938310/27525120 Dateien, 82841815/110079488 Blöcke
Sep  8 21:55:37 pluto systemd[1]: Started File System Check on /dev/mapper/mars.
Sep  8 21:55:37 pluto systemd[1]: Mounting /var/cache/backup...
Sep  8 21:55:38 pluto kernel: [ 4804.575005] EXT4-fs (dm-8): mounted filesystem with ordered data mode. Opts: (null)
Sep  8 21:55:38 pluto systemd[1]: Mounted /var/cache/backup.
Sep  8 21:55:38 pluto systemd[1]: Mounting /backup...
Sep  8 21:55:38 pluto mount[30147]: mount: warning: /backup seems to be mounted read-write.
Sep  8 21:55:38 pluto systemd[1]: Mounted /backup.
Der selbe Effekt tritt auf, wenn ich "ls /var/cache/backup" ausführe.

Wenn ich die Platte wieder verschließe (nachdem /backup und /var/cache/backup gemountet ist) - das mache ich mit

Code: Alles auswählen

systemctl stop systemd-cryptsetup@mars.service
,

Code: Alles auswählen

Sep  8 21:56:45 pluto systemd[1]: Unmounting /backup...
Sep  8 21:56:45 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Stopping Cryptography Setup for mars...
Sep  8 21:56:45 pluto systemd[1]: Unmounted /backup.
Sep  8 21:56:45 pluto systemd[1]: Unmounting /var/cache/backup...
Sep  8 21:56:45 pluto systemd[1]: Starting Cryptography Setup for mars...
Sep  8 21:56:45 pluto systemd[1]: Found device /sys/devices/virtual/block/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Found device /dev/dm-8.
Sep  8 21:56:45 pluto systemd[1]: Found device /dev/disk/by-id/dm-name-mars.
Sep  8 21:56:45 pluto systemd[1]: Found device /dev/disk/by-id/dm-uuid-CRYPT-LUKS1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-mars.
Sep  8 21:56:45 pluto systemd[1]: Found device /dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
Sep  8 21:56:45 pluto systemd[1]: Found device /dev/mapper/mars.
Sep  8 21:56:45 pluto systemd[1]: Starting File System Check on /dev/mapper/mars...
Sep  8 21:56:45 pluto systemd[1]: Starting Cryptography Setup for mars...
Sep  8 21:56:45 pluto systemd[1]: Unmounted /var/cache/backup.
Sep  8 21:56:45 pluto systemd[1]: Stopping File System Check on /dev/mapper/mars...
Sep  8 21:56:45 pluto systemd[1]: Stopping Cryptography Setup for mars...
Sep  8 21:56:45 pluto systemd[1]: Stopped Cryptography Setup for mars.
Sep  8 21:56:46 pluto systemd[1]: Stopped File System Check on /dev/mapper/mars.

Ein anderes Mal bringt das verschließen der externen HD mit dem Befehl

Code: Alles auswählen

# systemctl stop systemd-cryptsetup@mars.service
Job for systemd-cryptsetup@mars.service canceled.
Und im Syslog ist folgendes zu finden:

Code: Alles auswählen

Sep  8 22:02:35 pluto systemd[1]: Unmounting /var/cache/backup...
Sep  8 22:02:35 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Stopping /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Stopping Cryptography Setup for mars...
Sep  8 22:02:35 pluto systemd[1]: Starting Cryptography Setup for mars...
Sep  8 22:02:35 pluto systemd[1]: Found device /sys/devices/virtual/block/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Found device /dev/dm-8.
Sep  8 22:02:35 pluto systemd[1]: Found device /dev/disk/by-id/dm-name-mars.
Sep  8 22:02:35 pluto systemd[1]: Found device /dev/disk/by-id/dm-uuid-CRYPT-LUKS1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-mars.
Sep  8 22:02:35 pluto systemd[1]: Found device /dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
Sep  8 22:02:35 pluto systemd[1]: Mounting /var/cache/backup...
Sep  8 22:02:35 pluto kernel: [ 5221.937219] EXT4-fs (dm-8): mounted filesystem with ordered data mode. Opts: (null)
Sep  8 22:02:35 pluto systemd[1]: Mounted /var/cache/backup.
Sep  8 22:02:40 pluto systemd-cryptsetup[18029]: Failed to deactivate: Device or resource busy
Sep  8 22:02:40 pluto systemd[1]: systemd-cryptsetup@mars.service: control process exited, code=exited status=1
Sep  8 22:02:40 pluto systemd[1]: Unit systemd-cryptsetup@mars.service entered failed state.
Sep  8 22:02:40 pluto systemd[1]: Starting Cryptography Setup for mars...
Sep  8 22:02:40 pluto systemd-cryptsetup[18224]: Volume mars already active.
Sep  8 22:02:40 pluto systemd[1]: Started Cryptography Setup for mars.
Es wird also die Platte ausgehängt und sofort wieder gemountet.
Ich habe schon rausgefunden, wenn ich mit

Code: Alles auswählen

systemctl disable var-cache-backup.automount
den Automounter deaktiviere, lässt sich die Platte aushängen und verschließen. Nur hab ich dann den Automounter nicht mehr.

Ein manuelles umounten mit

Code: Alles auswählen

umount /var/cache/backup
hat übrigens auch ein automatisches erneutes Mounten zur Folge...

Wie mache ich das richtig? :twisted:

lg scientific
Zuletzt geändert von scientific am 11.09.2014 14:09:36, insgesamt 3-mal geändert.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

JTH
Moderator
Beiträge: 3083
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: systemd und automount

Beitrag von JTH » 09.09.2014 00:50:09

Hey,
ein paar Denkanstöße, von Cryptsetup selbst hab ich allerdings keine Ahnung.

Code: Alles auswählen

[Install]
WantedBy=[…] multi-user.target
in Verbindung mit

Code: Alles auswählen

systemctl enable systemd-cryptsetup@mars.service
sorgt dafür, dass dein systemd-cryptsetup@mars.service immer beim Booten ausgeführt wird (die ExecStart-Zeile daraus), wenn /dev/disk/by-uuid/sowieso vorhanden ist, was du aber ja noch nicht willst.

Das multi-user.target in der WantedBy-Zeile wurde automatisch beim Generieren eingefügt? Evtl. brauchst du dann in der crypttab auch noch einen Parameter noauto und/oder nofail, habe dazu ein paar Mails auf der systemd-Mailingliste gefunden [1]. (Ich hoffe mal, die Parameter stehen bei dir noch nicht drin ;) )

Zum Mounten und Unmounten:
Ich denke, du musst dir beim Mounten/Unmounten wenn es soweit funktioniert keine Gedanken darüber machen, den cryptsetup-Service zu starten bzw. stoppen. Sobald die Platte ein- oder ausgebunden wird, egal ob manuell oder automatisch, führt systemd wegen der RequiredBy und BindsTo-Zeile entsprechend aus, was mit ExecStart bzw. ExecStop angegeben ist. Statt

Code: Alles auswählen

systemctl stop systemd-cryptsetup@mars.service
müsstest du dann also

Code: Alles auswählen

systemctl stop var-cache-backup.mount
oder einfach

Code: Alles auswählen

umount /var/cache/backup
ausführen.

Ich denk, dass hier
scientific hat geschrieben:Ein manuelles umounten mit

Code: Alles auswählen

umount /var/cache/backup
hat übrigens auch ein automatisches erneutes Mounten zur Folge...
hängt auch mit den noch bestehenden Abhängigkeiten zwischen den einzelnen Units zusammen, also dass der Cryptsetup-Service beim Booten schon ausgeführt wird.

Keine Garantie, dass irgendwas hieran stimmt, habe ich mir nur in den manpages zusammengelesen ;)

[1] https://www.mail-archive.com/systemd-de ... 21119.html
Manchmal bekannt als Just (another) Terminal Hacker.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd und automount

Beitrag von scientific » 09.09.2014 02:10:37

Vielen Danke für deine Antwort!

Ich habe mich durch den Link gelesen und deine Informationen in mein Wissensnetz eingeknüpft... Nur...

nofail und noauto habe ich in der fstab gehabt. in der /etc/crypttab allerdings nicht. Hab das dort auch dazugefügt und neu gebootet... Und die externe HD wurde wieder sofort entsperrt und eingehängt.

Spannend ist, dass nur beim Mountpoint /var/cache/backup ein aktiviertes automount bewirkt, dass die Platte entsperrt und eingehängt wird. Auch ein manuelles aushängen führt zum sofortigen wieder-mounten der Platte auf diesen Punkt.
/backup ist exakt gleich in der fstab aufgeführt, aber dort wird nicht automatisch (wieder)eingehängt...

Deaktiviere ich den Automounter mit

Code: Alles auswählen

systemctl stop var-cache-backup.automount
kann ich die Platte aushängen und versperren.
Ich komme aber nicht auf die Abhängigkeiten, welche dazu führen, dass die Platte sofort entsperrt und eingehängt wird, sobald der Automounter für diesen Mountpunkt aktiviert wird...

[EDIT]
Jetzt bin ich dem Phänomen auf der Spur... Logge ich mich aus Fvwm aus und wechsel auf die Konsole, dann funktioniert es wieder mit dem Aushängen und versperren der externen HD. Kaum starte ich Fvwm, wird /var/cache/backup sofort wieder gemountet. Da ich eine sehr umfangreiche Config meines Fvwm hab, gestaltet sich die Suche jetzt gar nicht mal so einfach. Aber dort irgendwo muss ein Skript verborgen sein, welches alle Sekunden auf den Backup-Mountpunkt zugreift... Ich vermute einmal um zu schauen, ob er noch da ist...
Ich werde weiterberichten, wer der Bösewicht war.
[/EDIT]

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

JTH
Moderator
Beiträge: 3083
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: systemd und automount

Beitrag von JTH » 09.09.2014 12:14:34

Hey,
ich habe auf meinem HTPC gerade mal geguckt, was das Journal dort so zu den Automounts sagt. Da steht tatsächlich meist drin, wer der Bösewicht ist, der das Mounten verursacht:

Code: Alles auswählen

# journalctl -b | grep -i mount
...
Sep 09 12:05:19 ... systemd[1]: Got automount request for /var/lib/mythtv/media0, triggered by 1195 (mythbackend)
...
Hilft dir das bei deiner Suche?
Manchmal bekannt als Just (another) Terminal Hacker.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [GELÖST] systemd und automount

Beitrag von scientific » 09.09.2014 12:15:12

Jetzt habe ich den Schuldigen gefunden...

Openbox gestartet, das unmounten funktioniert. LXDE gestartet, das unmounten funktioniert nicht mehr.
Dann hab ich mit ps ausf angesehen, was da so an Diensten läuft und nach und nach die Dienste gekillt, die irgendwie etwas mit dem Dateisystem zu tun haben können. Und bei

Code: Alles auswählen

/usr/lib/gvfs/gvfs-gdu-volume-monitor
bin ich dann fündig geworden. Kille ich diesen Monitor, lässt sich die verschlüsselte Platte aushängen und zusperren. Aktiviere ich diesen Monitor wieder, wird die Platte automatisch entsperrt und eingehängt... Wie gehe ich da jetzt weiter vor?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

JTH
Moderator
Beiträge: 3083
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: [GELÖST] systemd und automount

Beitrag von JTH » 09.09.2014 13:42:35

Hey,
hast du, nachdem du nofail/noauto in /etc/crypttab eingefügt hast, dir nochmal angeguckt, was der systemd-cryptsetup-generator dann erzeugt? Da sollte sich denke ich was an den Abhängigkeiten ändern. Wenn ja, übernimm die Änderungen mal in deinen Service und mach nochmal ein

Code: Alles auswählen

systemctl enable systemd-cryptsetup@mars.service
und zeig mal, was sich in der service-Datei geändert hat.
Manchmal bekannt als Just (another) Terminal Hacker.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [GELÖST] systemd und automount

Beitrag von scientific » 09.09.2014 17:43:55

JTH hat geschrieben:Hey,
hast du, nachdem du nofail/noauto in /etc/crypttab eingefügt hast, dir nochmal angeguckt, was der systemd-cryptsetup-generator dann erzeugt? Da sollte sich denke ich was an den Abhängigkeiten ändern. Wenn ja, übernimm die Änderungen mal in deinen Service und mach nochmal ein

Code: Alles auswählen

systemctl enable systemd-cryptsetup@mars.service
und zeig mal, was sich in der service-Datei geändert hat.
Ich hatte das von Anfang an drin...

Das ist das aktuelle Service-File

Code: Alles auswählen

# cat /run/systemd/generator/systemd-cryptsetup@mars.service 
# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
RequiresMountsFor=/dev/disk/by-id/usb-_USB_DISK_Pro_XXXXXXXXXXXXXXXX0:0
BindsTo=dev-disk-by\x2duuid-XXXXXXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXX.device
After=dev-disk-by\x2duuid-XXXXXXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXX.device
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'mars' '/dev/disk/by-uuid/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' '/dev/disk/by-id/usb-_USB_DISK_Pro_XXXXXXXXXXXXXXXX-0:0' 'luks,tries=3,keyfile-size=1024,keyfile-offset=1024,noauto,nofail'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'mars'
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd und automount

Beitrag von scientific » 10.09.2014 11:07:37

Leider ist es doch noch nicht gelöst...

Der Rechner hängt beim Booten, wenn die externe Festplatte nicht angesteckt ist. Und das obwohl "noauto" in allen Mountpunkten in der fstab, welche die externe Festplatte betreffen eingetragen ist.

Code: Alles auswählen

-- Unit systemd-cryptsetup@mars.service has begun starting up.
Sep 10 10:53:18 pluto systemd[1]: Expecting device dev-mapper-mars.device...
-- Subject: Unit dev-mapper-mars.device has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit dev-mapper-mars.device has begun starting up.
Sep 10 10:53:18 pluto systemd[1]: Starting File System Check on /dev/mapper/home...
-- Subject: Unit systemd-fsck@dev-mapper-home.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit systemd-fsck@dev-mapper-home.service has begun starting up.
Sep 10 10:53:18 pluto systemd-cryptsetup[1439]: crypt_init() failed: Block device required
Sep 10 10:53:18 pluto systemd[1]: systemd-cryptsetup@mars.service: main process exited, code=exited, status=1/FAILURE
Sep 10 10:53:18 pluto systemd[1]: Failed to start Cryptography Setup for mars.
-- Subject: Unit systemd-cryptsetup@mars.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/be02cf6855d2428ba40df7e9d022f03d
-- 
-- Unit systemd-cryptsetup@mars.service has failed.
-- 
-- The result is failed.
Sep 10 10:53:18 pluto systemd[1]: Dependency failed for dev-mapper-mars.device.
-- Subject: Unit dev-mapper-mars.device has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/be02cf6855d2428ba40df7e9d022f03d
-- 
-- Unit dev-mapper-mars.device has failed.
-- 
-- The result is dependency.
Sep 10 10:53:18 pluto systemd[1]: Dependency failed for /var/cache/backup.
-- Subject: Unit var-cache-backup.mount has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/be02cf6855d2428ba40df7e9d022f03d
-- 
-- Unit var-cache-backup.mount has failed.
-- 
-- The result is dependency.
Sep 10 10:53:18 pluto systemd[1]: Unit systemd-cryptsetup@mars.service entered failed state.
Sep 10 10:53:30 pluto systemd[1]: Reloading.
Die /etc/crypttab sieht so aus:

Code: Alles auswählen

mars UUID=XXXXXXXXXXXXXXXXXXXXXXX /dev/disk/by-id/usb-_USB_DISK_Pro_XXXXXXXXXXXXXXXXXX-0:0 luks,tries=3,noauto,keyfile-size=1024,keyfile-offset=1024
und /etc/fstab:

Code: Alles auswählen

/dev/mapper/mars		/var/cache/backup	ext4 	defaults,nofail,comment=systemd.automount,noauto	0	0
/var/cache/backup/snapshots	/backup			none	bind,ro,nofail,noauto,comment=systemd.automount		0	0
/var/cache/backup/var-spool-cyrus.rdiff /var/cache/backup/snapshots/mailbackup	fuse.rdiff-backup-fs	ro,comment=systemd.automount,noauto,nofail	0	0
Wie man sieht ist sowohl in der crypttab als auch fstab die Option "noauto" und in der fstab zusätzlich noch "nofail" enthalten. Und dennoch will systemd unbedingt die externe HD beim Booten entsperren und die verschiedenen Mountpunkte mounten... Ich will aber auch Booten ohne eingesteckter externer HD...

Was mache ich falsch?

Abgesehen davon ist es dem gvfs-gdu-monitor nicht beizubringen, dass er die Platte ebenfalls unberührt lassen soll...

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

JTH
Moderator
Beiträge: 3083
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: systemd und automount

Beitrag von JTH » 10.09.2014 12:20:18

Hey,

da dein Log oben mit einer Meldung zu dem systemd-cryptsetup@mars.service beginnt, sieht es fast so aus, also ob der Service durch irgendeine Abhängigkeit noch beim Booten ausgeführt wird. Guck dir doch mal die Ausgabe von

Code: Alles auswählen

systemctl list-dependencies systemd-cryptsetup@mars.service
und besonders von

Code: Alles auswählen

systemctl list-dependencies --reverse systemd-cryptsetup@mars.service
an. Besonderes bei letzterem sollten im Idealfall denke ich nicht viele Abhängigkeiten herauskommen, vor allem keine zu local-fs.target, cryptsetup.target oder multi-user.target. Die würden sonst alle zum Ausführen des Services beim Booten führen. Falls da doch Abhängigkeiten sind, existieren vielleicht unter /etc/systemd/system/*.target.wants (oder auch *.requires) noch alte Links auf den systemd-cryptsetup@mars.service?
Manchmal bekannt als Just (another) Terminal Hacker.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd und automount

Beitrag von scientific » 10.09.2014 14:37:00

Nun... der Bootprozess hängt trotzdem noch.

Code: Alles auswählen

root@pluto[14:31]:/etc/systemd/system # systemctl list-dependencies --reverse systemd-cryptsetup@mars.service
systemd-cryptsetup@mars.service
└─dev-mapper-mars.device
root@pluto[14:32]:/etc/systemd/system # systemctl list-dependencies systemd-cryptsetup@mars.service
systemd-cryptsetup@mars.service
└─-.mount
Was ich jetzt rausgefunden habe:
Ist die externe HD eingesteckt, läuft der Bootprozess durch. Ist sie ausgesteckt, wird lvm2.service nicht korrekt ausgeführt. Die interne HD beinhaltet ein LVM, die externe nicht. Es ist nur die Partition mit der /-Partition als ACTIVE gekennzeichnet, alle anderen als INACTIV. Also auch home, var... Die können nicht gemountet werden - eh klar.

Aber warum lvm2 nicht korrekt durchläuft, wenn die externe HD nicht eingesteckt ist, ist mir ein Rätsel.

Ist die Platte aber eingesteckt, werden alle Partitionen darauf (siehe fstab in Vorposting) tatsächlich eingehängt, obwohl sie alle mit "noauto" gekennzeichnet sind... *grübel*

Ich habe jetzt auch noch Abhängigkeiten getestet:

Code: Alles auswählen

 # systemctl list-dependencies local-fs.target 
local-fs.target
├─backup.automount
├─home-jakob-Musik-System\x2dServer.automount
├─home.automount
├─home.mount
├─oldsys.mount
├─run-lock.mount
├─run-user.mount
├─systemd-fsck-root.service
├─systemd-remount-fs.service
├─tmp.mount
├─var-cache-backup-snapshots-mailbackup.automount
├─var-cache-backup.automount
├─var-lib-mpd.mount
└─var.mount
Daraufhin hab ich aus /run/systemd/generators die Files für var-cache-backup.automount, var-cache-backup-snapshots-mailbackup.automount und backup.automount nach /etc/systemd/system kopiert und jeweils den Eintrag #Before= local-fs.target auskommentiert und neu gestartet. Die Abhängigkeit ist immer noch die selbe wie grad oben angeführt.

Beispielhaft sei hier gelistet:

Code: Alles auswählen

# cat /etc/systemd/system/backup.automount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
#Before= local-fs.target
[Automount]
Where=/backup
Die anderen Beiden Files schauen demensprechend genauso aus (Nur Where= ist den anderen beiden Mountpunkten entsprechend).

Die Platte ist entsperrt und alle Mountpunkte gemountet... So will ich das nicht.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd und automount

Beitrag von scientific » 10.09.2014 15:12:30

Hier noch ein paar Abhängigkeiten:

Code: Alles auswählen

/etc/systemd/system # systemctl list-dependencies backup.mount
backup.mount
├─-.mount
├─var-cache-backup.mount
└─var.mount

Code: Alles auswählen

/etc/systemd/system # systemctl list-dependencies var-cache-backup.mount
var-cache-backup.mount
├─-.mount
└─var.mount

Code: Alles auswählen

/etc/systemd/system # systemctl list-dependencies var.mount
var.mount
└─-.mount

Code: Alles auswählen

/etc/systemd/system # systemctl list-dependencies --reverse var.mount
var.mount
├─avahi-daemon.socket
├─backup.mount
├─dbus.socket
├─dev-mapper-vg_pluto\x2dlv_var.device
├─home-jakob-Musik-System\x2dServer.mount
├─systemd-random-seed-load.service
├─systemd-random-seed-save.service
├─systemd-update-utmp-runlevel.service
├─systemd-update-utmp-shutdown.service
├─var-cache-backup-snapshots-mailbackup.automount
├─var-cache-backup-snapshots-mailbackup.mount
├─var-cache-backup.automount
├─var-cache-backup.mount
├─var-lib-mpd.mount
├─var-lib-nfs-rpc_pipefs.mount
└─local-fs.target
  ├─systemd-tmpfiles-clean.service
  ├─systemd-tmpfiles-setup.service
  └─sysinit.target
    ├─acpid.socket
    ├─avahi-daemon.socket
    ├─dbus.socket
    ├─systemd-tmpfiles-clean.timer
    ├─basic.target
    │ ├─acpi-fakekey.service
    │ ├─acpi-support.service
    │ ├─acpid.service
...
...
...
Vielleicht kannst du ja damit etwas anfangen?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: systemd und automount

Beitrag von scientific » 11.09.2014 12:51:17

Nun... Ich fand jetzt das hier. Ohne diese Einträge aber gibt es keine Automount-Funktion für die genannten Mountpunkte. Mit diesen Einträgen lässt sich das System nicht booten ohne der eingestöpselten externen HD...

Eine klassische Unvereinbarkeit?

Code: Alles auswählen

/etc/systemd/system/local-fs.target.wants # l
insgesamt 0
lrwxrwxrwx 1 root root 19 Sep 10 15:33 backup.automount -> ../backup.automount
lrwxrwxrwx 1 root root 29 Sep 10 15:34 var-cache-backup.automount -> ../var-cache-backup.automount
lrwxrwxrwx 1 root root 50 Sep 10 15:34 var-cache-backup-snapshots-mailbackup.automount -> ../var-cache-backup-snapshots-mailbackup.automount
Die 3 mount-units sehen entsprechend dem Muster aus:

Code: Alles auswählen

/etc/systemd/system/local-fs.target.wants # cat var-cache-backup.automount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
#Before= local-fs.target
[Automount]
Where=/var/cache/backup
Ein restart von local-fs.target bewirkt ein erneutes entsperren und mounten der Platten/Mountpunkte.

Wie mache ich das richtig? (Richtig ist, ein Re/Start von local-fs.target sollte zwar die automounts für die 3 Mountpunkte aktivieren, die Platte jedoch versperrt lassen...)

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [GELÖST] systemd und automount

Beitrag von scientific » 11.09.2014 14:38:05

Kaum macht man es richtig, funktioniert es auch schon :D

Das Problem waren tatsächlich die Symlinks in /etc/systemd/system/local-fs.target.wants. Die habe ich entfernt.

Dann habe ich noch die Abhängigkeiten der *.mount-Files in /etc/systemd/system für die 3 Mountpunkte angepasst und noch eine Udev-Regel geschrieben, welche das Automount beim Einstecken der Platte aktiviert, wie auch beim Ausstecken wieder deaktiviert.
Über einen Menüpunkt im Hauptmenü (FVWM) kann ich die Platte dann aushängen, und sie wird automatisch wieder versperrt. Dann kann ich sie abstecken.

Jetzt funktioniert es :lol:

Die Files im Detail (damit die Lösung Dokumentiert ist!!)

Ich habe folgende Files in /etc/systemd/system angelegt:

Code: Alles auswählen

/etc/systemd/system # cat backup.automount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
Before= local-fs.target
[Automount]
Where=/backup

Code: Alles auswählen

/etc/systemd/system # cat backup.mount
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
#After=local-fs-pre.target
Conflicts=umount.target
Before=umount.target 
Requires=var-cache-backup.mount
After=var-cache-backup.mount
BindsTo=var-cache-backup.mount var-cache-backup-snapshots-mailbackup.mount
StopWhenUnneeded=yes

[Mount]
What=/var/cache/backup/snapshots
Where=/backup
Type=none
FsckPassNo=0
Options=bind,ro,nofail,noauto,comment=systemd.automount

Code: Alles auswählen

/etc/systemd/system # cat var-cache-backup.automount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
Before= local-fs.target
[Automount]
Where=/var/cache/backup

Code: Alles auswählen

/etc/systemd/system # cat var-cache-backup.mount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
#After=local-fs-pre.target
Requires=systemd-cryptsetup@mars.service
After=systemd-cryptsetup@mars.service
Conflicts=umount.target
Before=umount.target
BindsTo=backup.mount var-cache-backup-snapshots-mailbackup.mount
Before=backup.mount var-cache-backup-snapshots-mailbackup.mount
BindsTo=systemd-cryptsetup@mars.service

[Mount]
What=/dev/mapper/mars
Where=/var/cache/backup
Type=ext4
FsckPassNo=0
Options=defaults,nofail,comment=systemd.automount,noauto

Code: Alles auswählen

/etc/systemd/system # cat var-cache-backup-snapshots-mailbackup.automount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
Before= local-fs.target
[Automount]
Where=/var/cache/backup/snapshots/mailbackup

Code: Alles auswählen

/etc/systemd/system # cat var-cache-backup-snapshots-mailbackup.mount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
#After=local-fs-pre.target
Requires=var-cache-backup.mount
After=var-cache-backup.mount
Conflicts=umount.target
Before=umount.target

[Mount]
What=/var/cache/backup/var-spool-cyrus.rdiff
Where=/var/cache/backup/snapshots/mailbackup
Type=fuse.rdiff-backup-fs
FsckPassNo=0
Options=''

Code: Alles auswählen

/etc/systemd/system # cat var-cache-backup-snapshots-mailbackup.service 
[Unit]
Description=Mounts rdiff-Mailbackup with rdiff-backup-fs
Requires=var-cache-backup.mount
After=var-cache-backup.mount

[Service]
Type=oneshot
ExecStart=/usr/bin/rdiff-backup-fs '/var/cache/backup/snapshots/mailbackup' '/var/cache/backup/var-spool-cyrus.rdiff'
ExecStop=/bin/umount '/var/cache/backup/snapshots/mailbackup'

[Install]
RequiredBy=var-cache-backup-snapshots-mailbackup.device

Code: Alles auswählen

/etc/systemd/system # cat systemd-cryptsetup@mars.service 
# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
#Before=cryptsetup.target
RequiresMountsFor=/dev/disk/by-id/usb-C-0:0
BindsTo=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device var-cache-backup.mount
After=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device
Before=var-cache-backup.mount
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'mars' '/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' '/dev/disk/by-id/usb-V-0:0' 'luks,tries=3,noauto,keyfile-size=1024,keyfile-offset=1024'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'mars'

Code: Alles auswählen

/etc/systemd/system # l backup.device.wants/
insgesamt 0
lrwxrwxrwx 1 root root 48 Sep 10 17:27 var-cache-backup-snapshots-mailbackup.service -> ../var-cache-backup-snapshots-mailbackup.service
Dieses Service-File benötige ich für die UDEV-Regel zum deaktivieren der Automount-Funktionen.

Code: Alles auswählen

/etc/systemd/system # cat backup-automount-remove.service 
[Unit]
Description=Removes Automount from backup-mountpoints
StopWhenUnneeded=yes

[Service]
Type=oneshot
ExecStart=/bin/systemctl stop backup.automount ; /bin/systemctl stop var-cache-backup.automount

Folgende UDEV-Regeln habe ich angelegt

Code: Alles auswählen

# cat /etc/udev/rules.d/ext-hd-mars.rules 

 KERNEL=="sd?6", SUBSYSTEMS=="usb", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", SYMLINK+="disk/mars" \
TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup.automount var-cache-backup.automount"

ACTION=="remove", KERNEL=="sd?6", SUBSYSTEMS=="usb", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", \
RUN+="/bin/systemctl --no-block reload-or-restart backup-automount-remove.service"

Und für das Mailbackup (welches ich nicht mit rsnapshot sondern mit rdiff-backup auf dem Spool von cyrus ausführe, damit ich besser Platz sparen kann) mounte ich mit rdiff-backup-fs und fuse das mailbackup-Verzeichnis. rdiff-backup-fs ist aber mit mount und der fstab inkompatibel. Deshalb hab ich aufgrund eines Hinweises auf Google-Code ein Wrapper-Skript geschrieben/erweitert. Dieses ist noch nicht ganz ideal, da ich mit getopt und longoptions noch kämpfe... aber für die Zwecke hier tut es schon einmal und nimmt auch ein paar Mountoptionen aus dem Unitfile entgegen.

Code: Alles auswählen

/etc/systemd/system # cat /sbin/mount.fuse.rdiff-backup-fs 
#!/bin/bash
REPOSITORY="$2"
MOUNTPOINT="$1"
OPTIONS=""
OPTIONS_INP="`echo $4|sed -e 's/ro//;s/rw//' -e 's/^,/--/;s/,,*/,/g' -e 's/=/ /' -e 's/,/ --/g' -e 's/--\(.\) /-\1 /g' -e 's/--\(.\)$/-\1/'`"
set -- "`echo $OPTIONS_INP|sed -e 's/ *--noauto//;s/ *--nofail//;s/ *--_netdev//'`"

TEMP=`getopt --options flc:r:d: --longoptions full,last,caching:,revisions:,directory: \
     -n 'rdiff-backup-fs' "$@"`

eval set -- "$TEMP"

while `test $# -gt 0`
do
	case $1 in
		-f|--full) OPTIONS=$OPTIONS" $1";shift;;
		-l|--last) OPTIONS=$OPTIONS" $1";shift;;
		-r|--revisions) OPTIONS=$OPTIONS" $1 $2";shift;shift;;
		--) shift; set -- $@;;
		*) break;shift;;
	esac
done

exec /usr/bin/rdiff-backup-fs "$REPOSITORY" "$MOUNTPOINT" $OPTIONS
Die entsprechende Zeile in /etc/fstab sieht so aus

Code: Alles auswählen

#/var/cache/backup/var-spool-cyrus.rdiff /var/cache/backup/snapshots/mailbackup	fuse.rdiff-backup-fs revisions=3,ro,last,comment=systemd.automount,noauto,nofail	0	0	
ist aber auskommentiert, da ich das über das unit-File gelöst habe.

Mit den Abhängigkeiten muss ich noch etwas herumprobieren. Denn es wird die externe HD auch ausgehängt und versperrt, wenn ich nur /backup unmounte. Das stört mich aber jetzt weniger als das vorherige Verhalten. :-)

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [GELÖST] systemd und automount

Beitrag von scientific » 13.09.2014 23:12:03

Soderla... Ein paar Dinge sind mir noch aufgefallen und haben immer zu Problemen geführt. Ich will das der Vollständigkeit halber noch korrigieren.

Die Udev-Regeln sollten auf den Mountpunkten

Code: Alles auswählen

/backup und /var/cache/backup 
Automount aktivieren, wenn die Platte eingesteckt wird, und deaktivieren, wenn die Platte ausgesteckt wird. Das hatte aber mit dem service-File in Kombination zum Hängenbleiben beim shutdown geführt. Der Service "backup-automount.service" konnte nicht beendet werden...

Ich hab das jetzt über ein *.target gelöst.

Konkret habe ich das Targetfile "/etc/systemd/system/backup-automount.target" mit folgendem Inhalt angelegt:

Code: Alles auswählen

[Unit]
Description=Activate automount on backup-mountpoints

Documentation=man:systemd.special(7)
StopWhenUnneeded=no
Die Udev-Regeln wurden folgendermaßen von mir abgeändert: "/etc/udev/rules.d/ext-hd-mars.rules

Code: Alles auswählen

KERNEL=="sd?6", SUBSYSTEMS=="usb", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SYMLINK+="disk/mars" \
TAG+="systemd", ENV{SYSTEMD_REQUIRES}+="backup-automount.target"

ACTION=="remove", KERNEL=="sd?6", SUBSYSTEMS=="usb", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", \
RUN+="/bin/systemctl --no-block stop backup-automount.target"
Die Abhängigkeiten waren auch noch etwas durcheinander (und ich bin mir immer noch nicht sicher, ob es nicht noch einfacher ginge...), aber die schauen jetzt so aus:

Die Reihenfolge ist folgende.
Automount ist am Mountpunkt /var/cache/backup und /backup.
Auf /backup wird das Snapshot-Verzeichnis /var/cache/backup/snapshots mittels bind und remount Readonly gemountet. Dort können User dann auf ihre Backups zugreifen, ohne dieser verändern zu können.

Das Backup wird von einem Skript regelmässig auf /var/cache/backup geschrieben. Das heißt, wenn auf /var/cache/backup das erste Mal zugegriffen wird, soll die Platte entschlüsselt und eingehängt werden.
Wenn ein User auf /backup zugreift soll auch zuerst die Platte entschlüsselt und eingehängt werden und dann das Unterverzeichnis auf /backup gemountet.
Zusätzlich gibt es noch ein virtuelles Filesystem von rdiff-backup-fs, welches auch dann erstellt und gemountet werden soll, wenn auf /backup zugegriffen wird.

Wird /backup ausgehängt, kann der Rest gemountet bleiben. Wenn /var/cache/backup ausgehängt wird, soll zuerst /backup und das virtuelle Filesystem von rdiff-backup-fs ausgehängt werden, dann /var/cache/backup und ist das alles erledigt, soll die Platte mit cryptsetup wieder zugesperrt werden.

Code: Alles auswählen

/backup            /var/cache/backup/snapshots/mailbackup (rdiff-backup-fs)
      ^                        ^
      |                        |
         /var/cache/backup
              ^
              |
systemd-cryptsetup@mars.service

Die einzelnen Unit-Files:

/etc/systemd/system/backup.mount

Code: Alles auswählen

[Unit]
Description=Mounting of /var/cache/backup/snapshots on /backup
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target 
#Requires=var-cache-backup.mount
After=var-cache-backup.mount
BindsTo=var-cache-backup.mount
#Before=backup.remount-ro.service
StopWhenUnneeded=yes

[Mount]
What=/var/cache/backup/snapshots
Where=/backup
Type=none
FsckPassNo=0
Options=bind,ro
/etc/systemd/system/backup.automount

Code: Alles auswählen

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
Before=local-fs.target
BindsTo=backup-automount.target
[Automount]
Where=/backup

[Install]
WantedBy=backup-automount.target
/etc/systemd/system/var-cache-backup.mount

Code: Alles auswählen

[Unit]
Description=Mounting of /dev/mapper/mars on /var/cache/backup
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
BindsTo=systemd-cryptsetup@mars.service dev-mapper-mars.device
After=systemd-cryptsetup@mars.service
Wants=var-cache-backup-snapshots-mailbackup.mount
Before=backup.mount var-cache-backup-snapshots-mailbackup.mount

[Mount]
What=/dev/mapper/mars
Where=/var/cache/backup
Type=ext4
FsckPassNo=0
Options=defaults,nofail,comment=systemd.automount,noauto
/etc/systemd/system/var-cache-backup.automount

Code: Alles auswählen

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
Before= local-fs.target
BindsTo=backup-automount.target
[Automount]
Where=/var/cache/backup

[Install]
WantedBy=backup-automount.target
/etc/systemd/system/backup.remount-ro.service

Code: Alles auswählen

[Unit]
Description=remount /backup as readonly
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target 
Requires=backup.mount
After=backup.mount

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/update-backuplinks ; /bin/mount -o remount,ro,bind /backup
#ExecStop=/bin/mount -o remount,rw,bind /backup ; /usr/local/bin/update-backuplinks
ExecStop=/bin/mount -o remount,rw,bind /backup

[Install]
WantedBy=backup.mount

Code: Alles auswählen

ls -l backup.mount.wants/
insgesamt 0
lrwxrwxrwx 1 root root 45 Sep 12 00:22 backup.remount-ro.service -> /etc/systemd/system/backup.remount-ro.service

/etc/systemd/system/systemd-cryptsetup@mars.service

Code: Alles auswählen

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
#Before=cryptsetup.target
RequiresMountsFor=/dev/disk/by-id/usb-_USB-0:0
BindsTo=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device
After=dev-disk-by\x2duuid-XXXXXXXX\x2dXXXX\x2dXXXX\x2dXXXX\x2dXXXXXXXXXXXX.device
BindsTo=var-cache-backup.mount
Before=var-cache-backup.mount
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'mars' '/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX '/dev/disk/by-id/usb-_USB-0:0' 'luks,tries=3,noauto,keyfile-size=1024,keyfile-offset=1024'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'mars'
Ich hoffe ich habe jetzt alle relevanten Files.
Auf jeden Fall funktioniert es jetzt wie es soll. :hail:
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten