Domyślnie systemd spada do powłoki awaryjnej przy najmniejszym błędzie. Na przykład, jeśli jeden z montowań w fstab z jakiegoś powodu zawiedzie, system natychmiast przestanie się uruchamiać. Zarządzam dziesiątkami różnych systemów produkcyjnych i uważam to zachowanie za bardzo szkodliwe. (Właściwie myślę, że to poważna porażka projektowa, ale to osobista opinia).
Chciałbym zwiększyć odporność systemu na rozruch. Optymalnie system powinien zawsze uruchamiać się, brakujące sterowniki, mocowania itp. Nie powinny upuszczać powłoki awaryjnej (zamiast tego wyświetlać tylko ostrzeżenie), chyba że podany błąd uniemożliwi zalogowanie się do konsoli. Co można uruchomić, należy uruchomić.
Wiem, że systemd automatycznie generuje pliki * .mount z / etc / fstab i mogłem użyć opcji nofail z małym limitem czasu x-systemd.device (lub sam zdefiniować odpowiednie pliki .mount). Jednak nie rozwiązałoby to mojego problemu, chcę, aby system był bardziej odporny, „łatanie” fstab za każdym razem nie jest zbyt wygodne i nie jestem pewien, ile istnieje innych możliwych „problemów”, które uniemożliwiłyby uruchomienie systemu tylko dlatego, że jakiś programista uważał, że jest to wystarczająco ważne.
W pewnym sensie chciałbym odzyskać kontrolę nad moją maszyną i nie pozwalać systemdowi decydować, który problem jest wystarczająco poważny, aby zniszczyć proces uruchamiania. Czy to możliwe?
źródło
Odpowiedzi:
To dosłownie tylko awarie montowania, to wszystko, co musisz zmienić.
Tak więc odpowiedź na list byłaby trywialna. Utwórz plik rozwijany:
Wierzę, że nie doda to żadnego nowego problemu, poza tymi, których już doświadczył Linux sysvinit, dopuszczając ten scenariusz częściowej awarii.
Wskazałeś jednak również na pytanie, jak długo systemd powinien czekać na dostępność określonych urządzeń blokowych. Nie widzę żadnego sposobu, aby to skonfigurować bez zapewnienia zamiennika dla generatora fstab jako całości. https://www.freedesktop.org/software/systemd/man/systemd.generator.html
Jeśli zrzucisz tutaj dużą ilość rzadziej używanego kodu, wydaje się mało prawdopodobne, aby zwiększyć odporność systemu. Myślę, że najbliższym rozwiązaniem byłoby załatanie istniejącego generatora fstab. Nie jest to bardzo skomplikowane, podejrzewam, że można to zrobić / nadążyć za wszelkimi znaczącymi zmianami.
Technicznie rzecz biorąc, jeśli twoja dystrybucja zawiera samodzielny
mountall
skrypt sysvinit, możesz spróbować go podłączyć. Ale to znacznie zmieni proces uruchamiania - to właściwie bardziej rozwidlenie. Nie poleciłbym tego podejścia.https://unix.stackexchange.com/a/393711/29483
źródło
[Unit]\nOnFailure=
w moim pliku nofail.conf. Wydaje się, że można skonfigurować czas oczekiwania w /etc/systemd/system.conf (za pomocą ogólnej opcji DefaultTimeoutStartSec). Moje systemy są zazwyczaj wystarczająco szybkie, lata 90. i tak wydają się przesadą. To rozwiązanie wydaje się obiecujące.OnFailure=
w/lib/systemd/system/local-fs.target
zamiast/etc/systemd
(Ubuntu 16.04 na AWS)[Unit]
wcześniejOnFailure=
.Wyłącz automatyczne montowanie dowolnego systemu plików, który nie jest niezbędny do uruchomienia systemu, dodając
noauto
opcję mount do jego/etc/fstab
wpisu:do:
a następnie zamontuj system plików po uruchomieniu za pomocą linii w
/etc/rc.local
:W tym przykładzie zastosowano system plików NFS, ale ma on również zastosowanie do jednostek LUN importowanych z serwera plików.
źródło
Może to spróbować?
źródło