`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/sdX
badblocks -n -b 512 /dev/sdX
Прочитайте их справочные страницы, прежде чем использовать их.
Сначала проверьте, является ли это файловой системой журналирования.
"Журналируемая файловая система - это файловая система, которая отслеживает изменения, еще не зафиксированные в основной части файловой системы, записывая намерения таких изменений в структуре данных, известной как" журнал ", которая обычно представляет собой циклический журнал. В случае сбоя системы или сбоя питания такие файловые системы могут быть быстрее подключены к сети с меньшей вероятностью повреждения ".
Затем вы можете попробовать Gparted для проверки согласованности и посмотреть, что инструмент может сделать для вас.