我们正在将我们的应用程序从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中看到了一个类似的问题),或者这是现代FileSystems的预期行为?
答案 0 :(得分:1)
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,那么您绝对应该提交支持请求。即使它真的不是偏离上游内核的选择,但这样的客户要求总是重要的反馈。