Systemd a odpojení filestystemu při vypnutí

Systemd a odpojení filestystemu při vypnutí
« kdy: 05. 01. 2020, 22:30:20 »
Ahoj,
řeším tu takový problém, pravděpodobně týkající se systemd v Debianu 10. Jde o to, že se mi při vypínání/rebootu systému unmountuje partition (/var/lib/xen/save), na kterou se má uložit stav Xen guestů dříve, než to služba xendomains.service uloží, tudíž se uložení provede přímo do root filesystemu, kde ale není místo. Při spuštění se ještě k tomu ta partition namontuje pro změnu dříve, než se spustí xendomains.service, která je v tu chvíli prázdná, takže by se ty Xen guests neobnovily ani kdyby bylo na root fs místo.
Zkoušel jsem i namísto fstabem připojit tu partition pomocí systemd mount a vzhledem k tomu, že xendomains.service je v Debianu 10 automaticky generovaná z initu, zkusil jsem ji vytvořit (zkopírovat vygenerovanou service) do /etc/systemd/system a přidat Wants=var-lib-xen-save.mount a After=var-lib-xen-save.mount.
Výsledek je pořád stejnej, partition se odpojí dříve než se spustí /etc/init.d/xendomains stop

Nemáte prosím někdo nějakej nápad? Díky za případné rady.

fstab:
Kód: [Vybrat]
/dev/mapper/nvm-sys /               ext4    errors=remount-ro 0       1
/dev/mapper/vg1--xensave /               ext4    auto 0       1
/dev/mapper/nvm-swap none            swap    sw              0       0

/etc/systemd/system/var-lib-xen-save.mount
Kód: [Vybrat]
[Unit]
Description=Xensave Directory mount (/var/lib/xen/save)
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=/dev/vg1/xensave
Where=/var/lib/xen/save
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

/etc/systemd/system/xendomains.service
Kód: [Vybrat]
[Unit]
SourcePath=/etc/init.d/xendomains
Description=LSB: Start/stop secondary xen domains
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=corosync.service
Before=heartbeat.service
Before=libvirtd.service
After=network-online.target
After=remote-fs.target
After=xen.service
After=drbd.service
After=iscsi.service
After=openvswitch-switch.service
After=nfs-kernel-server.service
After=var-lib-xen-save.mount
Wants=network-online.target
Wants=var-lib-xen-save.mount

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/xendomains start
ExecStop=/etc/init.d/xendomains stop
ExecReload=/etc/init.d/xendomains reload

[Install]
WantedBy=multi-user.target


Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #1 kdy: 05. 01. 2020, 23:45:31 »
Wants= je měkká závislost, Vaše aplikace ale vyžaduje závislost tvrdou :-)

After=var-lib-xen-save.mount
BindsTo=var-lib-xen-save.mount

BindsTo= spolu s After= mají význam, že běží-li xendomains.service, musí být aktivní var-lib-xen-save.mount. After= je tam kvůli potlačení paralelní aktivace obou (téměř) naráz.

Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #2 kdy: 05. 01. 2020, 23:48:59 »
A samozřejmě to platí i naopak, After= zajistí, že při vypínání sekvencer nejprve zastaví službu, a až pak povolí umount :)

Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #3 kdy: 06. 01. 2020, 15:39:59 »
After=var-lib-xen-save.mount
BindsTo=var-lib-xen-save.mount

Díky za odpověď, každopádně teď už to neuloží do root fs, ale pro změnu nikam, přijde mi, že se systém rebootuje dřív než se ta služba ukončí, v syslogu je vidět Stopping, ale už ne Stopped, přitom když pustím ručně systemctl stop xendomains, tak je tam jednak Stopping, tak i Stopped a proběhne to v pořádku.

Ta služba teď vypadá takhle:
Kód: [Vybrat]
[Unit]
SourcePath=/etc/init.d/xendomains
Description=Start/stop secondary xen domains
After=network-online.target
After=remote-fs.target
After=xen.service
After=drbd.service
After=iscsi.service
After=openvswitch-switch.service
After=nfs-kernel-server.service
After=var-lib-xen-save.mount
BindsTo=var-lib-xen-save.mount

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/xendomains start
ExecStop=/etc/init.d/xendomains stop
ExecReload=/etc/init.d/xendomains reload

[Install]
WantedBy=multi-user.target



Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #4 kdy: 06. 01. 2020, 19:05:21 »
Pokud je služba závislá na tom, že je přimountován nějaký svazek, použijte RequiresMountsFor=. Služba se pak nastartuje teprve po namountování svazku a svazek bude odpojen teprve po ukončení služby.


Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #5 kdy: 07. 01. 2020, 23:10:01 »
Ještě je možné, že do toho nějak vstupují ty SysV věci, navíc když je to Type=forking. To je pro mě úplně cizí.

ExecStop=/etc/init.d/xendomains stop

Jestli tohle jde nějak asynchronně (vrátí to ještě než to ukončí službu), tak to může být ono.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #6 kdy: 08. 01. 2020, 12:58:45 »
Nedavno mi pan Filip Jirsak poradil zavislost
Kód: [Vybrat]
RequiresMountFor, ktera pravdepodobne muze resit i Vas problem. Odkaz na diskuzi :
https://www.root.cz/clanky/co-nam-dal-rok-2019-intel-vs-amd-nastup-5g-a-boj-o-systemd-a-wayland/nazory/1033753/

Hmmm... nepostrehl jsem, ze to uz sem dokonce napsal. Tak nic...

Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #7 kdy: 09. 01. 2020, 14:27:18 »
... použijte RequiresMountsFor=. Služba se pak nastartuje teprve po namountování svazku a svazek bude odpojen teprve po ukončení služby.
To jsem zkusil, efekt pořád stejný, služba jako se začne ukončovat a systém se rebootuje podle mě dřív než se ukončí, na ten svazek se neuloží nic co by mělo. Ještě s tím budu laborovat a když něco vymyslím, dám vědět, každopádně díky za nápady.

Re:Systemd a odpojení filestystemu při vypnutí
« Odpověď #8 kdy: 09. 01. 2020, 22:38:56 »
Potřebujete, aby systemd věděl, že ta služba pořád běží. Pokud se služba odforkuje a prnví proces skončí, nemá systemd jak jednoduše zjistit, že služba ve skutečnosti dál běží na pozadí. Spusťte tu službu na popředí, ať se nedémonizuje.