在文件系统写入缓冲区通常刷新多少秒后?

Tho*_*ler 12 filesystems file-io file data-persistence

在覆盖文件中的数据之前,我想非常确定旧数据存储在磁盘上.它可能是一个非常大的文件(多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等.

eh9*_*eh9 3

让我用稍微不友善的术语重述一下您的问题:您试图控制物理设备的行为,而操作系统中的驱动程序无法控制该物理设备的行为。如果您想要的是实际的保证,而不是很好的猜测,那么您尝试做的事情似乎是不可能的。如果您想要的只是一个很好的猜测,那很好,但请注意这一点并相应地记录下来。

您也许可以使用正确的设备驱动程序来解决此问题。例如,SCSI 协议中有一个Force Unit Access (FUA)READWRITE命令指示设备绕过任何内部缓存。即使数据最初是缓冲写入的,读取未缓冲的数据也应该能够验证数据是否确实存在。