Как я могу заставить fsck работать неинтерактивно во время загрузки?

19

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

Если я правильно понимаю процесс загрузки Ubuntu, init вызывает mountall, который, в свою очередь, вызывает 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 все еще не является интерактивным. mountall запускает 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"));
}
нельсон
источник
Для последних операционных систем с Systemd то же самое может быть достигнуто добавлением 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чтобы найти его.

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

Убедитесь, что у вас нет никаких флагов, которые могут вызвать это в fstab, и проверьте сценарии инициализации. (Попробуйте grep'ing ваших скриптов инициализации для 'fsck', чтобы найти, где он используется) Моя система запускает fsck неинтерактивно, так что здесь есть копия моего fstab и часть моего скрипта / etc / init / mountall для сравнения

$ 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 / 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
источник
1
Спасибо за помощь. Не могли бы вы сказать мне, что grep FSCKFIX /etc/default/rcSговорит в вашей системе?
Нельсон