是否存在任何已知的 ext4 问题可能会随机导致文件长度变为零字节?

是否存在任何已知的 ext4 问题可能会随机导致文件长度变为零字节?

我的公司生产运行 Linux 3.4 的 Android 设备,我们发现 ext4 emmc 文件系统上的文件有时(但很少见)会突然变成零长度。通常,我会怀疑在写入文件时出现了不正确的关闭,但在这种情况下,我知道该文件在第一次启动时写入一次,并且再也不会写入;尽管它在每次启动时都会被读取。

有谁知道 ext4 代码中可能导致此问题的错误吗?看来 ext4 仍在积极开发中。也许一些系统管理员遇到过这种情况,并且知道有修复的补丁或内核版本?

答案1

如果您写入文件,则打开文件和写入之间可能需要一段时间。

当文件打开发生在O_CREAT|O_WRONLY|O_TRUNC选项中,那么在调用 open 时您将立即得到一个 0 字节文件。如果在该时间和写入刷新之间断电,您将得到一个 0 字节文件。这与文件系统无关。有效的打开和写入不是单个原子操作,因此会存在间隙,导致结果不佳。

缓解方法是在临时文件(在同一文件系统中)中执行打开/写入操作,然后创建一个改名这保证是原子的。这样你就不会出现未定义的状态。

还有一种可能是您的 MMC 闪存性能下降,并且硬件级别的写入未正确完成,但这种情况不太可能发生,并且需要特定于案例的工具。

一般来说,两个进程或线程同时写入同一个文件的情况极为罕见。”永远不要同时写入同一个文件。我想不出这样做的充分理由,并且可以想到多种方法来避免它。

我不知道 Android 上的细节,我怀疑不同的 libc 会导致与我描述的结果不同的结果。

相关内容