XFS RHEL7.3 冷重启,文件截断

XFS RHEL7.3 Cold Reboot, file truncate

我们正在将我们的应用程序从 RHEL6.5 ext4 升级到 RHEL7.3 XFS。我们观察到,使用 XFS 文件系统执行冷重启(从系统控制台 - iLO)会将我们的一些文件(每隔几秒写入磁盘)截断为零字节。不仅是我们的应用程序,而且假设我们使用“>”将一个命令的输出重定向到一个文件,这些文件在冷重启后消失。我们知道有关明确执行 fysnc 的建议。但是 Java 中的代码是什么?我们 python 脚本中的案例怎么样?

现在我们左右为难,到底是坚持使用 ext4 还是 XFS。 XFS 具有优势,将是我们的首选。我们无法相信世界其他地方还不知道这一点。这是 RHEL 特有的问题(我们看到一个类似的问题已在 RHLE6.5 https://bugzilla.redhat.com/show_bug.cgi?id=845233 中修复)或者这是现代文件系统的预期行为?

Java 和 Python 都在它们的 I/O 库中提供对 fsync 操作的访问,所以这不是真正的借口,但我明白你的意思.

但是,这方面的关键 ext4/XFS 区别通常是其他方面。顺子

echo contents > file

即使使用 ext4,有时也会留下一个零长度的文件,特别是当写入的内容不仅仅是几个字节时。保证在 ext4(使用默认配置)上工作的是:

echo contents > file.new
mv file.new file

使用 ext4-with-defaults,这将永远不会留下部分写入的 file(只有 file.new 可能不完整)。 XFS在这方面有所不同,重命名之前需要fsync编辑内容。

2014年,Eric Sandeen proposed a patch to align the XFS behavior with what ext4 does,但当时不受欢迎,没有合并。也许从那时起潮流已经转变,今天重新提议的补丁是可以接受的。 (我在当前代码中没有看到刷新,但我不是 XFS 开发人员。)

如果这会阻止您迁移到 XFS,您绝对应该提交支持请求。尽管为此偏离上游内核确实不是一个选择,但此类客户需求始终是重要的反馈。