Медленная перезагрузка - понимание fsck и tune2fs
У меня проблема с моим веб-сервером: когда он долго работал, а потом по какой-то причине отключается, загрузка занимает целую вечность.
Мой обходной путь к этому заключался в создании cron для периодической перезагрузки сервера (я был оскорблен за это, будьте добры). Перезагрузка была настолько быстрой, что сервер смог ответить на запросы до того, как они истекли, поэтому я с этим справился.
Но теперь мне сказали, что причиной этого может быть форсирование fsck через X дней, а также после монтирования Y, так что мое исправление мало чем поможет.
Итак, вопрос в том, что мне делать с fsck? Принудительно запускать его чаще или отключить? Может ли он работать в любое время или во время загрузки? Пример того, как это сделать с помощью tune2fs, также приветствуется.
2 ответа
Сначала ответим на самый простой вопрос: проверка файловой системы "в любое время" (т. Е. Когда система запущена) называется "оперативной" проверкой, и в целом она не поддерживается. Причина проста: когда монтируется файловая система, ядро выполняет произвольные действия с фактическим блочным устройством - это нормально, потому что оно отслеживает то, что оно делает. Но когда вы добавляете fsck в микс, он тоже портится с необработанным блочным устройством и не сообщает ядру о том, что он делает. Таким образом, они, по сути, наступают друг другу на ноги, когда вносят изменения в диск, и в результате вы получаете поврежденную файловую систему. Даже если вы просто "проверите" в режиме только для чтения, результаты, возвращаемые fsck, будут бессмысленными, опять же, потому что fsck не имеет представления о том, что делает ядро.
Чтобы изменить частоту проверки файловой системы при ее монтировании, вы будете использовать tune2fs, как вы упоминали. Предположим, вы хотите каждые 30 перезагрузок fsck. Делать
# tune2fs -c 30 /dev/sdaX
(Замените блочное устройство для вашей файловой системы.)
Или, если по какой-то причине вы хотите полностью отключить проверку на основе количества подключений,
# tune2fs -c 0 /dev/sdaX
Если вы хотите проверить календарь, вы можете использовать -i
, Например, чтобы проверить каждую неделю, сделайте
# tune2fs -i 1w /dev/sdaX
Ты можешь использовать d
несколько дней, w
в течение нескольких недель и m
месяцами. Опять же, чтобы отключить проверку на основе календаря, укажите значение 0
за интервал. Пожалуйста, пожалуйста, пожалуйста, не отключайте все проверки. В какой-то момент вы испортите вашу файловую систему.
В общем, вы можете получить немного более длинные интервалы, если файловая система занесена в журнал, хотя это не замена. Для получения дополнительной информации прочитайте справочные страницы для e2fsck и tune2fs; они где я получил большую часть информации для этого. Надеюсь это поможет!
Измените запланированную перезагрузку, чтобы включить одно из следующих
touch /forcefsck; reboot
или же
shutdown -rF now
Существование /forcefsck
скажет ОС сканировать диски (я уверен, что именно так и поступает вторая команда).
Используйте cron, чтобы запланировать это на период, когда сервер имеет наименьшую нагрузку, и отключите другие запланированные проверки (дата / количество подключений), если вы уверены, что он работает правильно.