Як я можу змусити fsck працювати неінтерактивно під час завантаження?


19

У центрі обробки даних за 1500 миль у мене безголовий сервер Ubuntu 12.04. Двічі під час перезавантаження система вирішила, що вона повинна fsck. На жаль, Ubuntu запустив fsck в інтерактивному режимі, тому мені довелося попросити когось із мого центру обробки даних перейти, підключити консоль і натиснути клавішу Y. Як встановити його так, щоб fsck працював у неінтерактивному режимі під час завантаження із прапором -yor -p(aka -a)?

Якщо я правильно зрозумів процес завантаження Ubuntu, init викликає mounttall, який у свою чергу викликає fsck. Однак я не бачу способу налаштувати виклик fsck. Чи можливо це?

(Щоб відмовитись від однієї пропозиції; я знаю, що я можу використовувати tune2fs -i 0 -c 0для запобігання періодичних fscks. Це може трохи допомогти, але мені потрібна система, щоб спробувати повернутися, навіть якщо вона мала справжню причину fsck, скажімо після відключення живлення .)

У відповідь на подальші запитання, ось відповідні подробиці мого / etc / fstab. Я не вірю, що я взагалі відредагував це з того, що там помістив 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

1
Це запитання та відповіді, пов'язані з ним /etc/default/rcS, насправді не дійсні в 2019 році, тепер Ubuntu 16 та Ubuntu 18 використовують systemd. Я не знаю повну історію для systemd, але параметр fsck.repairкомандного рядка конфігурація / ядро ​​видається релевантним. Документи в даний час кажуть, що за замовчуванням є preen, що означає -p. Його також можна встановити yesдля -y. /etc/default/grubможливо, це місце встановити. Буду вдячний, якщо хтось більш обізнаний дасть сучасну системну відповідь.
Нельсон

Відповіді:


29

Установка Я шукаю в / і т.д. / по замовчуванням / RCS , FSCKFIX=yes. Це означає "автоматично відновити файлові системи з невідповідностями під час завантаження" і змушує fsck запускатися з -yпрапором. Це було встановлено noв обох моїх системах Ubuntu.

Навіть коли встановлено значення no, fsck часу завантаження все ще є дещо неінтерактивним. mounttall працює з fsck -a, синонімом до -p, що означає "автоматично виправити будь-які проблеми файлової системи, які можна безпечно виправити без втручання людини". Мабуть, -pпереходить до інтерактивного режиму, якщо необхідно зробити небезпечні виправлення. Для запуску повністю автоматично, вам потрібно -yабо FSCKFIX=yes.

Ось відповідний біт коду від 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"));
}

Для останніх ОС з системою цього можна досягти, додавши fsck.repair=yesпарам GRUB_CMDLINE_LINUX_DEFAULTв/etc/default/grub
Maxxer

2

Для Ubuntu 15,16,17+ налаштування значення FSCKFIX розташоване у lib / init / vars.sh

Можна використовувати команду grep -r FSCKFIX * 2>/dev/nullдля її завершення.


1
Спасибі! Я не позитивний, але коментарі до цього файлу пропонують вам все-таки налаштувати налаштування /etc/default/rcS. /lib/init/vars.shмає за замовчуванням, FSCKFIXале тоді джерела, /etc/default/rcSякі можуть його перекрити. OTOH щойно встановлена ​​система Ubuntu 18 взагалі не мала rcSфайлу.
Нельсон

1

Переконайтеся, що у вас немає жодних прапорів, які могли б спричинити це у fstab, і перевірте свої сценарії init. (Спробуйте grep'ing ваші скрипти init для 'fsck', щоб знайти, де він використовується) Моя система запускає fsck не інтерактивно, тому ось копія мого fstab та частина мого / etc / init / mounttall сценарію для порівняння

$ 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

Фрагмент від / etc / init / mounttall

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

1
Дякую за допомогу. Скажіть, будь ласка, що grep FSCKFIX /etc/default/rcSсказано у вашій системі?
Нельсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.