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

Gro*_*uez 19 ext4

我有一个运行 linux 的系统,它必须长时间无人值守运行。系统采用工业CF卡存储。大多数情况下没有写入闪存,尽管有时可以修改一些配置数据/设置。系统必须能够抵抗电源故障。

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

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

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

vor*_*aq7 13

我将首先说,就我而言,EXT(在它的所有化身中)是一个非常糟糕的文件系统——我在相对较少的 Linux/EXT 中看到了更多“有趣”的文件系统损坏案例{2,3,4} 我管理的系统比我有机会使用的相对大量的 Not-EXT 文件系统所拥有的系统多。
如果可能的话,尝试选择一个更健壮的文件系统。当不可避免的事情发生时,你会感谢自己。


话虽如此,我所有的个人偏见都被公开并搁置一旁,EXT4 确实具有我能想到的三个功能,可以帮助您:

  • 日记
    EXT4可以是一个日志文件系统,如果你希望它是。启用日志功能(并将数据日志模式专门设置为journalviatune2fs或作为挂载选项)。
    这会导致性能下降,因为所有数据必须在“提交”到文件系统之前写出到 EXT 日志(每次写入基本上发生两次),但它确保您始终可以恢复,只要日志重放将使您没有任何问题。

  • SYNChronous Mounts
    当安全至上时,使用该sync选项挂载文件系统总是一个好主意。这会立即强制所有写入磁盘 - 这同样会影响性能,但如果您预计电源故障或随机陌生人将 CF 卡拔出,这是一个好主意。

  • 尽可能地限制可写文件系统 这不是特定于 EXT 的,但是非常普遍的 Linux 哲学“只需创建一个大的根分区并将所有内容都转储到其中”,坦率地说,是愚蠢的。创建适当的文件系统结构(//var/usr/home等...),并以只读方式挂载尽可能多的文件系统。
    为了安全起见,这曾经是 unix 系统的常见建议,但在您的情况下,它有一个额外的好处:如果您不能写入文件系统,您就不能破坏它。

  • 除了“尽可能多地限制可写文件系统”之外:在 debian wiki 中是一个指南,可以通过许多关于需要特殊处理的守护进程的示例来做到这一点。它也应该对大多数其他发行版有效:http://wiki.debian.org/ReadonlyRoot (3认同)

Gio*_*ldo 12

我一直在为船上的自动化构建一个系统,有一个先决条件:每时每刻都可能功率下降,并且一切都必须再次正确助推。

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

关于您的具体问题,您应该启用EXT4日志以获得更快的 fsck(几秒),使用data=journal挂载选项,降低提交选项或使用同步选项以保持缓冲区始终为空。

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

  • 日志的主要积极影响之一是从崩溃中恢复是重放最新的未提交更改的问题,这比检查整个卷是否不一致要快得多。如果这是您的主要问题,那么您应该使用默认的 EXT4 并感到高兴。 (2认同)
  • @Grodriguez“丢失”数据可以是“文件不再存在”到“为什么我的数据库中有一大块内核?” - 这一切都取决于什么是“丢失”:) (2认同)

小智 7

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

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