在覆盖文件中的数据之前,我想非常确定旧数据存储在磁盘上。它可能是一个非常大的文件(数 GB),因此需要就地更新。通常写入将是 2 MB 或更大(我的计划是使用 4 KB 的块大小)。
代替(或除此之外)调用 fsync(),我想保留(不覆盖)磁盘上的旧数据,直到文件系统写入新数据。我不想依赖 fsync() 的主要原因是:大多数硬盘都在骗你做 fsync。
所以我正在寻找的是文件系统、操作系统(例如 Windows)、硬盘驱动器的典型最大延迟,直到数据写入磁盘,而不使用 fsync 或类似方法。如果可能的话,我想拥有真实世界的数字。我不是在寻找使用 fsync 的建议。
我知道没有 100% 可靠的方法可以做到这一点,但我想更好地了解操作系统和文件系统在这方面是如何工作的。
到目前为止我发现的是:30 秒是 / 是 /proc/sys/vm/dirty_expire_centiseconds 的默认值。然后“脏页面被刷新(写入)到磁盘......(当)自从页面保持脏状态以来已经过去了太多时间”(但在那里我找不到默认时间)。所以对于 Linux,40 秒似乎是安全的。但这适用于所有文件系统/磁盘吗?Windows、Android 等呢?我想得到一个适用于所有常见操作系统/文件系统/磁盘类型的答案,包括 Windows、Android、普通硬盘、SSD 等。