前一段时间,已经有一些关于ext4的讨论,它们可能会在不干净的卸载后留下空文件,本文对此进行了很好的总结。基本上,由于分配延迟,写操作可以在写缓存中保留的时间比ext日志的默认提交间隔(5秒)更长。
这些问题似乎已在修补程序中得到修复,该修补程序在某些情况下会强制分配块,从而默认情况下最多在5秒后将数据强制插入磁盘。
我想知道当应用程序覆盖文件的现有部分而不截断或附加文件本身时会发生什么。还会在5秒内将其强行插入磁盘吗?
似乎与附加到文件的情况不同:附加时,文件大小会更改,这是元数据更改;因此,必须在5秒钟之内提交日志,并且由于data = ordered的原因,出于安全考虑,必须在此之前写入数据(否则,其他用户的已删除文件的某些部分可能会显示为附件的所有者)文件)。
仅覆盖文件数据时,没有理由为什么在元数据日志提交之前就必须进行数据写入,因为旧数据与新数据属于同一用户。那么写是否在提交之前进行,还是可以延迟比日志提交间隔更长的时间?如果是这样,需要多长时间?
更新:我知道做正确的事情,即使用fsync()时,所有这些都无关紧要。(这是所有有关ext4和数据丢失的讨论的主要原因-问题仅涉及应用程序未进行fsync()处理或在适当的时候出现。)我不是在编写自己的应用程序,而是因为我我不知道我所有的应用程序是否都做对了,我想知道这种“危险”写入的大概时间。问的原因是我的图形驱动程序会定期导致内核崩溃,并且我想知道是否要担心最后5秒钟的数据写入。