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


18

我有一个运行linux的系统,该系统必须长时间无人值守。系统使用工业CF卡进行存储。在大多数情况下,虽然有时可以修改某些配置数据/设置,但不写入闪存。系统必须能够抵抗电源故障。

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

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

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

Answers:


11

我已经在构建用于船上自动化的系统,并且有一个先决条件:在每时每刻,电源可能会下降,并且所有东西都必须再次正确启动。

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

关于您的特定问题,应启用 EXT4日志以使其具有更快的fsck(几秒钟),使用data = journal挂载选项,降低commit选项或使用sync选项以使缓冲区始终为空。

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


好!如果应用程序没有写入太多数据,您应该对sync选项感到满意。
Giovanni Toraldo'2

1
最好看的地方是Linux内核文档:kernel.org/doc/Documentation/filesystems/ext4.txt启用data = journal和commit = nrsec以最大程度地减少任何潜在的数据丢失(* == default)
Giovanni Toraldo

定时提交绝对有帮助-我相信您只能降低1秒的间隔(尽管对于写密集型操作会产生重大的性能损失),但是如果您无法承受1秒的数据丢失,则会遇到更大的问题;)
voretaq7 '02

2
日志记录的主要积极作用之一是,从崩溃中恢复只是重播最新的未提交更改,这确实比检查整个卷中的不一致情况要快。如果这是您的主要问题,那么您应该使用默认的EXT4并感到高兴。
Giovanni Toraldo'2

1
@Grodriguez“丢失”数据可以是“文件不再存在”到“为什么数据库中有内核的一部分?”之类的东西。-这一切都取决于什么是“丢失” :)
voretaq7

12

首先,我要说的是,EXT(就其所有形式而言)是一个非常糟糕的文件系统- 在相对少数的Linux / EXT中,我看到了更多“ 有趣 ”的文件系统损坏案例我管理过的{2,3,4}系统比我曾经使用过的相对大量的Not-EXT文件系统中的系统要多。
如果有可能,请尝试选择更强大的文件系统。当不可避免的事情发生时,您会感谢自己的。


话虽这么说,但我所有的个人偏见都被公开和抛在一边,EXT4确实具有三个可以帮助您的功能:


  • 如果需要,日记 EXT4可以是日记文件系统。启用日记功能(并专门将数据日记模式设置为journalvia tune2fs或作为安装选项)。
    这会导致性能下降,因为所有数据都必须先写入EXT日志,然后才能“提交”到文件系统(每次写入基本上发生两次),但它可以确保您始终可以恢复到日志重放将使您无任何损失的程度问题。

  • SYNC棘手的挂载
    当安全性至高无上时,使用该sync选项挂载文件系统始终是一个好主意。这会立即将所有写入都强制写入磁盘-再次降低性能,但是如果您预计电源故障或随机的陌生人会将CF卡拔出,则是个好主意。

  • 尽可能限制可写文件系统 这不是EXT特有的,但是坦率地说,“仅创建一个大的根分区并将所有内容转储到其中”这太普遍的Linux哲学是愚蠢的。创建一个适当的文件系统结构(//var/usr/home,等...),并安装尽可能多的文件系统的只读越好。
    出于安全性考虑,这通常是unix系统的常见建议,但是在您的情况下,它还有一个额外的好处:如果无法写入文件系统,则无法破坏它。


完全同步挂载的功能等同于sync每次写入后都简单地调用-同步挂载将(或者至少不应该)从文件系统写调用返回,直到数据在磁盘上为止。调用sync将刷新所有挂起的写操作,但是在写返回到调用sync返回之间还有一个窗口(但是很短),在此期间可能尚未将数据写出到磁盘。
voretaq7'2

您推荐哪个文件系统?您可以量化您的体验吗?
Mark Wagner

@embobo我的经历完全是轶事:我从未对EXT系列文件系统进行过压力测试,但是我想到的一个事件是当我有一个Squid服务器遭受“所有的inode到哪里去了!!?” -文件系统被踩踏,随后以某种方式标记为干净,但是每个inode都以某种方式处于声明但从未引用的状态。修复该特定故障的fsck肯定是EPIC(我们只制作了一个新的FS)。那一天,我对EXT系列文件系统失去了信心。
voretaq7 '02

@Grodriguez Re:日志记录,这三个选项是data=journal(如上所述),data=ordered(记录了元数据。在将元数据提交到文件系统之前,数据已提交到磁盘)和data=writeback(实际上是没有日志记录/保护数据- 坏事可能在崩溃后发生,例如文件中间的垃圾)。我相信ordered这些天是大多数Linux发行版的默认发行版……
voretaq7

2
除了“尽可能限制可写文件系统”之外:在debian wiki中,该指南还提供了许多有关需要特殊处理的守护程序示例的精确指南。它对大多数其他发行版也应该有效:wiki.debian.org/ReadonlyRoot
krissi 2012年

7

EXT4听起来并不是您系统的最佳选择。我建议看一下日志结构的文件系统。通过将数据视为针对虚拟流的恒定写入更新流,并使用指向最新“头”的指针来工作。通过将数据和元数据写入存储,然后更新指针来进行更新。如果在写入之后但指针更新之前发生崩溃,则丢失了最新数据,但文件系统是一致的。

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


1

我对您建造的设备很感兴趣。您在使用不太适合的文件系统时追求嵌入式设备的可靠性。

Ext4(和家族)是一个很好的通用文件系统,在各种硬件和用例上,我有数十亿小时的使用时间。但是,您的要求实际上并不适合ext4。voretaq7和Giovanni的指针将帮助您从ext4的使用中获得最大收益,但是真正的答案是使用更适合您要求的东西。史蒂夫给了您几个选择。如果您继续从ext4 FS上获取能量,最终将一团糟。

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

如果您打算将该产品广泛部署/推向市场,则可以选择使用更合适的产品。或者,您可以根据业务决策来支持一定比例的设备,这些设备每年都会变砖,并且需要更换或手动干预来恢复它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.