I am working on an embedded application that uses NAND flash for storage. As it looks now, we won't use Linux or any other RTOS. The application must handle unexpected power downs.
We have been looking on different file system solutions, including YAFFS2, JFFS2, FAT+FTL as well as solutions from HCC Embedded.
I have heard FAT+FTL is a normal choice, but I am worried about data loss in case of unexpected power downs as well as performance. Would be grateful if anyone could share insights and experience about this
FAT-FTL is a "normal choice", but not necessarily a good choice. YAFFS2 is newer than JFFS2 and seems to be faster and more scalable for large NANDs. This presentation of the "Embedded Linux Conference Europe" compares these two and other flash file systems.
Another solution is LogFS (note: log stands here for logorithmic, not for log-structured). It should also be more scalable, but I have no idea how muture it is.
There's UBIFS. The only implementation I know of is in the Linux kernel, and it depends on the Linux kernel's UBI interface. However, the fundamental algorithms should be implementable without too much trouble in whatever environment you are using. As for production-readiness, Nokia uses UBIFS in their N900 smartphone, and plug computers based on the SheevaPlug have support for it, too. I have found the Linux implementation to be reliable, even on flaky hardware that likes to reset itself at random. Unlike JFFS2, UBIFS does not need to read the entire filesystem at startup.
You may want to reconsider your "no Linux" decision, since using Linux would make it a lot easier to use UBIFS.
There is a commercial vendor called DataLight which offers a robust flash file system, but of course it's not free.
They have an interesting white paper (PDF) (take with a grain of salt) on performances.
来源:https://stackoverflow.com/questions/657586/what-is-a-good-filesystem-for-embedded-nand-drives