Linux-Mint

如何調試/審核哪些設備記憶體寫入?

  • December 7, 2012

我將文件儲存在基於稀疏 dm-crypt 設備建構的 btrfs 分區上,該設備位於物理硬碟驅動器的 ext4 主分區上。

當核心崩潰時(這種情況在我的 3.6 核心的 ASUS P53E 上每天都會發生 :-( )我失去了最近修改的文件(文件的內容總是被零替換)。

防止文件損壞的一種方法是禁用寫記憶體。

為此,我需要禁用 btrfs 分區、支持分區的 dm-crypt 設備以及 dm-crypt 設備所在的稀疏文件的寫入記憶體。

  1. 如何檢查驅動器的記憶體寫入狀態?
  2. 我怎樣才能禁用它?

我使用帶有 3.6.8 主線核心的 Mint 13 Maya。

我不確定磁碟驅動器寫入記憶體是否會為您解決問題,因為聽起來您正在使用循環設備。所以在 Btrfs 文件系統和實際磁碟之間仍然存在頁面記憶體/文件。日誌文件系統也存在同樣類型的問題,這裡詳細介紹了 loop-AES。因此,當數據同步到您的循環設備時,它可能不在真實磁碟上,而只是在等待重新排序和寫出的記憶體中。

ext4 不支持syncext2/3 禁用記憶體的掛載選項。由於中間的層,我不確定即使這樣會讓你有效恢復。不幸的是,我對內部結構知之甚少,至少有更多的數據可以寫入磁碟。

以同樣的方式,您可以通過調整頁面記憶體來限制問題,以便系統更頻繁地寫入磁碟。linux頁面記憶體報告它的值在/proc/meminfo下面

"Dirty" - for pages that are currently dirty
"Writeback" - for dirty pages that are being written out to disk.

該報告狀態中有文件/proc/sys/vm/並控制將數據寫回磁碟的刷新執行緒。

您可以輸入一個較小的值(大於 8096 或 2 頁)/proc/sys/vm/dirty_background_bytes以使後台 pdflush 程序更積極地執行或/proc/sys/vm/dirty_bytes使程序更積極地觸髮刷新(對於性能損失,或至少總體上更多的磁碟寫入)。

我認為硬體寫入記憶體不太可能是您的主要問題所在。如果您只是通過 dm-crypt 直接訪問設備,那麼我會先查看那裡。在任何情況下,IDE 和 SATA 寫入記憶體都可以使用hdparm -W0 /dev/xdx.

此外,當您以比大多數情況更邊緣的方式使用技術上的實驗性文件系統時,您可能會在人們已經偶然發現問題的更成熟的 fs 上獲得更好的運氣。如果您需要 Btrfs,最好的辦法是對物理分區進行加密。

引用自:https://unix.stackexchange.com/questions/57862