2013-05-30 19 views
0

我正在爲必須不斷寫入信息到存儲設備的設備進行項目工作。該設備需要能夠失去電力,但要準確地保留它收集的信息,直到電源丟失。在寫入文件時失去電源

我一直在尋找如果在這樣的系統上斷電會發生什麼情況的答案。是否有任何權力喪失和關閉文件的問題?數據損壞是否可能?

謝謝

回答

3

的「安全存儲數據時功率可切」是挺難的一個通用的方法來解決整個主題 - 確切的解決方案將取決於具體的數據類型,率的數據存儲等等。

要保留「電源關閉時」的信息,數據需要存儲在非易失性存儲器(閃存,eeprom或電池支持的RAM)中。再次,這是一個硬件解決方案。

如果您可能「丟失寫入文件的數據」?是的,如果在系統處於寫入過程中時文件存儲設備的電源丟失,則文件可能無法正確寫入。

對此的回答實際上取決於您有多少自由來構建/定製硬件以應對這種情況。設計用於高可靠性的系統將有一種方法來檢測停電並在斷電後仍然運行幾秒鐘(有時更多),並且在斷電發生時,系統會「保存所有數據,並關閉很好「的模式。通常情況下,這是通過使用不間斷電源(UPS)完成的,該UPS具有一個告警機制,表示外部電源已斷開,系統接收到此信號時會啓動緊急關機。

如果您沒有任何方式連接UPS並以有序的方式關閉,那麼還有其他功能,例如日誌文件系統,可以爲您提供一組很好的數據,但不能保證給您完整的數據(並且你需要處理你的文件格式,這樣「切斷數據」並不會完全破壞文件 - 典型的例子是一個zip文件,它將「目錄」(內容列表)存儲在文件的最後該文件。所以,你可以有文件的完整的99.9%,但失蹤的0.1%,是你需要的所有內容進行解碼的內容。

0

是,數據損壞,絕對是一個可能性。

然而,有一個很少有指導m以純軟件方式將其縮小:

  • 使用日記文件系統並將其放入最大日誌模式(例如,對於ext3/ext4使用data=journal,不得少於)。
  • 避免軟件緩衝區。如果您沒有選擇,請儘快沖洗。
  • 儘快同步文件系統(通過sync/syncfs/fsync系統調用或使用sync安裝選項)。
  • 永遠不會覆蓋現有數據,只需將新數據附加到現有文件。
  • 準備處理不完整的數據記錄。

這樣,即使丟失了數據,它也只會寫入最後幾個字節,而且文件系統一般不會被破壞。

你會注意到我假設了一個Unix-y操作系統。據我所知,Windows並沒有給你足夠的控制權來對文件系統實施這種限制。