2011-08-26 85 views
1

主要問題是:數據是否可以通過將新數據附加到文件末尾來破壞?(請記住硬盤扇區大小,例如512)?追加模式下的文件損壞

如果例如我有1023個字節的文件,附加1個字節,我有暗戀(電源丟失,磁盤緩衝區問題等)?

在這種情況下,什麼樣的條件將是第二個部門?

+0

這取決於你的文件系統。例如日誌文件系統將更有可能帶回您的數據。 – arunkumar

回答

0

不可能說。有多層抽象,緩存,甚至簡單的電傳播延遲來解釋。

您的代碼可能寫出了一個字節。但操作系統不會立即寫出該字節。觸碰驅動器是目前計算機可以做的絕對最慢的操作之一,所以它將緩衝該字節並查看是否有更多字節陷入輸出緩衝區。

如果緩存的超時期限內沒有任何內容發生,則字節將被髮送到驅動器以提交給介質。但驅動器本身也可能會執行一些緩存操作等等。有一些旋轉延遲需要考慮(字節應該進入的實際扇區實際上必須寫入寫入頭,可能需要幾毫秒)。

換句話說,將一個字節寫出到磁盤可能需要大量的時間來實際寫入磁盤介質。如果在此間隔期間停電,您的數據將丟失。

+0

我想問題是事實上,如果硬盤寫入數據PER扇區的條件是整個扇區。 511字節的第二扇區將會是什麼? – excanoe

+0

再一次,取決於在斷電之前寫操作有多遠。如果字節寫入磁盤,但系統元數據(文件大小)未更新,則操作系統在機器重新啓動後仍會在1023字節處看到文件。即使日誌文件系統也無法防止電力損失 - 因爲當電力消失時,您仍然將數據寫入磁盤上的文件。期刊使寫入速度更快一些,因爲元數據+數據是同時寫入的,但不能對寫入操作中途(或之前)的功耗消失做任何事情。 –

+0

但是如果我們跳過OS的軟件層,那麼在寫入數據之前會發生什麼?我可以丟失一些已經在磁盤上的數據嗎?據我瞭解,如果最小的磁盤io塊是扇區塊,那麼我假設從第二個扇區大小的開始開始寫入從513字節開始。我對麼? – excanoe