Как заставить раздел ext3 перейти в состояние "ошибка"?

У меня есть скрипт, где fsck вызывается в случае, если файловая система находится только в состоянии "ошибка". Я хотел бы проверить это. К сожалению, я не знаю, как форсировать состояние "ошибка" на ext3 разделе.

Единственная идея, которая у меня есть, это сначала запустить fsck на смонтированном разделе. Поскольку, как только появляется предупреждение, что файловая система может быть повреждена, я ожидаю, что это может помочь. Надо попробовать. Между тем, может быть, кто-нибудь знает ответ уже?

2 ответа

Ну, вот оно: debugfs -w -R "ssv state 2" / dev / sda1

debugfs является частью пакета e2fsprogs, предназначенного для низкоуровневого доступа к файловым системам ext2/3.

-w - work in r/w;
-R - run one command and exit;
ssv - set superblock value, self-describing;
state - just a name of the field containing state of filesystem.

Коды:

0 - not clean
1 - clean
2 - not clean with errors

Я немного поиграл с этим в виртуальной машине. Моей первоначальной мыслью было уничтожение основного суперблока раздела. Это не заставляет dumpe2fs сообщать о "состоянии файловой системы" "ошибка", но (очевидно) нарушает ваш раздел ("Плохое магическое число в суперблоке") ... так что, возможно, это все, что вам нужно для тестирования. Запуск fsck для раздела в этом состоянии и проверка значения $? сообщит о состоянии 8 (операционная ошибка).

В любом случае, это опасно, и я бы не советовал делать это в любой системе, где у вас есть данные, которые вам небезразличны. Попробуйте в ВМ, как я сделал.

Вы можете получить некоторую информацию о файловой системе следующим образом:

dumpe2fs /dev/sda1 | egrep "state|superblock|Block size"

Вы увидите, что файловая система имеет основной суперблок и некоторое количество резервных суперблоков. Если вы готовы что-то сломать, обратите внимание на несколько вещей в этом выводе:

  • "Размер блока: X": обратите внимание на X
  • "Первичный суперблок у Y": обратите внимание на Y
  • "Резервный суперблок в Z": запишите хотя бы один Z

Теперь уничтожьте ваш основной суперблок:

dd if=/dev/zero of=/dev/sda1 bs=X count=1 seek=Y

Поздравляем! Ваша файловая система теперь повреждена.

Размонтируйте его, если он смонтирован:

umount /dev/sda1

Затем запустите fsck, указав расположение одного из резервных суперблоков, отмеченных ранее:

fsck -b Z /dev/sda1

Теперь смонтируйте /dev/sda1 где-нибудь, и вы должны вернуться в дело.

Другие вопросы по тегам