Как заставить fsck при каждой загрузке - все (соответствующие) файловые системы?

14

Я работаю с безвентиляторным ПК (на самом деле их сотни) с разделами Debian 6 и 3 (FAT и 2x ext2). Система не имеет кнопки питания как таковой, поэтому большинство людей склонны дергать вилку, чтобы «выключить ее», а не init 0 (или эквивалентный). В результате файловая система (ы) накапливает ошибки довольно быстро.

Я пытался использовать 'shutdown -rF' для принудительного запуска fsck, но это, похоже, не работает. Мне интересно, есть ли какой-нибудь способ сказать системе проверять каждую точку монтирования / FS перед их монтированием.

Я попытался установить параметр fsck в / etc / fstab. Это обычно дает мне 'Обнаружены ошибки. Запустите fsck вручную 'сообщение.

Есть ли другие варианты, чтобы попробовать?

ethrbunny
источник
1
А) Кем были ваши пользователи? Б) Не могли бы вы добавить заметную кнопку «Выключить», которая всегда была видна на экране? C) В качестве альтернативы, вы могли бы обучить своих пользователей? D) Почему машины не имеют кнопок питания на передней панели?
незабываемыйПоддержкаMonica
Этот вопрос является почти дубликатом unix.stackexchange.com/questions/180488/… того же пользователя.
незабываемыйПоддержкаMonica

Ответы:

16

В /etc/init.d/checkfs.shэто линия if [ -f /forcefsck ] || grep -s -w -i "forcefsck" /proc/cmdline, обеспечивая таким образом forcefsckв командной строке ядра или генерации /forcefsckфайла на остановке должен вызвать FSCK при следующей перезагрузке.

Чтобы предотвратить запуск fsck вручную, попросите fsckпопытаться автоматически исправить ошибки с помощью -yопции, раскомментировав и изменив no yesна следующую запись / etc / default / rcS, после редактирования она должна выглядеть следующим образом:

# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes

Одна опция (forcefsck или FSCKFIX) не подразумевает другую.

конечный серо-зеленый
источник
Будет ли это обрабатывать условие «Запускать fsck вручную»?
ethrbunny
Действительно, я читаю слишком быстро, обновил свой ответ.
конечный серо-зеленый
Я установил FSCKFIX = да и значение в checkfs.sh. Ни в одном из случаев fsck не запускался при перезагрузке (через init 6). Я должен что-то здесь упустить.
ethrbunny
Ничего не меняйте checkfs.sh, только отредактируйте / etc / defaults / rcS и запустите touch /forcefsckперед перезагрузкой. Последняя команда должна выполняться перед каждым перезапуском или сразу после загрузки, но сценарий инициализации fsck завершен.
конечный серо-зеленый
Хм .. не повезло. Я все еще вижу сообщение «монтирование неконтролируемой файловой системы», за которым следует множество ошибок «удалить ссылку на узел». Пока что изменение / etc / fstab было единственным, что оказало какое-либо влияние. Не уверен, что я делаю так, что ваши предложения не работают.
ethrbunny
8

Добавьте fsck.mode=forceпараметр Kernel в ваш загрузчик. Добавьте эту опцию к GRUB_CMDLINE_LINUX_DEFAULT=переменной внутри /etc/default/grub. В качестве пользователя root создайте новый файл конфигурации grub:

[root@host]# grub-mkconfig -o /boot/grub/grub.cfg

Этот параметр имеет тот же эффект, что и создание forcefsckфайла внутри корня точки монтирования.

Решение использовать checkfs.shскрипт лучше подходит для Debian, но не должно работать на других дистрибутивах.


источник
7

Я редактирую свой ответ:

Команда:

sudo tune2fs -c 1 /dev/sdX

в соответствии с аргументом manpages -c для tune2fs подсчитывает количество экземпляров монтирования для раздела. Следовательно, 1 заставляет проверять fs после каждого экземпляра монтирования.

( http://man7.org/linux/man-pages/man8/tune2fs.8.html )

xitij
источник
2
В большинстве случаев одной команды недостаточно, напишите хотя бы минимальное объяснение.
Петер - Восстановить Монику