Создать повреждение файловой системы на встроенном устройстве - PullRequest
0 голосов
/ 14 февраля 2020

Я работаю над проектом, в котором мы используем файловую систему (NAND Fla sh) на нашем устройстве.

Мы заметили, что иногда, когда у нас отключается питание или мы перезагружаем программное обеспечение (отладчиком).

Файловая система повреждена после перезапуска.

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

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

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

Кто-нибудь намекает?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

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

Спонтанное изменение некоторого случайного местоположения, асинхронного и независимого от операций файловой системы, вряд ли будет обнаружено или исцелено журналированием. Возможно, это маловероятный режим отказа, а не режим отказа, который вы испытываете при потере мощности.

NAND fla sh сам по себе ненадежен, а контроллеры NAND имеют встроенные средства обнаружения и исправления ошибок .

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

Адреса «состояния отказа» при ведении журнала должны иметь неполный операционный файл - файл, открытый для записи, данные которого были записаны, но не закрыты в момент потери питания или сброс.

Вместо того, чтобы попытаться вызвать какое-либо повреждение, лучше выполнить репликацию условий, в которых ранее произошел сбой, с помощью тестового кода, который непрерывно создает и записывает файлы и проверяет их действительность, в то время как асинхронно и случайное включение / выключение питания (в идеале через реле или «умный» источник питания, который может управляться, например, P C или самим ИО), или просто случайное прерывание по таймеру, которое выдает сброс, асинхронный для файловых операций.

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

0 голосов
/ 16 февраля 2020

Я собираюсь ответить на вопрос, на который вы хотите ответили, а не на вопрос, который вы задали.

Как сказал @Clifford, то, что вам нужно для проверки вашего нового механизма, не является ввести коррупцию, а скорее ввести условие, похожее на сбой питания.

Как этого добиться, зависит от того, как вы выполняете тестирование и разработку.

Если ваша файловая система взаимодействует напрямую с NAND микропрограммное обеспечение, и вы не можете запустить его на симуляторе, вы должны go полностью и ваш тестовый костюм на самом деле автоматизирует отключение питания от программного обеспечения (для этого есть программно-управляемые коммутаторы).

Если ваша файловая система может работать на любом блочном устройстве, вы можете сделать следующее:

  1. Создать файловую систему btrfs на тестовом компьютере.
  2. Создать большой файл в файловой системе btrfs .
  3. Включите вашу файловую систему в большой файл и смонтируйте его.
  4. Выполните много операций с подключенной файловой системой.
  5. Пока операции выполняются, сделайте снимок btrfs.
  6. Размонтируйте вашу файловую систему.
  7. Размонтируйте brtfs и смонтируйте снимок.
  8. Перемонтируйте вашу файловую систему в снимок файла loopback.
  9. Проверка соответствия файловой системы.

Очевидно, это не обязательно должен быть brtfs, подойдет любая файловая система с поддержкой снимков.

...