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