Такие методы, как ведение журнала, защищают от незапланированного отключения, которое может привести к тому, что незавершенные операции приведут структуры данных в недопустимое состояние. Это не совсем то же самое, что "коррупция" в более широком смысле.
Спонтанное изменение некоторого случайного местоположения, асинхронного и независимого от операций файловой системы, вряд ли будет обнаружено или исцелено журналированием. Возможно, это маловероятный режим отказа, а не режим отказа, который вы испытываете при потере мощности.
NAND fla sh сам по себе ненадежен, а контроллеры NAND имеют встроенные средства обнаружения и исправления ошибок .
Дело в том, что примененные вами методы предотвращают недопустимость файловой системы вместо того, чтобы исцелять повреждение, поэтому простое повреждение файловой системы не докажет эффективность вашего решения; это просто повредит файловую систему.
Адреса «состояния отказа» при ведении журнала должны иметь неполный операционный файл - файл, открытый для записи, данные которого были записаны, но не закрыты в момент потери питания или сброс.
Вместо того, чтобы попытаться вызвать какое-либо повреждение, лучше выполнить репликацию условий, в которых ранее произошел сбой, с помощью тестового кода, который непрерывно создает и записывает файлы и проверяет их действительность, в то время как асинхронно и случайное включение / выключение питания (в идеале через реле или «умный» источник питания, который может управляться, например, P C или самим ИО), или просто случайное прерывание по таймеру, которое выдает сброс, асинхронный для файловых операций.
Вам необходимо понять, как работает ваша система журналирования. В самом простом случае он просто оставит файл в том состоянии, в котором он был до открытия , поэтому он не предотвращает потерю данных, просто приводит к ошибкам структуры данных файловой системы, приводящим к невозможности использования файлов или всей файловой системы.