Linux學習之fsck命令


    在windows下,磁盤的文件系統出錯,需要運行chkdsk命令進行修復。而在linux下,則需要運行fsck命令。由於linux對於文件系統的錯誤非常敏感,由於意外斷電或者其它原因導致linux系統意外關機或者重啟,都可能對linux的文件系統造成嚴重的損壞,從而導致不能正常地進入系統。這也使得fsck變成一個不可或缺的命令。然而這個fsck命令卻有一個致命的軟肋,就是對於已經掛載了的分區運行具有極大的危險性,遠不如windows下的chkdsk命令的安全。
本文以ubuntu系統為例進行講述。
    由於fsck命令的這個致命的軟肋,所以運行這個命令的最好方式是用livecd方式啟動ubuntu,進入桌面后,首先確認要運行命令的分區是否掛載。比如要對第一硬盤第一分區進行運行,首先可以用umount命令進行卸載:
sudo umount /dev/sda1
一般情形下,都是沒有掛載的。運行這個umount命令只是為了確認一下,或者說是為了以怕萬一而已。
確認沒有掛載后,需要確認這個分區的文件系統是什么,這個可以用命令:
sudo fdisk -l
以查看這個分區的文件系統是什么。文件系統千萬不能錯了。這里以ext4文件系統為例進行講述。這個命令不止是確認分區的文件系統是什么,同時也是確認這個分區是如何寫法的。sata硬盤的寫法是sda,而ide硬盤的寫法是hda。
確認沒有掛載和文件系統是什么后,輸入下面的命令:
fsck -t  ext4 /dev/sda1
-t參數是指明文件系統是什么。/dev/sda1則是指定分區。
這個命令還有另外一種輸入法,這就是:
fsck.ext4 /dev/sda1
其實就是fsck -t ext4這個命令就是在調用fsck.ext4這個命令。
fsck默認只對有錯誤的檔案進行檢測,但是,我們可以加一個參數-f,讓fsck對於沒有錯的檔案也強行檢測。這樣大約可以修復一些分區的輕微的錯誤吧。
fsck.ext4 -f /dev/sda1
fsck還有檢測硬盤壞道的功能,參數是-c
fsck.ext4 -fc /dev/sda1
檢測壞道是很慢的。一般是不需要運行這個命令的。但有必要了解一下吧。
上面是以/dec/sda1分區為例進行講述,對於其它的分區的運行,舉一反三就是了。
如果沒有livecd怎么辦呢?可以用硬盤啟動映象文件的辦法啟動ubuntu.只要你懂硬盤安裝ubuntu的辦法,你也就會知道這種啟動的辦法,具體啟動的辦法就不贅述了。
    但有一個要點,對於映象文件所在的分區不可檢測。這里的原因當然是因為這個分區是被掛載了的。即便用:sudo umount -l /isodevice命令卸載掉了這個分區,也仍是不宜檢測為好。
    另外,fsck命令只能檢測linux分區,對於windows分區就不可以用這個命令進行檢測了。
所以我一般的辦法是把ubuntu映象文件放在windows分區。這樣可以無障礙地檢測全部linux分區。
    在ubuntu9.04的recovery mode中有一個fsck選項。在這個選項中,系統設定了運行fsck命令的一些安全參數。選擇這個選項后,系統將自動運行fsck命令。從我的經驗來看,這種方式的檢測還是很安全的。不知什么緣故,官方在ubuntu9.10中,把這個選項去掉了。但是,我們仍然可以在recovery mode中,手動運行fsck命令。
進入recovery mode后,先以root用戶登陸文本界面。
首先運行命令:
fsck -F
請注意,這個參數是大寫F,而不是小寫f,如果你寫錯,麻煩可就大了。我也就曾經誤寫過,后果是很嚴重的。好在我很熟知這方面的知識,沒有造成實質的損失。
這個命令的作用是清除掉內存中的磁盤緩存。所以這個命令毋須指定分區對象。根據我的經驗,使用這個參數的一個要點是不要同時使用其它的參數。就單獨運行一下這個參數。
找到的資料對於這個參數的說明是:
-F: 在檢查前將硬盤的 buffer cache 清空,避免發生錯誤。
根據我的經驗,用這個參數是很安全的,確實可以極有效地防止fsck出錯。我曾經在虛擬機做過試驗。在正常登陸狀態下,先用這個命令清除掉內存中的硬盤緩存,然后運行命令:fsck -AfsC
重啟電腦后,居然成功地進入了桌面。而不用先用這個命令,直接用fsck -AfsC命令,結果重啟進不了桌面。效果對照是很明顯的。
然后運行命令:
sudo umount -a
這個命令是把/etc/fstab文件中設定的分區,能卸載掉的都卸載掉。一般來說,除了/分區,其它的都能卸載掉的。卸載掉分區后再運行fsck命令,安全系統就大大地增加了。
然后輸入命令:
fsck -Afs
-A 依照/etc/fstab配置文件的內容,檢查文件內所列的全部文件系統。
-f參數的作用前面說了。
-s參數的作用是分別檢測。分別檢測是與並行檢測相對的。所謂並行檢測,就是同時檢測/etc/fstab中設定的多個分區。
由於/分區沒有卸載掉,所以在這里我們不能用-c參數。因為對於沒有卸載掉的分區運行-c參數,危險性更為加大。但是,我們可以加參數-R,略過/分區不檢測。
fsck -AfscR
還有一個參數是-C,這個參數可以在運行時顯示進度條,這樣命令運行起來時更好看些吧。比如:
fsck -ARCfsc
最后特別強調一下,由於fsck命令對於已經掛載的分區運行具有高度的危險性,所以千萬不能在正常登陸下運行這個命令。
ps:
還有一個重要的命令,可以以只讀模式掛載/分區,這樣運行fsck命令就非常之安全了。而對以只讀模式掛載的分區運行fsck命令是安全的。
mount -no remount,ro /
-n
  一般而言,mount 在掛上后會在 /etc/mtab 中寫入一筆資料。但在系統中沒有可寫入檔案系統存在的情況下可以用這個選項取消這個動作。
-o 是掛載選項,remount重新掛載,ro只讀掛載。
可以考慮預先做一個可執行文件放到在/分區可以找得到的地方,比如放在/root下,並命名為runfsck,然后進recovery mode執行這個文件,避免了手動輸入命令的麻煩。
=====================
mount -no remount,ro /
umount -a
fsck -F
fsck -AfsC
=====================
其實命令中的fsck -F已經沒有必要了。
ps:似乎對以只讀模式掛載的分區,雖則安全,但也並不能修正文件系統的錯誤,恐怕並無意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM