在Linux中,对于单个文件,脏页写回(到磁盘)顺序是什么?是从头到尾还是乱七八糟的?
场景1:不覆盖
创建文件(在磁盘中)并快速(顺序)写入大量数据。现在我认为这些将位于多个页面缓存中。写回脏页时,页面是否按顺序写回?
例如,假设服务器在文件写入完成之前关闭。
现在重新启动后我们可以让磁盘文件处于以下状态
|--正确的数据--|---数据未设置/垃圾--|--正确的数据--|
即我了解文件中的最后一组字节可能不完整,但中间的数据可能不完整
场景 2:覆盖(尝试使用类似于循环/环形缓冲区的文件)
- 文件创建,数据写入,达到最大大小后,调用“fsync”(即数据+元数据同步)。
- 现在,文件指针移动到文件的开头并按顺序写入数据。 (未完成 fsync)
现在由于服务器关闭,我们可以在重新启动后使磁盘文件处于以下状态吗
|--Newly written data--|--Old data--|--New data--|...
即对于新数据,某些页面被乱序写入磁盘
或者
我可以假设它总是
|--新写入的数据--|----新写入的数据--|--旧数据--|
即旧数据和新数据不会混淆(如果存在旧数据将仅位于文件末尾)