Jak sprawić, aby fsck działał w sposób nieinteraktywny podczas uruchamiania?

19

Mam bezgłowy serwer Ubuntu 12.04 w centrum danych w odległości 1500 mil. Dwa razy po ponownym uruchomieniu system zdecydował, że musi fsck. Niestety Ubuntu uruchomił fsck w trybie interaktywnym, więc musiałem poprosić kogoś z mojego centrum danych o przejście, podłączenie konsoli i naciśnięcie klawisza Y. Jak to skonfigurować, aby fsck działał w trybie nieinteraktywnym w czasie uruchamiania z flagą -ylub -p(aka -a)?

Jeśli dobrze rozumiem proces uruchamiania Ubuntu, init wywołuje mountall, co z kolei wywołuje fsck. Jednak nie widzę żadnego sposobu, aby skonfigurować sposób wywoływania fsck. czy to możliwe?

(Aby odrzucić jedną sugestię; wiem, że mogę użyć, tune2fs -i 0 -c 0aby zapobiec okresowym fscks. To może trochę pomóc, ale potrzebuję systemu, aby spróbować wrócić, nawet jeśli miałby prawdziwy powód do fsck, na przykład po awarii zasilania .)

W odpowiedzi na dalsze pytania, oto istotne szczegóły mojego / etc / fstab. Nie sądzę, że w ogóle edytowałem to na podstawie tego, co umieściło Ubuntu.

UUID=3515461e-d425-4525-a07d-da986d2d7e04 /               ext4    errors=remount-ro 0       1
UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot           ext4    defaults        0       2
UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none            swap    sw              0       0
Nelson
źródło
1
To pytanie i zawarte w nim odpowiedzi /etc/default/rcSnie są tak naprawdę ważne w 2019 r., A Ubuntu 16 i Ubuntu 18 używają teraz systemd. Nie znam pełnej historii dla systemd, ale fsck.repairopcja wiersza poleceń konfiguracji / jądra wydaje się odpowiednia. Dokumenty mówią obecnie, że domyślnie jest preen, co oznacza -p. Można go również ustawić yesna -y. /etc/default/grubmoże to być miejsce na ustawienie tego. Byłbym wdzięczny, gdyby ktoś bardziej kompetentny dostarczyłby nowoczesną systemową odpowiedź.
Nelson

Odpowiedzi:

29

Ustawienie szukam jest w / etc / default / RCS , FSCKFIX=yes. Oznacza to „automatyczną naprawę systemów plików z niespójnościami podczas rozruchu” i powoduje uruchomienie fsck z -yflagą. Zostało ustawione now obu moich systemach Ubuntu.

Nawet jeśli jest ustawiony na no, czas rozruchu fsck jest nadal nieco nieinteraktywny. mountall uruchamia fsck z -asynonimem -p, co oznacza „automatycznie naprawia wszelkie problemy z systemem plików, które można bezpiecznie naprawić bez interwencji człowieka”. Najwyraźniej -pprzechodzi w tryb interaktywny, jeśli trzeba wprowadzić niebezpieczne poprawki. Aby uruchomić w pełni automatycznie, potrzebujesz -ylub FSCKFIX=yes.

Oto odpowiedni fragment kodu z mountall.c

if (fsck_fix || mnt->fsck_fix) {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y"));
} else {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a"));
}
Nelson
źródło
W przypadku najnowszych systemów operacyjnych z systemd to samo można osiągnąć, dodając fsck.repair=yesparametr GRUB_CMDLINE_LINUX_DEFAULTdo/etc/default/grub
Maxxer
2

W Ubuntu 15,16,17+ ustawienie wartości FSCKFIX znajduje się w lib / init / vars.sh

Można użyć polecenia, grep -r FSCKFIX * 2>/dev/nullaby go sfinalizować.

setec
źródło
1
Dzięki! Nie jestem pozytywny, ale komentarze w tym pliku sugerują, że nadal powinieneś skonfigurować to ustawienie /etc/default/rcS. /lib/init/vars.shma wartość domyślną, FSCKFIXale źródła, /etc/default/rcSktóre mogą ją zastąpić. OTOH nowo zainstalowany system Ubuntu 18 w ogóle nie miał rcSpliku.
Nelson
1

Upewnij się, że nie masz żadnych flag, które mogłyby to powodować w fstab, i sprawdź swoje skrypty init. (Spróbuj grep'ować swoje skrypty inicjujące dla 'fsck', aby dowiedzieć się, gdzie jest używane) Mój system uruchamia fsck nieinteraktywny, więc oto kopia mojego fstab i część mojego skryptu / etc / init / mountall do porównania

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=acbe3514-33a3-4170-b1be-df7b8460a49a /               ext4    errors=remount-ro 0       1
UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home           ext4    defaults        0       2
UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none            swap    sw              0       0

Fragment z / etc / init / mountall

script
    . /etc/default/rcS
    [ -f /forcefsck ] && force_fsck="--force-fsck"
    [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"

    # set $LANG so that messages appearing in plymouth are translated
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec mountall --daemon $force_fsck $fsck_fix
end script
Sepero
źródło
1
Dzięki za pomoc. Czy możesz mi powiedzieć, co grep FSCKFIX /etc/default/rcSmówi twój system?
Nelson