Назад | Перейти на главную страницу

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

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

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

Вот и он: 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, и вы должны вернуться к работе.