2

Мы хотим проверить файловую систему на дисках как /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 ответа2

0

Вы используете 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

Прочитайте их справочные страницы, прежде чем использовать их.

0

Сначала проверьте, является ли это файловой системой журналирования.

«Журналируемая файловая система - это файловая система, которая отслеживает изменения, еще не зафиксированные в основной части файловой системы, записывая намерения таких изменений в структуре данных, известной как" журнал ", которая обычно представляет собой циклический журнал. В случае сбоя системы или сбоя питания такие файловые системы могут быть быстрее переведены в оперативный режим с меньшей вероятностью повреждения ».

Затем вы можете попробовать Gparted для проверки согласованности и посмотреть, что инструмент может сделать для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .