我正在考虑如何让我的应用程序在程序或操作系统崩溃后检测部分写入的记录。由于记录只附加到文件(从不被覆盖),写入时崩溃是否保证产生比应有的更短的文件大小?即使文件以读写模式而不是附加模式打开,只要写入始终在文件末尾,这是否也能保证?这将大大简化崩溃恢复,因为将最后一条记录的预期大小和位置与实际文件大小进行比较就足以检测到部分写入。
我知道随机访问写入可以由文件系统重新排序,但我无法找到有关附加时是否会发生这种情况的信息。我想一个乱序追加将需要文件系统在(稀疏)文件的尾部创建一个“洞”,在洞之外写入块,然后填充中间的块,但我希望这种方法效率很低,以至于没有人会以这种方式实现他们的文件系统。
我想另一个问题可能是文件系统在将新块附加到文件之前更新目录条目的文件大小字段,并且操作系统在两者之间崩溃。这在实践中是否发生过?(也许是ext4?)有没有一种快速的方法来检测它?(当尝试读取根据文件大小应该存在的未写入块时会发生什么?)
是否还有其他任何事情(例如磁盘/闪存驱动器执行的写入重新排序)会妨碍使用文件大小作为检测部分追加的方式?我不希望能够在我的应用程序中弥补这种驱动技巧,但了解一下会很好。