У меня есть сценарий, в котором 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"
Вы увидите, что файловая система имеет первичный суперблок и некоторое количество резервных суперблоков. Если вы готовы что-то сломать, обратите внимание на несколько вещей в этом выводе:
Теперь уничтожьте ваш основной суперблок:
dd if=/dev/zero of=/dev/sda1 bs=X count=1 seek=Y
Поздравляю! Ваша файловая система теперь сломана.
Размонтируйте его, если он установлен:
umount /dev/sda1
Затем запустите fsck, указав местоположение одного из резервных суперблоков, указанных ранее:
fsck -b Z /dev/sda1
Теперь смонтируйте куда-нибудь / dev / sda1, и вы должны вернуться к работе.