У меня есть безголовый сервер Ubuntu 12.04 в центре обработки данных за 1500 миль. Дважды теперь при перезагрузке система решила, что это должно быть fsck. К сожалению, Ubuntu запустил fsck в интерактивном режиме, поэтому мне пришлось попросить кого-нибудь из моего центра обработки данных перейти, подключить консоль и нажать клавишу Y. Как настроить его так, чтобы fsck запускался в неинтерактивном режиме во время загрузки с флагом -y
или -p
(он же -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
Я ищу настройки в / etc / default / 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"));
}
. Убедитесь, что у вас нет флагов, которые могут вызвать это в 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
Для Ubuntu 15,16,17+ настройка значения FSCKFIX находится в lib / init / vars.sh
. Для ее поиска можно использовать команду grep -r FSCKFIX * 2>/dev/null
.