2017-07-27 63 views
2

我正在使用Raspberry Pi將文件寫入到一個micro SD卡(Class 10)中進行數據記錄。如果Pi遇到功率損失,我注意到最後幾個文件沒有寫入。每個文件的大小約爲3 KB。我知道這一點,因爲我已將Pi打印到屏幕上顯示的文件編號上,當我重新啓動它時,會返回幾個數字。什麼時候文件實際上被寫入磁盤?

我試着增加創建新文件的頻率,並且我失去了相同數量的數據時間(我失去了更多的文件數量)。

我的問題確實是將文件寫入物理SD卡的低級過程是什麼?一旦他們身體上卡,他們不應該受到斷電的影響。

  • 的fopen新文件
  • 文件的fwrite的內容
  • fflush到緩衝區刷新到文件
  • FCLOSE關閉文件指針
  • 重複使用新的文件:我的代碼結構如下

我唯一的理論是,一旦Pi關閉文件,它是由MMU異步寫入到SD卡,文件留在斷電時「MMU隊列」丟失。否則,如果fflush和fclose實際上沒有寫入磁盤,那麼我不確定任何計算機每次關閉時都不會遇到這種損失。

+0

我應該說明SD卡沒有用作外部存儲設備,它是安裝操作系統的磁盤。 – Josh

+0

那麼,考慮到寫入Flash非常慢,並且與讀取相比功耗非常高,我並不感到驚訝的是,驅動程序和SD卡內部控制器中的各種緩存機制都是這樣的。安全':(你使用的是什麼文件系統? –

+0

'fflush'只是刷新標準庫的緩衝區,所以數據完全傳遞給操作系統。使用標準C,沒有辦法控制操作系統的功能。可能使用POSIX'open()'''O_SYNC'也許... –

回答

0

IMO文件被緩存在塊設備中,因此嘗試使用'同步'選項掛載文件系統或使用sync()將強制更改的塊加載到磁盤。

相關問題