围绕这个问题有几个现有的主题,但我所寻求的略有不同。我在嵌入式 Linux 上有一张 SD 卡,但它断电了。我也许可以在某个时候修改硬件,正确关闭等等。但现在,我只想找到一个文件系统,它可以在断电后毫不费力地幸存下来。数据丢失是可以接受的。我不想丢失比我当前正在编写的文件更多的文件,但我仍然宁愿丢失所有文件,也不愿面对“无法挂载”、“等待 10 分钟 fsck”或“无法创建新文件”文件由于此 inode 出现某些错误'。节目必须继续!
我正在努力确保这一点。我正在使用工业级组件,我有硬件看门狗,软件看门狗,内部,外部,init 重新启动程序,守护进程不断检查内存、文件描述符等等,我让看门狗看着我的看门狗,而其他看门狗又在看...但我似乎不能保证SD卡能够挂载和运行?
我现在最好的选择是在 SD 卡上使用 JFS,在我的安装中包含 fsck 和 fsck.jfs。(增加 600kb+ 占用我的内存和闪存。这很糟糕。)并在每次启动时运行 fsck(可能会增加很多启动时间。这有点糟糕。)。不过好像有点难过。
有谁知道更好的方法或更好的文件系统?
更新:在我的发行版中编译 e2fsprogs-libs(对 jfsutils 的依赖)似乎非常困难。我会研究 ZFS(虽然它不是我的发行版的原生。它似乎做了很多我不需要的事情。)
UPDATE2:有关我的系统和我的测试的更多信息:SD 卡存储是辅助的可选存储。SD 卡是 2Gb-8Gb 工业级 microSD。SD 卡是通过我的 rc 使用 mount -t 命令挂载的。选项“noatime”而不是“sync”。我的发行版是一个定制的模拟设备风格的 uClinux,有一个 3.10 内核和一个 1.21 busybox。我的主要存储是带有 jffs2 的 spi 闪存。我从来没有遇到过任何问题。我什至不知道是否有可用的 fsck.jffs2。另一方面,Nand flash ...但那是另一回事了。SD 卡的用途是存储测量数据。“监控”程序会将结果附加到文件中,并具有战略性的同步位置。当文件超过给定大小时,将创建一个新文件。当达到给定数量的文件时,最旧的文件将被删除。如果当前测量文件因断电而丢失,也不是灾难。文件通常为 50-100kb,1 个结果通常为 1kb。这只是最初的开发阶段。没有什么是固定的。这是我第一次在嵌入式系统中处理非闪存文件系统。(我的 x86 服务器上有 ext4。)
我从 vfat 开始。默认文件系统。(我认为工厂可能有选择它的理由。如果一切正常,我真的不太在意。)我从未在嵌入式 vfat 设备中看到任何功率损耗问题。不过,我在 WinCE 中遇到过 FAT 问题。但是,当我的“监视器”程序达到 100-200 个文件时,它拒绝创建更多文件。似乎 FAT 在根目录中有一个特殊的文件限制问题,在子目录中有一个稍大的问题。我需要能够在 1 个目录中创建 500-1000 个文件。所以 vfat 不行。
然后我切换到ext2。不过,我没有在启动时插入 fsck。(不知道我必须这样做。)一天之内,由于“inode …