Обычно, fsck
выполняется автоматически при запуске после каждой 30-й перезагрузки или около того. Иногда это может быть очень медленным и может задерживать загрузку более чем на полчаса.
Есть ли способ вместо этого запустить fsck при выключении? (Я не против, если выключение будет отложено. Время загрузки важнее.)
Я бы хотел это для дистрибутивов Debian или Scientific Linux.
Хотя вы можете проверить некоторые вещи во время выключения, вы не можете эффективно запустить fsck
в вашей корневой файловой системе. Ты видишь, fsck
требует, чтобы файловая система не была смонтирована перед попыткой восстановления. Это возможно только во время загрузки, пока вы работаете из initramfs
.
Проблема с fsck при завершении работы заключается в том, что при завершении работы вы видите, что файловая система отключается. Даже если файловая система грязная, размонтирование файловой системы не заставляет ее проверять ее целостность. Пока вы монтируете его, вы выполняете fsck, чтобы проверить, верны ли метаданные для данных и есть ли у fs правильная информация для fs, как она сообщает. Это может произойти во время монтирования фс. Потому что код для проверки целостности файловой системы начинает действовать, когда fs собирается монтироваться.
Я бы предположил, что причина, по которой мы можем выполнить ленивое размонтирование, даже если файловая система грязная, но нет ленивого или принудительного размонтирования, когда файловая система грязная;)
Обычно журналирование файловой системы не занимает много времени, если только это не сильно прикручено. xfs_repair довольно удобен и может быть выполнен онлайн, в то время как btrfs - это хорошо, другая история.
Для Debian вы можете использовать AutoFsck но пакет больше не поддерживается (последнее обновление 2010 г.). Так что имейте это в виду.
Другой способ - добавить сценарий FSCK / bash в сценарий выключения. Для SE linux / centos и т. Д. Я бы использовал chkconfig level 0 (остановка) и 6 (перезагрузка). chkconfig --levels 0 rc.local-shutdown on
Поместите сценарий в /etc/rc.d/init.d/
. (уровень 6 для перезагрузки)
Для Debian я бы поместил создание скриптов в /etc/rc6.K00scriptname и /etc/rc0.d/K00scriptname,
Что касается скрипта, вы можете использовать что-то вроде этого:
#!/bin/bash
NETFS="nonfs,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,nousbfs,noshfs,nofuse,nofuseblk"
if (( `tune2fs -l /dev/sda2 | awk '/Mount count/{print $3}'` > `tune2fs -l /dev/sda2 | awk '/Maximum mount count/{print $4-1}' ))
then /sbin/fsck -A -T -C -a -t $NETFS 2>/dev/null
fi
Этот код был написан не мной, а кем-то на Archlinux форумы. Код не пробовал. Так что имейте это в виду.
Или вы можете просто сделать что-нибудь простое, например /sbin/fsck -A -T -C -a -- -f
внутри сценария.