Вопрос или проблема
Я тестирую программное обеспечение, которое монтирует диски из внешнего хранилища на хосте с Linux по некоторым запросам.
В рамках этого есть функция, которая, если монтирование завершается неудачей из-за ошибки файловой системы, выполняет fsck.
Чтобы протестировать эту функциональность, мне нужно отметить что-то в файловой системе ext4, что приведет к сбою монтирования, но может быть исправлено с помощью fsck.
Я пытался установить грязный бит через debugfs – это не приводит к сбою монтирования.
Я пробовал изменить магическое число на случайное значение – это не вариант, так как нам нужно магическое число (ограничение инструмента).
Я пытался установить некоторые битовые карты или блоки дескрипторов групп в 0 – это тоже не сработало.
Существует ли какой-либо последовательный способ, как этого можно достичь?
Смотря на исходный код, я думаю, что вы хотите вызвать ошибку EFSCORRUPTED
.
Мне кажется, что наиболее многообещающая строка – это эта:
if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
ext4_msg(sb, KERN_ERR, "коррупция корневого инода, выполните e2fsck");
iput(root);
err = -EFSCORRUPTED;
goto failed_mount4;
}
Это проверяет, что корневая директория соответствует ожиданиям. Самым безопасным параметром для изменения будет размер, который, как я думаю, можно реконструировать из списка инодов. Вы можете установить размер корневой директории в 0 с помощью этой команды:
$ printf '\n\n\n0' | debugfs -w fs_image -R 'modify_inode /'
И если вы хотите, вы можете принудительно вызвать fsck
, установив грязный бит (вы уже знаете об этом, но для полноты):
$ debugfs -w fs_image -R 'dirty'
Тогда, если я попытаюсь смонтировать это, я получаю эту ошибку:
коррупция корневого инода, выполните e2fsck
После fsck
похоже, что размер корневой директории восстанавливается правильно. Однако никаких гарантий нет, сначала сделайте резервную копию ваших данных, на всякий случай.
Ответ или решение
Чтобы заставить файловую систему ext4 быть «грязной» и инициировать проверку с помощью fsck, вам потребуется внести некоторые изменения на уровне метаданных файловой системы. Это может быть полезно для тестирования функциональности программного обеспечения, особенно если его задача заключается в обработке ошибок монтирования и автоматической активации fsck.
Процесс маркировки ext4 как грязной
Подготовка к работе с debugfs
-
Создайте резервную копию данных: Перед внесением изменений на уровне файловой системы крайне рекомендуется создать резервную копию всех важных данных. Работа с метаданными может привести к потере данных, если что-то пойдет не так.
-
Замонтируйте файловую систему в режиме только для чтения: Для начала работы с файловой системой через
debugfs
, убедитесь, что она не смонтирована в обычном режиме. Это можно сделать, выполнив:umount /path/to/mountpoint
Использование debugfs для изменения метаданных
-
Запустите debugfs: Для работы с файловой системой введите следующую команду:
debugfs -w /dev/sdXn
(где
/dev/sdXn
— это ваше устройство, на котором расположена файловая система ext4) -
Изменение размера корневого каталога: Основная идея заключается в том, чтобы установить размер корневого каталога (
i_size
) в0
, что вызовет ошибку при попытке монтирования. Сделайте это с помощью следующей команды:printf '\n\n\n0' | debugfs -w /dev/sdXn -R 'modify_inode /'
-
Установка dirty-бита (опционально): Вы также можете принудительно установить dirty-бит файловой системы, используя команду:
debugfs -w /dev/sdXn -R 'dirty'
Проверка результата
- Проверка монтирования: Теперь попробуйте смонтировать файловую систему:
mount /dev/sdXn /path/to/mountpoint
Если все сделано правильно, вы должны увидеть сообщение об ошибке, похожее на следующее:
corrupt root inode, run e2fsck
Это сообщение указывает на то, что файловая система повреждена, и требуется запуск
fsck
.
Запуск fsck для исправления
- Запустите fsck: После того как монтирование завершилось с ошибкой, выполните следующие команды для проверки и исправления файловой системы:
e2fsck -f /dev/sdXn
Важные примечания
- Тестирование на отдельном диске: Рекомендуется проводить такие тесты на нечувствительных данных и отдельном диске, чтобы избежать потери данных на рабочей системе.
- Возможные риски: Внесение изменений в метаданные файловой системы несет риск нарушения целостности данных. Используйте эти команды и методы с осторожностью, особенно в продуктивной среде.
Следуя этим шагам, вы сможете заставить файловую систему ext4 быть "грязной" и инициировать ее проверку с помощью fsck, что успешно позволит протестировать вашу функцию обработки ошибок.