Как я могу заставить файловую систему ext4 стать грязной, чтобы принудить fsck?

Вопрос или проблема

Я тестирую программное обеспечение, которое монтирует диски из внешнего хранилища на Linux-хосте по запросу.

В рамках этого есть функция, которая, если монтирование не удаётся из-за ошибки файловой системы, запускает fsck.

Чтобы протестировать эту функциональность, мне нужно пометить что-то в файловой системе ext4 так, чтобы это привело к ошибке монтирования, но могло быть исправлено с помощью fsck.


Я пытался пометить бит грязного (dirty bit) через debugfs – это не привело к ошибке монтирования.

Я пытался изменить магическое число на какое-то случайное значение – это не является вариантом, так как нам нужно магическое число (ограничение инструмента).

Я пытался установить дескриптор группового битового массива или блоки в 0 – это тоже не сработало.

Есть ли какой-либо последовательный способ достичь этого?

Ответ или решение

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

Обзор проблемы

Ваша цель – заставить файловую систему ext4 быть в состоянии, когда при попытке монтирования она будет определять наличие ошибок и, следовательно, не сможет завершить процесс монтирования. Многие подходы, такие как изменение битов "грязности", как вы упомянули, не всегда работают. Вместо этого сосредоточим внимание на методах, которые точно вызовут ошибку монтирования.

Способы принудительного формирования состояния "грязной" файловой системы

  1. Использование e2fsck для повреждения структуры:
    Если вы хотите вывести файловую систему в "грязное" состояние, можно использовать tune2fs, чтобы сделать ее неизменяемой.

    sudo tune2fs -O uninit_bg /dev/sdX1
    sudo e2fsck -f /dev/sdX1

    Параметр uninit_bg специально предназначен для работы с группами блоков, что может вызвать ошибки на этапе монтирования.

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

    sudo debugfs -w /dev/sdX1
    debugfs:  set_super_value field_name value

    Замена значения, например, поля s_state может привести к ошибке при монтировании.

  3. Принудительное результирующее состояние "сырое":
    Если вы хотите вызвать сбой при монтировании из-за отключения электропитания или другого сбоя, вы можете сделать это безопасный способ с помощью of sync:

    Убедитесь, что на файловой системе есть процесс записи, например:

    echo "Тестовая запись" > /mnt/your_mount_point/testfile.txt
    sync

    Затем инициируйте kill -9 на процессе, что нарушит завершение записи.

  4. Создание неправильной записи в журналах:
    Используйте debugfs для изменения данных блоков, связанных с журналом.

    sudo debugfs -w /dev/sdX1
    debugfs:  set_block 0x100 0xFFFFFFFFFFFFFFFF

    Это может пометить систему как "грязную".

Заключение

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

Также не забывайте, что вызов fsck на не корректно размонтированной файловой системе может привести к потере данных, поэтому сделайте дополнительные копии и тестируйте на непродуктивных системах.

Оцените материал
Добавить комментарий

Капча загружается...