我正在考慮應用程序在程序或操作系統崩潰後檢測部分寫入記錄的方式。由於記錄只有追加到一個文件(從未覆蓋),寫入時崩潰保證產生比它應該是短的文件大小?即使文件以讀寫模式而不是附加模式打開,只要寫入文件總是在文件末尾,這是否保證了這一點?這將大大簡化故障恢復,因爲將最後一條記錄的預期大小和位置與實際文件大小進行比較足以檢測部分寫入。可以使用文件大小來檢測部分追加嗎?
我知道隨機訪問寫入可以由文件系統重新排序,但我無法找到追加時是否會發生這種情況的信息。我想象一個亂序追加需要文件系統在(稀疏)文件的尾部創建一個「洞」,在塊之外寫入塊,然後填充塊之間的塊,但是我希望這樣的方法效率太低,以至於沒有人會以這種方式實現他們的文件系統。
我想另一個問題可能是文件系統在將新塊附加到文件之前更新目錄條目的文件大小字段,並且操作系統崩潰。這是否在實踐中發生過? (ext4,也許?)有沒有一種快速檢測它的方法? (當試圖讀取根據文件大小應該存在的未寫入塊時會發生什麼?)
是否還有其他任何內容,例如由磁盤/閃存驅動器執行的寫入重新排序,這會妨礙使用文件大小作爲檢測部分追加的方法?我不希望在我的應用程序中能夠彌補這種驅動器欺騙,但是瞭解它會很好。
爲什麼不簡單地在追加前備份「記錄」文件?並在追加結束或程序正確退出後刪除它?這比檢查文件大小要好得多。 – KurzedMetal
因爲在某些情況下記錄的大小可能是千兆字節。我試圖避免不必要的複製。 –