JFFS2 поверх MTD - действительно ли это безопасно при сбое питания (Linux 4.9.67 с исправлением RT)?
Мы настроили JFFS2 для нашей цели / устройства (ARM, NOR raw FLASH) для хранения информации / параметров конфигурации.
JFFS2 был установлен в нашей системе с помощью следующих команд:
/busybox mkdir /mnt/nor_flash/part2
/busybox mount -t jffs2 /dev/mtdblock6 /mnt/nor_flash/part2
Попытка вызвать в системе события отключения питания во время (циклических) операций write() показала, что файл конфигурации поврежден. При повторном включении питания программа не может открыть файл (номер ошибки 2). Однако обратите внимание, что файл появляется (ls) в системе, и мы можем скопировать, hexdum или vi, хотя его содержимое выглядит поврежденным. На всякий случай, когда я выполняю циклическую запись () в файл без отключения питания, файл может быть открыт () нормально, и его содержимое в порядке.
Я внимательно изучил нашу конфигурацию ядра и наш код и попытался настроить некоторые параметры MTD/JFFS2 без каких-либо результатов. Прочитав много статей, постов и всю информацию, представленную на http://www.linux-mtd.infradead.org/ я зашел в тупик... Читая, я не мог понять следующий серьезный конфликт:
• Во многих статьях / руководствах заявляется, что JFFS2 поверх MTD не предназначен для блочных устройств и что он не безопасен (отключение питания). Например:
- Описание параметра MTD_BLOCK @ http://how-to.wikia.com/wiki/Howto_configure_the_Linux_kernel/drivers/mtd.
- "Могу ли я установить ext2 поверх устройства MTD?" @ http://www.linux-mtd.infradead.org/faq/general.html
- "Известно, что версия монтирования BusyBox не работает без устройства mtdblock" @ http://www.linux-mtd.infradead.org/faq/jffs2.html
- "Наиболее наивной реализацией уровня трансляции является драйвер mtdblock, который обеспечивает устройства /dev/mtdblockN с отображением 1:1 между логическим и физическим секторами. Иллюзия возможности перезаписи 512-байтовых секторов по отдельности обеспечивается чтением весь блок стирания в ОЗУ, изменение измененных секторов, а также перезапись и перезапись флэш-памяти. Это, очевидно, не обеспечивает надежности перед лицом потери питания или сбоев ядра, причем не только изменяемые сектора могут быть потеряны, но также большое количество данных, окружающих их. Тем не менее, драйвер mtdblock полезен для доступа только для чтения в сочетании с "обычными" файловыми системами, такими как Cramfs ". Цитата из книги "Создание встраиваемых Linux-систем", стр. 210 @ https://theswissbay.ch/pdf/Gentoomen%20Library/Operating%20Systems/Linux/OReilly.Building.Embedded.Linux.Systems.Aug.2008.eBook-DDU.pdf
• С другой стороны, все примеры монтирования JFFS2, предлагаемые в Интернете, используют устройство mtdblock (как мы), а не устройство mtd. Когда я пытаюсь использовать устройство mtd для выполнения монтирования JFFS2, монтирование не выполняется во время печати сообщения о том, что должно быть предоставлено блочное устройство…
Вопросы:
• Возможно ли сделать JFFS2 power fail safe? Если да, то как?
• Возможно ли смонтировать JFFS2 с устройством mtd или нет? Если да, то как?
• UBIFS поверх UBI поверх MTD - это альтернатива для достижения отказоустойчивой файловой системы?
Спасибо, Ниссим.