`e2fsck -n` + как узнать, нужно ли запускать e2fsck для исправления поврежденных блоков?
Мы хотим проверить файловую систему на дисках как /deb/sdc... /dev/sdg на каждой машине Red Hat Linux.
Цель состоит в том, чтобы найти, какие диски требуют e2fsck (как e2fsck -y /dev/sdb так далее.)
Согласно справочной странице
-n
Откройте файловую систему только для чтения и примите ответ "нет" на все вопросы. Позволяетe2fsckиспользоваться не в интерактивном режиме. Эта опция не может быть указана одновременно с-pили же-yопции.
Когда мы запускаем команду (пример)
e2fsck -n /dev/sdXX
мы получаем
e2fsck 1.42.9 (28-Dec-2013) Warning! /dev/sdc is mounted. Warning: skipping journal recovery because doing a read-only filesystem check. /dev/sdc: clean, 94/1310720 files, 156685/5242880 blocks
Так что нам нужно захватить из e2fsck -n вывод, который требует от нас запустить e2fsck (без -n)?
процесс e2fsck
init 1
umount /dev/sdXX
e2fsck -y /dev/sdXX # (or e2fsck -C /dev/sdXX for full details)
init 3
2 ответа
Ты используешь e2fsck поэтому я предполагаю, что мы говорим о ext? файловая система. Команда
tune2fs -l /dev/sdXX
скажет вам очевидное состояние файловой системы (которая может быть смонтирована, это безопасно). Вы получите (среди прочего) либо
Filesystem state: clean
или что-то еще, чем clean, Так как grep возвращает false, если совпадение не найдено, ваша основная попытка может быть такой:
tune2fs -l /dev/sdXX | grep "^Filesystem state:[ ]*clean$" || { commands; to; fix; the; filesystem; }
Вышеуказанное будет работать, только если файловая система заранее обнаружит свое нечистое состояние. Иногда вы все равно хотите проверить наличие проблем (вот почему fsck каждый N-й маунт или когда прошло столько-то дней). Если я вас правильно понимаю, вы пытаетесь узнать, следует ли вам e2fsck -y /dev/sdXX, анализируя выход e2fsck -n /dev/sdXX,
Я говорю не анализировать вывод. Проверьте статус выхода. Увидеть man 8 e2fsck учить:
Код выхода, возвращаемый
e2fsckэто сумма следующих условий:0- нет ошибок1- Исправлены ошибки файловой системы2- Исправлены ошибки файловой системы, система должна быть перезагружена4- Ошибки файловой системы не исправлены8- Операционная ошибка16- Ошибка использования или синтаксиса32-e2fsckотменено по запросу пользователя128- Ошибка общей библиотеки
Заметка e2fsck -n /dev/sdXX не будет делать ничего полезного (и вернет "нет ошибок"), если файловая система кажется чистой; так что это еще один способ обнаружить текущее видимое состояние, как мы сделали с tune2fs, Для проверки в любом случае вам нужно -f вариант. Затем вы хотите знать, включает ли статус выхода 4, В bash это можно сделать с помощью:
e2fsck -nf /dev/sdXX # this is safe even if the filesystem is mounted
status=$?
[ $(( $status & 4 )) -eq 4 ] && { commands; to; fix; the; filesystem; }
Быстрое объяснение:
$?является статусом выхода последней команды (e2fsckв этом случае). Я сохраняю его в отдельной переменной, чтобы можно было выполнить несколько тестов с ним. Это не обязательно в этом простом примере, где есть только один тест, но в целом это хорошая практика. Основная причина: после этих строк$statusпо-прежнему содержит статус выходаe2fsckи может быть повторно использован, пока (новый)$?не имеет ничего общего сe2fsck,$(( ... ))делает арифметику оболочки- где
&побитовое И, - затем
[ ... -eq 4 ]на самом делеtestКоманда, чтобы проверить, если результат4, - Если тест пройден успешно, то
{ ... }блок будет выполнен.
Возможны ошибки не в самой файловой системе, а на более глубоком уровне устройства. Я думаю, что это выходит за рамки этого вопроса, но просто чтобы указать вам правильное направление, если вам это нужно, это полезные команды (обратите внимание, sdX не sdXX):
smartctl -t long /dev/sdXbadblocks -n -b 512 /dev/sdX
Прочитайте их справочные страницы, прежде чем использовать их.
Сначала проверьте, является ли это файловой системой журналирования.
"Журналируемая файловая система - это файловая система, которая отслеживает изменения, еще не зафиксированные в основной части файловой системы, записывая намерения таких изменений в структуре данных, известной как" журнал ", которая обычно представляет собой циклический журнал. В случае сбоя системы или сбоя питания такие файловые системы могут быть быстрее подключены к сети с меньшей вероятностью повреждения ".
Затем вы можете попробовать Gparted для проверки согласованности и посмотреть, что инструмент может сделать для вас.