Обеспечение безопасности ext4
ext4 не совсем подходит для этого; В худшем случае всегда происходит сбой питания, когда ваш раздел RW и портит файловую систему.
Несмотря на то, что они предназначены для необработанных устройств NAND, файловая система регистрации, такая как jffs2 или yaffs, все еще может быть полезной. Они имеют полезную особенность в том, что их формат на диске больше похож на список, а не на дерево, поэтому новые данные, как правило, упаковываются более тесно и, таким образом, с меньшей вероятностью удаляют относительно статичные части файловой системы.
Я не могу комментировать, как сделать ext4 «безопасной» в этих условиях; и структура файловой системы, и fsck не знают о распространенных режимах сбоев флэш-устройств (в частности, что во время любой записи существует длительный период, когда целый блок данных недопустим.) Это поведение, конечно, специфично для контроллера на CF-карта, так что в любом случае она не очень предсказуема.
Самым безопасным и предсказуемым способом, который я могу придумать, является тот же макет данных флип-буфера, который используется в небольших встроенных устройствах. То есть у вас есть две области записи (два раздела). В любой момент времени, по крайней мере, одна из них должна быть согласованной. Когда вы хотите написать, выберите более старый из двух. Если вы включите питание и обнаружите несогласованность в буфере A, скопируйте содержимое буфера B через (и не разрешайте никакие записи в B за это время.)
Управление монтированием / перемонтированием
Я бы написал демон, который управляет размонтированием / перемонтированием от имени всех процессов в системе. Это имеет ряд преимуществ:
- вы выделяете логику umount / remount, и вам нужно реализовать ее только один раз
- процессам, которые хотят писать, не нужны привилегии root
- Вы можете встроить какой-нибудь сторожевой таймер, чтобы раздел не оставался RW слишком долго. Если это так, вы можете убить процесс, нарушающий работу (возможно, откат) и remount-RO.
- вы можете измерить, как долго вы монтируете RW, что дает вам некоторое представление о риске, связанном с обновлением