在 SD 卡上为 GNU/Linux 选择文件系统

gsp*_*spr 35 linux sd-card filesystems

我有一个在 SD 卡上运行的基于 ARM 的嵌入式系统。它目前是使用 ext3 作为文件系统的 Debian GNU/Linux。当我要重新安装系统时,我开始考虑是否要更改为对闪存更友好的文件系统。我听说过 JFFS2、YAFFS2 和 LogFS,它们似乎都适合这份工作。你会推荐哪一个?另外,我听说有很多 ext4 改进以更好地适应 SSD 磁盘;我是否可以将其解释为运行 ext4 应该没问题?在这种情况下,我需要特别考虑什么?

我想系统的使用很重要。但是为了一般性,想象一下它会做标准的桌面东西(即使它实际上是一个基于 ARM 的小型系统)。

感谢您的任何答复。

编辑:维基百科告诉我(在“需要引用”的声明中)可移动闪存卡和 USB 闪存驱动器具有内置控制器来执行磨损均衡和纠错,因此使用特定的闪存文件系统不会增加任何好处。因此,我倾向于坚持使用 ext 文件系统。

Oll*_*lli 19

关于闪存文件系统的优秀文章。

谈论闪存文件系统时的重要问题如下:什么是磨损均衡?维基百科文章。基本上,在闪存盘上,您可以写入有限的次数,直到块变坏。之后,文件系统(如果硬件上没有内置的磨损均衡管理,就像 SSD 那样)必须将该块标记为无效,并避免再使用它。

典型的文件系统(例如 ReiserFS、NTFS、ext3 等)是为硬盘设计的,没有这样的限制。

JFFS2

包括压缩和优雅的磨损均衡保护。

YAFFS2

  • 唯一的区别是:成功卸载后,挂载时间短。
  • 实现一次写入属性:一旦数据写入一个块,就不需要重写它。这很重要,因为它可以减少磨损。

日志文件系统

  • 不是很成熟,但已经包含在 Linux 内核树中。
  • 支持比 JFFS2/YAFFS2 更大的文件系统,没有问题。

优必思

  • 比LogFS更成熟
  • 写缓存支持
  • 关于可扩展性:文章。在大磁盘上,性能优于 JFFS2

分机4

如果没有驱动程序或卡(例如 SSD 驱动器确实具有内部磨损平衡,至少通常情况下)处理磨损平衡,那么 ext4 不是最好的主意,因为它不适合原始闪存使用。

哪一个是最好的?

当然,这取决于使用和支持。从我在互联网上阅读的内容来看,我会推荐 UBIFS。对大型文件系统的良好支持,成熟的开发阶段,足够的性能并且没有巨大的缺点。

  • @gspr 是正确的:SD 有一个闪存转换层,而 JFFS2、YAFFS2、LOGFS 和 UBIFS 都是为*非托管*闪存设计的。SD 的选项是传统的块设备文件系统,如 ext2 / ext3 / ext4。 (16认同)
  • 谢谢,这是非常有用的信息!然而,来自 UBIFS 网站的“大红字”说:“人们在处理 UBIFS 时必须了解的一件事是 UBIFS 与任何传统文件系统都非常不同——它不能在块设备(如硬盘驱动器)之上工作, MMC/SD 卡, USB 闪存驱动器, SSD 等). UBIFS 被设计为在原始闪存之上工作, 这与块设备无关. 这就是为什么 UBIFS 在 MMC 卡等上不起作用 - 他们在外界看来就像块设备,因为它们在硬件中实现了 FTL(闪存转换层)支持。” (6认同)
  • 不错的答案,另外还有来自三星的 F2FS,也是非常有前途的系统,很新。 (3认同)

小智 12

我面临同样的问题,也做了一些研究。最终我决定使用 ext2。

似乎有些 SDHC 卡在硬件层实现了自己的磨损均衡。如果您可以获得具有磨损均衡内置功能的 SDHC 卡。

提供磨损均衡的文件系统会干扰闪存级磨损均衡,因此使用它们实际上对闪存不利(上面引用的 IBM 文章讨论了 JFFS 如何做到这一点,所以很明显这行不通与闪存级 WL)。我决定我不需要 ext3 的日志,因为我没有在上面存储关键数据,而且我通常会定期备份(cron)。

我还将 /tmp 和 /var 挂载为 tmpfs 以加快速度。如果你有足够的内存,你应该这样做(但一定要定期轮换或删除你的日志)

提示:使用“noatime”选项挂载您的 ext SD 卡