如何在 Linux 中使用 fsck 命令檢查和修復(fù)文件系統(tǒng)錯誤

一般來說,有這么幾種情況,你可能會用到 fsck 命令:系統(tǒng)無法啟動,設(shè)備(外部驅(qū)動器或存儲設(shè)備)運行不正常,或者有文件損壞的情況等。 fsck 實際上是許多文件系統(tǒng)特定檢查器的“前端”,比如 fsck.vfat, fsck.ext2 等。使用 fsck 的時候不需要指定具體使用的是哪個檢查器。
fsck 命令簡介
fsck 命令與大多數(shù) Linux 命令的結(jié)構(gòu)相同,如下為其使用方式:
如果未指定文件系統(tǒng),系統(tǒng)將分析你的 fstab 文件(/etc/fstab)以查找要掃描的設(shè)備。另外,需要使用 root 用戶或者 sudo 來運行該命令。
我們可以使用 fdisk 或 df 命令列出 Linux 中的硬盤驅(qū)動器,然后就可以使用 fsck 命令來指定要檢查的設(shè)備了。
在運行 fsck 之前卸載設(shè)備
不要在已安裝或掛載的設(shè)備上運行 fsck,否則的話會損壞文件。所以在運行 fsck 之前需要先卸載設(shè)備。
如果你嘗試在已安裝的設(shè)備上運行 fsck,會看到如下錯誤:
而在正常的驅(qū)動器上運行 fsck,輸出是這樣的:
雖然 fsck 命令接受設(shè)備名稱(比如 /dev/sda)作為參數(shù),但是你可以選擇輸入 UUID,以免將已安裝的和卸載的設(shè)備混淆。UUID是分配給設(shè)備的固定值,不會受這些系統(tǒng)更改的影響。
fsck 命令的退出代碼
如下是使用 fsck 檢查磁盤后返回的一個代碼列表。如果分析一個磁盤,退出代碼是這些代碼的總和,如果在多個設(shè)備上使用 fsck,那么返回的是兩個和的邏輯或(OR,||)。
- 0 - 沒有報錯;
- 1 - 文件系統(tǒng)錯誤已更正;
- 2 - 應(yīng)重新啟動系統(tǒng);
- 4 - 未更正的文件系統(tǒng)錯誤;
- 8 - 操作錯誤;
- 16 - 用法或語法錯誤;
- 32 - 用戶請求取消了 fsck
- 128 - 共享庫錯誤。
你可以使用 echo $? 來檢查上次運行命令的退出代碼。
fsck 命令的應(yīng)用
上述我們對 fsck 做了一個基本的介紹,下面我們來看看這個命令的使用。
修復(fù)USB磁盤和其他可移動設(shè)備
作為演示,我們假定有問題(待檢查)的設(shè)備為 /dev/sdb。 首先,我們需要確保驅(qū)動器已卸載:
然后運行 fsck 命令:
檢查是否有錯誤輸出,如果沒有顯示任何信息,可使用 echo $? 來檢查退出代碼。
我們可以添加一些選項,允許命令進行自動更正。但是這些命令沒有進行標準化,所以在使用前需要驗證文件系統(tǒng)并比較 man 手冊中的描述信息。 盡管如此,通常我們可以使用 -p 選項來讓 fsck 自動修復(fù):
類似的,-y 選項可以對檢測到的任何損壞的文件系統(tǒng)進行更正。
修復(fù)根文件系統(tǒng)
當(dāng)系統(tǒng)處于活動(active)狀態(tài)時,我們無法卸載 root 分區(qū)。如果我們懷疑主文件系統(tǒng)已損壞,那就需要使用其他的方法了。
對于這種情況,有幾個方案可以使用。比如可以在系統(tǒng)啟動時,在救援模式(rescue mode)下運行 fsck,或者使用恢復(fù)主題的引導(dǎo)盤(recovery-themed live cd)。
許多 Linux 發(fā)行版,在經(jīng)過幾次系統(tǒng)啟動失敗后,重新啟動時會自動強制 fsck。如果你喜歡自己動手,可以手動設(shè)置“幾次”這個數(shù)值。 大多數(shù)現(xiàn)代 Linux 版本都有一個名為 tune2fs 的工具,假如你的 root 設(shè)備為 /dev/sda,可以使用如下命令:
上述命令是對系統(tǒng)設(shè)置的更改,設(shè)置為每 n 次(上述例子中為1)引導(dǎo)(系統(tǒng)啟動),運行一次 fsck。你還可以將其設(shè)置為標準的時間間隔,單位可以設(shè)置為天、周或月。 假如我們希望在任何時間啟動系統(tǒng)時,如果一周內(nèi)沒有檢查,就運行 fsck。那么可以使用 -i 選項來指定時間間隔,如下:
如果你使用的是 systemd,則可以通過輸入以下命令在下次啟動時強制運行 fsck:
關(guān)于 fsck 的更多信息,大家可以參考 man 手冊,在終端中運行 man fsck 即可。
以上就是本次分享全部內(nèi)容,歡迎討論。




























