运行无人值守系统的“安全”ext4configuration

我有一个运行Linux的系统,必须长时间无人值守运行。 系统使用工业CF卡进行存储。 大部分时间没有写入闪存,虽然现在和然后一些configuration数据/设置可以修改。 该系统必须能够抵抗电力故障。

我想用这个ext4。 这种设置configurationext4的最佳方式是什么? 铭记:

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

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

我已经在build立一个船上自动化系统,有一个先决条件:在任何时候,权力可能会下降,一切都必须正确地再次推动。

我的解决scheme是构build一个基于Gentoo的initramfs系统,只有一个用于应用程序和configuration的rw文件夹(这是每个路由器/防火墙供应商使用的方法)。 这个解决scheme在处理系统升级时增加了额外的复杂性,但是保证系统一直会启动。

关于你的具体问题,你应该让EXT4日志启用更快的fsck(几秒钟),使用data = journal mount选项,降低提交选项或使用sync选项来保持缓冲区总是空的。

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

我将在前言中说,就我而言,EXT(在所有的化身中)都是一个非常糟糕的文件系统 – 在相对较less数量的Linux / EXT中,我看到了更多“ 有趣 ”的文件系统损坏情况我pipe理的{2,3,4}系统比我在有时使用的相当大数量的Not-EXT文件系统中所使用的系统要less。
如果可能的话尝试select更强大的文件系统。 当不可避免的事情发生时,你会感谢你。


这就是说,我所有的个人偏见被排除在外,EXT4确实有三个特点,我能想到的可以帮助你:

  • 日记
    EXT4可以是一个日志文件系统,如果你想要的话。 启用日志function(并且特别将数据日志模式设置为通过tune2fs journal或作为挂载选项)。
    由于所有数据必须在EXT日志被写入到文件系统之前写入(每一次写入基本上都会发生两次),但是这样可以确保您可以随时恢复,只要日志重放将使您无需任何操作问题。

  • SYNC hronous坐骑
    当安全性至关重要时,使用sync选项的文件系统总是一个好主意。 这迫使所有的写入磁盘立即 – 再次这是一个性能打击,但一个好主意,如果你希望电源故障或随机的陌生人拉出CF卡。

  • 尽可能限制可写入的文件系统这个并不是EXT专用的,但是非常常见的Linux理念是“只创build一个大的根分区并把所有内容都存入其中”,这很坦率地说是愚蠢的 。 创build一个适当的文件系统结构( //var/usr/home等等),并尽可能多地安装尽可能多的文件系统。
    对于unix系统来说,这个通常是为了安全起见,但是在你的情况下,它有一个额外的好处:如果你不能写入文件系统,你不能破坏文件系统。

EXT4听起来不像是你系统的最佳select; 我会build议看一个日志结构的文件系统。 这些工作通过将数据视为对虚拟stream的写更新的持续stream,使用指向最新“头”的指针。 通过将数据和元数据写入存储器,然后更新指针来进行更新。 在写入之后但在指针更新之前崩溃的情况下,最新的数据丢失,但是文件系统是一致的。

两个候选文件系统是LogFS和NILFS 。 两者都可以在主线Linux内核中使用。

我对你的build筑设备很感兴趣。 在使用不太适合的文件系统的时候,您已经掌握了embedded式设备的可靠性。

Ext4(和家庭)是一个很好的通用文件系统(我猜)在不同的硬件和用例上有数十亿小时的使用时间。 但是,你所要求的并不适合于ext4。 voretaq7和Giovanni的指针将帮助您在使用ext4时获得最佳效果,但真正的答案是使用更适合您的需求的东西。 史蒂夫给了你几个select。 如果你继续从ext4 FS拉电源,你最终会得到一个混乱。

如果这是一个你正在build立的一个系统,你应该select使用更适合的东西,或者接受在某些时候会有问题。 可能只有100次中的1次停电,或1000次中的1次。这可能足以让您承担风险,并且设备可能会长时间运行(几年),而无需任何人工干预。

如果这是您打算广泛部署/推向市场的产品,则可以select使用更适合的产品。 或者你做出商业决定,支持每年砖头设备的百分比,或者需要更换或手动干预来恢复它们。