- 論壇徽章:
- 0
|
第8章: 修復(fù)文件系統(tǒng)
目標(biāo)
完成這一章,你將能做以下事情:
※理解文件系統(tǒng)是如何進(jìn)行更新操作的
※理解sync是如何預(yù)防文件系統(tǒng)錯誤
※列出文件系統(tǒng)錯誤的三個原因
※使用fsck檢查和修補(bǔ)文件系統(tǒng)
文件系統(tǒng)的維護(hù)
日常的維護(hù)
-檢查文件系統(tǒng)的一致性
-執(zhí)行文件系統(tǒng)備份
-監(jiān)控磁盤的使用情況
系統(tǒng)管理員的一個主要的職責(zé)就是保護(hù)用戶的數(shù)據(jù)的安全。由于UNIX對數(shù)據(jù)存儲是通過文件系統(tǒng)的方式,系統(tǒng)會強(qiáng)制性檢查文件系統(tǒng)的存儲環(huán)境是否出現(xiàn)問題。文件系統(tǒng)的完整性十分重要。系統(tǒng)管理員能夠做許多工作來保護(hù)文件系統(tǒng)的完整性。
這一章,我們會學(xué)習(xí)如何使用fsck工具來檢查和維護(hù)文件系統(tǒng)的完整性。在開始之前,我們先來了解一下文件系統(tǒng)的更新是如何發(fā)生的。
文件系統(tǒng)的更新
當(dāng)一個文件系統(tǒng)裝載后,它的超級塊被拷貝到內(nèi)存中。當(dāng)拷貝完成之后,文件系統(tǒng)的標(biāo)記被置為“dirty臟的”。所有的對超級塊的更改首先要去更改這個拷貝。當(dāng)一個SYNC的系統(tǒng)調(diào)用使用的時候,磁盤上的拷貝才會被更新。當(dāng)一個文件系統(tǒng)被卸載的時候,所有的在內(nèi)存中的數(shù)據(jù)會被寫回到磁盤上,文件系統(tǒng)的標(biāo)記被置為“clearn"。
所有的對metadata進(jìn)行的修改,首先是修改內(nèi)存中的拷貝,然后才會被寫到磁盤上去。一些metadata的修改是立即寫到磁盤上,其它的則是在調(diào)用sync的時候才會被寫到磁盤上。
舉一個例子:rm myfile命令會引起以下的一些改變:
1.myfile的目錄的條目被清除。
2.用來描述myfile的inode被釋放
3.用來索引剩余數(shù)據(jù)塊和剩余inode的映射圖被更新
4.超級塊中的剩余數(shù)據(jù)塊的數(shù)量和inode的數(shù)量必須被更新
不幸的是,不是所有的metadata數(shù)據(jù)都是連續(xù)地存儲在磁盤上的,所以它會進(jìn)行一些寫操作來完成這些處理過程。如果系統(tǒng)在進(jìn)行這些過程中崩潰,就會使metadata數(shù)據(jù)產(chǎn)生不一致。例如如果myfile的目錄條目已經(jīng)被清除,但是inode還沒有被釋放,結(jié)果就是一個inode有一個鏈接,但是并沒有目錄結(jié)構(gòu)指向這個inode。這就是不一致的metadata。
內(nèi)存緩沖區(qū)
當(dāng)需要寫用戶數(shù)據(jù)的時候,實(shí)際上并不立即發(fā)生寫磁盤的動作,數(shù)據(jù)會被拷貝到一個內(nèi)存的緩沖區(qū)里。這個操作非常的快。。數(shù)據(jù),同inode信息一起,會在以后的一些時間被寫到磁盤上。通常是在緩沖區(qū)滿的時候和新需要清除一下顎緩沖空間的時候。如果系統(tǒng)在還沒有將緩沖區(qū)中的信息寫到磁盤上去,系統(tǒng)關(guān)閉。文件系統(tǒng)就會被破壞。如果你察覺文件系統(tǒng)已經(jīng)被破壞,你應(yīng)該停止當(dāng)前的工作。
使用緩沖區(qū)的優(yōu)點(diǎn)和缺點(diǎn):
使用緩沖區(qū)可以對磁盤進(jìn)行均勻的存取,因?yàn)閮?nèi)核不需要知道磁盤I/O的產(chǎn)生的原因。內(nèi)核只會將緩沖區(qū)寫到磁盤,而不用去關(guān)心緩沖區(qū)數(shù)據(jù)的組成。從磁盤I/O的觀點(diǎn)來看,使用緩沖區(qū),系統(tǒng)的設(shè)計(jì)會更簡單。
通過使用緩沖區(qū),應(yīng)用程序會很容易地移植到其它的UNIX系統(tǒng)上去,因?yàn)椴煌腢NIX機(jī)器的磁盤I/O也許會不同,但是程序不需要了解這些。它們只是寫到緩沖區(qū),而不用去考慮磁盤的設(shè)置方式。
使用緩沖區(qū)可以減少對磁盤的讀寫,這會提高整個系統(tǒng)的相應(yīng)時間。換句話說,系統(tǒng)運(yùn)行更快了。
重復(fù)利用緩沖區(qū)中的數(shù)據(jù)文件也能夠加速系統(tǒng)。
刷新緩沖區(qū)
sync
※將緩沖區(qū)的內(nèi)容寫到磁盤
※保持文件系統(tǒng)為最新
※通常是通過syncer守護(hù)進(jìn)程來激活
syncer
※syncer是在系統(tǒng)啟動的過程中自動啟動。
※syncer程序的語法為:
??syncer[seconds]
數(shù)據(jù)在寫磁盤上之前,會寫到一個緩沖區(qū)里。而緩沖區(qū)寫到磁盤會有一個延遲,直到:
※系統(tǒng)需要緩沖區(qū)進(jìn)行其它的操作
※最后的塊被修改
※文件系統(tǒng)被卸載
※sync命令被執(zhí)行
※系統(tǒng)關(guān)閉或者重啟動
syncer
syncer通常是在系統(tǒng)啟動的時候,在/sbin/init.d/syncer腳本文件中啟動的,它的職責(zé)就是定時刷新緩沖區(qū)。你不需要直接執(zhí)行syncer命令,它會在系統(tǒng)啟動的時候,自動通過/sbin/init.d/syncer腳本執(zhí)行。
sync
sync執(zhí)行sync這個系統(tǒng)調(diào)用。執(zhí)行這個命令會刷新還沒有寫到磁盤上的系統(tǒng)緩沖區(qū)數(shù)據(jù),包括修改的超級塊,修改過的inode,和延遲的塊I/O,這會確保在執(zhí)行一個關(guān)鍵的操作如系統(tǒng)關(guān)閉之前,所有的文件修改都會被寫到磁盤上去。你可以在任何時候手工執(zhí)行這個命令,因?yàn)閟ync會自動執(zhí)行syncer守護(hù)進(jìn)程周期執(zhí)行的所有操作。
介紹fsck
為什么要運(yùn)行fsck?,
※檢查文件系統(tǒng)metadata的完整性
※在需要的時候修補(bǔ)metadata數(shù)據(jù)的損壞
什么時候執(zhí)行fsck?
※在系統(tǒng)異常關(guān)閉的時候,會自動運(yùn)行這個命令。
※在懷疑文件系統(tǒng)被破壞的時候,可以手工運(yùn)行這個命令。
當(dāng)操作系統(tǒng)非正常關(guān)閉的時候,文件系統(tǒng)的更改可能會丟失或者未完成。
fsck工具在系統(tǒng)崩潰或者未正常關(guān)閉的時候會自動運(yùn)行,它會驗(yàn)證你的文件系統(tǒng)的完整性。這個工具會試圖修改任何能夠識別的數(shù)據(jù)錯誤。
fsck在系統(tǒng)非正常關(guān)閉時會自動運(yùn)行,但是你也可以在懷疑文件系統(tǒng)有錯誤的時候手工運(yùn)行這個命令。
運(yùn)行fsck
例子:在/dev/vg01/myfs2下運(yùn)行fsck
1.mount -v
2.umount /dev/vg01/myfs2
3.fsck -F hfs /dev/vg01/rmyfs2
4 mount /dev/vg01/myfs2
5. 恢復(fù)任何被破壞的文件:
※fsck刪除任何文件嗎?
※fsck重新連接任何文件嗎?
運(yùn)行fsck要進(jìn)行的步驟:
1.mount -v
使用這個命令來判斷每一個一個文件系統(tǒng)裝載的目標(biāo)。和文件系統(tǒng)的類型,因?yàn)槟阍谶\(yùn)行fsck的時候必須要知道文件類型。
2.?umount /dev/vg01/myfs1
??umount /dev/vg01/myfs2
fsck必須在一個靜態(tài)的文件系統(tǒng)上運(yùn)行,因此在執(zhí)行命令之前要卸載文件系統(tǒng).
3.?fsck -F vxfs /dev/vg01/rmyfs1
??fsck -F hfs /dev/vg01/rmyfs2
在運(yùn)行fsck的時候,你必須要指明你要檢查的文件系統(tǒng)的類型。為了達(dá)到最優(yōu)的性能,可以指明包含文件系統(tǒng)的地邏輯卷或者磁盤的裸設(shè)備文件名。
當(dāng)fsck檢查到一個文件系統(tǒng)不完整,它會報告這個問題,然后詢問是否對其進(jìn)行修復(fù)。
如果你回答”yes”,fsck會試圖修正這個問題。如果你回答“no”,fsck會忽略這個問題,繼續(xù)進(jìn)行檢查。一般都要選擇"yes",讓系統(tǒng)自動修復(fù)發(fā)現(xiàn)的問題。
4.?mount /dev/vg01/myfs1
??mount /dev/vg01/myfs2
在fsck完成之后,重新裝載這個文件系統(tǒng)。
5.恢復(fù)任何被破壞的文件
為了修正文件系統(tǒng)的錯誤,fsck會刪除一個或者多個文件,觀察fsck輸出的”REMOVE"的信息,確保從磁帶上恢復(fù)受影響的文件。
fsck會重新鏈接孤兒文件。如果和看到任何重鏈接的信息,檢查文件系統(tǒng)的lost+found目錄。下一章會討論lost+found目錄的細(xì)節(jié)。
檢查lost+found
※存在每一個文件系統(tǒng)中
※fsck會拷貝孤兒文件到這些目錄下去。
※在每一次fsck完成之后應(yīng)該檢查這個文件
在每一個文件系統(tǒng)的root目錄下,都應(yīng)該有一個lost+found目錄。這個目錄是newfs命令創(chuàng)建的。在使用fsck命令檢查這個文件系統(tǒng)的時候,你應(yīng)該檢查這個目錄是否存在,如果不存在,你可以通過/usr/sbin/mklost_found命令來重新創(chuàng)建這個目錄。
fsck將所有檢查有問題的文件放在lost+found目錄下。在fsck完成之后,你應(yīng)該檢查這個目錄的內(nèi)容。這個目錄中的文件可以被移動回它們原始的目錄。文件名是以inode號來命名,所以判斷文件實(shí)際上是屬于那個文件,這十分困難。但是你應(yīng)該試圖找到文件的屬主。對這個文件運(yùn)行file命令。如果這個文件包含文本,查看文本的內(nèi)容來確定文件的屬主。如果文件包含可執(zhí)行代碼,你可檢查是否有SCCS確認(rèn)字符串,如果有,使用what命令可以列出SCCS信息。如果這個文件沒有SCCS字符串,你可以使用strings命令來查看文件的字符。這些字符能幫助確認(rèn)文件屬主。不要試圖通過執(zhí)行在lost+found目錄中的可執(zhí)行文件來找出這個文件是什么文件,因?yàn)樗赡苁瞧茐倪@個磁盤的文件。
例子:
# cd /myfs2/lost+found
# ls -l \#1743
# file /#1743
# strings \#1743
# move \#1743 new_file_name
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u2/84425/showart_2069351.html |
|