本文皆是作者自己的學習總結或感悟(linux環境),如有不對,歡迎提出一起探討!!
目錄結構
一.相關知識
二.問題提出
三.處理方法
四.最終結果
一、相關知識
1.xfs文件系統(概念性知識網上很多,自己去查嘍)
文件系統的定義:
文件系統是操作系統用於明確存儲設備(常見的是磁盤,也有基於NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。
xfs文件系統:
是一個日志型文件系統
日志文件系統?加一個日志來記錄文件系統的更改,即使在斷電或者是操作系統崩潰的情況下也能保證文件系統一致性
怎么保持的?
要向磁盤寫數據的時候,肯定要改變元數據,日志就要在這之前記錄要怎么去改元數據的,當發生異常掉電或者文件系統崩潰后,進行修復時會檢查文件系統的一致性,當出現不一致 時,可通過它來恢復。
(在數據下刷到磁盤之前,會先將對元數據的變動存放在日志中)
2.VM參數
1.Vm( virtual memory )是什么
1).不同的linux 內核版本,VM的參數是不一樣的,本文介紹的kernel 3.4.24-v64
2).VM的相關參數位於/proc/sys/vm,用來優化虛擬內存的
3)./proc這個目錄? Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統,它只存在內存當中,而 不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。用戶和應用程序可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程, 是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。
4). /proc/sys包含了系統信息和內核參數
5). /etc/sysctl.conf所有內核配置信息,可做永久性修改
注:由於VM參數較多,感興趣的話可參考我的另一篇隨筆《vm參數簡介》
3.XFS文件系統參數
1.這個網上內容比較少,我做如下幾點介紹
1)xfs文件系統各個參數只有在xfs文件系統被掛載到linux系統上時,我們才能獲取到。
2)xfs文件系統的參數位於/proc/sys/fs/xfs里,可以實時查看或調試各個參數
注:XFS參數較多,感興趣的話可以參考我的另一篇隨筆《XFS參數簡介》
4.我的理解:VM參數和XFS參數是兩套控制緩存的參數,他們應該具有以下的關系:
vm參數與xfs參數影響的階段不同:
這里面涉及到的是linux的緩存機制,詳細信息請參考《Linux 內核的文件 Cache 管理機制介紹》
與《Linux 文件系統剖析》這里我做簡單的介紹:linux在具體文件系統(ext3,xfs,fat32等等)之上,存在了虛擬文件系統。虛擬文件系統對具體文件系統進行了‘封裝’,這也使得linux可以掛載多種文件系統,但只使用同一套的函數或者命令。對於文件系統的緩存,這里細分了page cache和buffer cache。他們都存在於內存中,但是page cache主要用於緩存文件的內容,用於頻繁的讀取,buffer cache則用於將數據下刷到磁盤。通過實驗可以發現,當用dd寫裸設備時,buffer cache增長迅速,當像文件系統里copy數據時,page cache增長迅速。具體請參考文檔
二、問題的提出
寫這篇文章是因為帶有xfs文件系統的機器上,在有IO的情況下出現異常掉電時,文件系統會出現損壞(不一致,數據丟失等)。當對這個xfs文件進行修復時,文件系統為十幾T的情況下,修復時間非常慢,我們最終也沒有解決這個問題,估計現階段除了使用PMBUS電池或者UPS,還沒有更好的方法來解決xfs文件系統異常掉電問題。
三、處理方法
我們主要針對以下變量進行了測試:
1.VM參數的dirty_radio與dirty_background_radio
2.xfs參數的age_buffer_centisecs、xfsbufd_centisecs、xfssyncd_centisecs
3.mkfs.xfs參數
4.mount參數
5.內存大小
6.cpu多線程
注:詳細的測試結果和處理方法由於商業機密,不能泄露
四、最終結果
這里我給大家展示一下華為公司針對xfs修復的一個流程:
結束:希望提出更多關於xfs文件系統修復相關的建議,謝謝!