无人值守运行系统的“安全”ext4 配置

无人值守运行系统的“安全”ext4 配置

我有一个运行 Linux 的系统,必须长时间无人值守运行。该系统使用工业 CF 卡进行存储。大多数时候没有写入闪存,尽管偶尔可以修改一些配置数据/设置。系统必须能够抵御电源故障。

我想为此使用 ext4。为此类设置配置 ext4 的最佳方法是什么?请记住:

  • 绩效是不是根本没有问题(尤其是写入性能)
  • 断电时,系统应始终以干净状态启动,即使这意味着过去几秒钟写入的数据会丢失
  • 如果可以避免 fsck,那就更好了。

(我知道这个相关问题: 防止断电时 ext4/Linux 驱动器上的数据损坏

答案1

我曾致力于建设船舶自动化系统,并且有一个先决条件:随时都有可能断电,而一切都必须再次正确地启动。

我的解决方案是构建一个基于 Gentoo 的 initramfs 系统,其中只有一个用于应用程序和配置的 rw 文件夹(这是每个路由器/防火墙供应商使用的方法)。此解决方案在处理系统升级时增加了额外的复杂性,但可以确保系统始终可以启动。

关于你的具体问题,你应该保留 EXT4日志已启用为了获得更快的 fsck(几秒),使用数据=日志安装选项,降低犯罪选择或使用同步保持缓冲区始终为空的选项。

参考文献:http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

答案2

首先我想说,就我而言,EXT(无论何种版本)都是一个非常糟糕的文件系统——我见过更多”有趣的“在我管理的 Linux/EXT{2,3,4} 系统中,文件系统损坏的情况比我偶尔使用的非 EXT 文件系统中出现的次数要多得多。
如果可能的话,尽量选择一个更强大的文件系统。当不可避免的事情发生时,你会感谢你自己。


话虽如此,抛开我所有的个人偏见,EXT4 确实有三个我能想到的功能可能会对你有所帮助:

  • 日记
    如果您愿意,EXT4 可以成为日志文件系统。启用日志功能(并特别将数据日志模式设置为journalviatune2fs或作为挂载选项)。
    这会导致性能下降,因为所有数据在“提交”到文件系统之前都必须写入 EXT 日志(每次写入基本上都会发生两次),但它确保您始终可以恢复日志重放所能达到的程度而不会出现任何问题。

  • SYNC赫罗纳斯坐骑
    当安全是最重要的时,使用该选项安装文件系统sync始终是一个好主意。这会强制所有写入立即写入磁盘 - 这又会影响性能,但如果您预计会出现电源故障或随机陌生人拔出 CF 卡,这是一个好主意。

  • 尽可能限制可写文件系统 这不是 EXT 特有的,但 Linux 中非常常见的哲学是“只需创建一个大的根分区并将所有内容转储到其中”,坦率地说,愚蠢的。创建适当的文件系统结构(/、、、、等等...),并将尽可能多的文件系统挂载为只读。出于安全考虑,这曾经是 unix 系统的常见建议,但对于您来说/var, 它还有一个额外的好处:如果您无法写入文件系统,您就不会损坏它。/usr/home

答案3

EXT4 似乎不是您系统的最佳选择;我建议您考虑使用日志结构文件系统。这些文件系统的工作原理是将数据视为针对虚拟流的持续写入更新流,并使用指向最新“头部”的指针。通过将数据和元数据写入存储,然后更新指针来进行更新。如果在写入之后但在指针更新之前发生崩溃,则最新数据将丢失,但文件系统是一致的。

两个候选文件系统是日志文件系统近端局部缺血模型. 两者均可在主线 Linux 内核中使用。

答案4

我对你构建的设备很感兴趣。你追求的是嵌入式设备的可靠性,但使用的文件系统却不太合适。

Ext4(及其系列)是一种出色的通用文件系统,(我猜)在各种硬件和用例上使用了数十亿小时。但是,您的要求与 ext4 并不相符。voretaq7 和 Giovanni 的建议将有助于充分利用 ext4(如果您必须这样做的话),但真正的答案是使用更适合您要求的东西。Steve 为您提供了几个选项。如果您继续从 ext4 FS 中获取电力,最终会陷入混乱。

如果您正在构建的是一次性系统,则应选择使用更合适的系统,或者接受某个时候会出现问题。可能只有 100 次或 1000 次中才会出现一次停电。这可能足以让您承担风险,并且该设备可能会运行很长时间(数年),而无需任何人工干预。

如果您打算广泛部署/将该产品推向市场,您可以选择使用更合适的产品。或者您可以做出业务决策,支持每年会变砖的一定比例的设备,这些设备要么需要更换,要么需要人工干预才能恢复。

相关内容