如何檢查我的 Linux 系統是否配置為立即將更改同步到磁碟?
我注意到我係統上的索引引擎recoll在工作時使用了大量磁碟,並且每當我更改 Firefox 外掛的設置時都會出現磁碟活動。我不知道這些應用程序是否旨在將更改立即同步到磁碟,或者是否由於系統配置中的某些設置。
有沒有辦法查出來。
PS。我在Software Recs上留下了一個關於 recoll/xapian 問題的問題。
檢查文件系統是否出現在
grep -w sync /proc/mounts
. 劇透:答案是否定的。使用立即同步掛載文件系統非常慢。(而且它會導致大量的小寫入,這會縮短快閃記憶體設備的壽命。)一些應用程序通過呼叫將數據刷新到磁碟
fdatasync
。不幸的是,Unix API 在彈性方面沒有經過精心設計¹。從應用程序的角度來看,某些更改需要具有彈性,因為應用程序已將數據傳輸到遠端機器,表明更改已保存。在這種情況下fdatasync
是正確的介面。但是許多應用程序需要一些不同的東西,即保證如果他們在更改1之後更改2並且系統中途崩潰,那麼在重新啟動後不會沒有更改2而沒有更改1。(例如:更改1 =編寫新版本文件,更改 2 = 刪除舊版本。)文件系統重新排序文件系統寫入以提高性能;通常這對應用程序是不可見的,因為它僅與文件系統記憶體/緩衝區和磁碟之間發生的事情有關,而不是與應用程序可見的任何事情有關。但是在系統崩潰的情況下,磁碟內容反映了實際磁碟寫入的順序。沒有 API 說“此更改必鬚髮生在該更改之前”,因此應用程序fdatasync
用作窮人的備份(執行更改 1,呼叫fdatasync
以確保它已傳播到磁碟,然後執行更改 2)。這可能會對性能產生負面影響,尤其是對於快閃記憶體等寫入速度較慢的介質。如果一個應用程序由於過度使用
fdatasync
或它的表親而在您的系統上過慢fsync
,您可以使用eatmydata來取消fsync
/fdatasync
呼叫。但請注意,如果您的系統在中途崩潰,您可能會得到不一致的數據。我不確定我的回答是否與 recoll 或更改 Firefox 外掛的設置有關。這些操作很可能是從磁碟*讀取。*尤其是 recoll——它的工作是讀取大量數據!
此外,即使更改沒有立即同步到磁碟,您也可以預期一些數據會被寫入。如果數據沒有寫入磁碟,它必須保留在記憶體中,同時記憶體不能用於其他更有用的事情。此外,不保持磁碟繁忙是一種浪費:如果有數據要寫入,核心將開始寫入,而應用程序繼續執行並產生更多數據。
¹在文件系統設計的上下文中,彈性是指系統崩潰時是否保留對文件系統的更改的問題。