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