Как я могу заставить 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
    
задан Nelson 15.06.2012 в 01:44
источник

3 ответа

27

Настройка, которую я ищу, находится в / etc / default / rcS , %код%. Это означает «автоматически восстанавливать файловые системы с несогласованностью во время загрузки» и заставляет fsck работать с флагом FSCKFIX=yes . Он был установлен в -y в обеих моих системах Ubuntu.

Даже если установлено значение no , время загрузки fsck все еще несколько неинтерактивно. mountall запускает fsck с no , синоним для -a , что означает «автоматически исправить любые проблемы с файловой системой, которые можно безопасно зафиксировать без вмешательства человека». Очевидно, что -p переходит в интерактивный режим, если есть опасные исправления. Для запуска полностью автоматически вам нужно -p или -y .

Вот соответствующий бит кода из файла 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 16.06.2012 в 16:42
источник
1

Убедитесь, что у вас нет флагов, которые могут вызвать это в fstab, и проверьте скрипты init. (Попробуйте 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 15.06.2012 в 03:05
0

Для Ubuntu 15,16,17+ значение параметра FSCKFIX находится в lib / init / vars.sh

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

    
ответ дан setec 04.02.2018 в 17:14