fsck(file system check,文件系統檢查)用于處理可能損壞的文件系統,本文對該命令做個簡單介紹。
一般來說,有這么幾種情況,你可能會用到 fsck 命令:系統無法啟動,設備(外部驅動器或存儲設備)運行不正常,或者有文件損壞的情況等。
fsck 實際上是許多文件系統特定檢查器的“前端”,比如 fsck.vfat, fsck.ext2 等。使用 fsck 的時候不需要指定具體使用的是哪個檢查器。
fsck 命令簡介
fsck 命令與大多數 Linux 命令的結構相同,如下為其使用方式:
fsck [options] [filesystem]
如果未指定文件系統,系統將分析你的 fstab 文件(/etc/fstab)以查找要掃描的設備。另外,需要使用 root 用戶或者 sudo 來運行該命令。
我們可以使用 fdisk 或 df 命令列出 Linux 中的硬盤驅動器,然后就可以使用 fsck 命令來指定要檢查的設備了。
Disk /dev/nvme0n1: 238.49 GiB, 256060514304 bytes, 500118192 sectors
Disk model: THNSN5256GPUK NVMe TOSHIBA 256GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 014A45DC-22A2-4FC0-BEEA-25A6F2406380
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 98563270 97512647 46.5G Linux filesystem
/dev/nvme0n1p3 98564096 500117503 401553408 191.5G Linux filesystem
在運行 fsck 之前卸載設備
不要在已安裝或掛載的設備上運行 fsck ,否則的話會損壞文件。所以在運行 fsck 之前需要先卸載設備。
如果你嘗試在已安裝的設備上運行 fsck,會看到如下錯誤:
$ sudo fsck /dev/sda3
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
/dev/sda3 is mounted.
e2fsck: Cannot continue, aborting.
而在正常的驅動器上運行 fsck,輸出是這樣的:
$ sudo fsck /dev/sda2
fsck from util-linux 2.34
fsck.fat 4.1 (2017-01-24)
/dev/sda2: 5 files, 1967/1972 clusters
雖然 fsck 命令接受設備名稱(比如 /dev/sda)作為參數,但是你可以選擇輸入 UUID,以免將已安裝的和卸載的設備混淆。UUID是分配給設備的固定值,不會受這些系統更改的影響。
fsck 命令的退出代碼
如下是使用 fsck 檢查磁盤后返回的一個代碼列表。如果分析一個磁盤,退出代碼是這些代碼的總和,如果在多個設備上使用 fsck,那么返回的是兩個和的邏輯或(OR,||)。
- 0 - 沒有報錯;
- 1 - 文件系統錯誤已更正;
- 2 - 應重新啟動系統;
- 4 - 未更正的文件系統錯誤;
- 8 - 操作錯誤;
- 16 - 用法或語法錯誤;
- 32 - 用戶請求取消了 fsck
- 128 - 共享庫錯誤。
你可以使用 echo $? 來檢查上次運行命令的退出代碼。
fsck 命令的應用
上述我們對 fsck 做了一個基本的介紹,下面我們來看看這個命令的使用。
修復USB磁盤和其他可移動設備
作為演示,我們假定有問題(待檢查)的設備為 /dev/sdb。
首先,我們需要確保驅動器已卸載:
sudo umount /dev/sdb
然后運行 fsck 命令:
sudo fsck /dev/sdb
檢查是否有錯誤輸出,如果沒有顯示任何信息,可使用 echo $? 來檢查退出代碼。
我們可以添加一些選項,允許命令進行自動更正。但是這些命令沒有進行標準化,所以在使用前需要驗證文件系統并比較 man 手冊中的描述信息。
盡管如此,通常我們可以使用 -p 選項來讓 fsck 自動修復:
sudo fsck -p /dev/sdb
類似的,-y 選項可以對檢測到的任何損壞的文件系統進行更正。
修復根文件系統
當系統處于活動(active)狀態時,我們無法卸載 root 分區。如果我們懷疑主文件系統已損壞,那就需要使用其他的方法了。
對于這種情況,有幾個方案可以使用。比如可以在系統啟動時,在救援模式(rescue mode)下運行 fsck,或者使用恢復主題的引導盤(recovery-themed live cd)。
許多 Linux 發行版,在經過幾次系統啟動失敗后,重新啟動時會自動強制 fsck。如果你喜歡自己動手,可以手動設置“幾次”這個數值。
大多數現代 Linux 版本都有一個名為 tune2fs 的工具,假如你的 root 設備為 /dev/sda,可以使用如下命令:
sudo tune2fs -c 1 /dev/sda
上述命令是對系統設置的更改,設置為每 **n **次(上述例子中為 1 )引導(系統啟動),運行一次 fsck。你還可以將其設置為標準的時間間隔,單位可以設置為 天、周或月 。
假如我們希望在任何時間啟動系統時,如果一周內沒有檢查,就運行 fsck。那么可以使用 -i 選項來指定時間間隔,如下:
sudo tune2fs -i 1w /dev/sda
如果你使用的是 systemd,則可以通過輸入以下命令在下次啟動時強制運行 fsck:
fsck.mode=force
fsck.repair=yes
關于 fsck 的更多信息,大家可以參考 man 手冊,在終端中運行 man fsck 即可。
審核編輯:劉清
-
驅動器
+關注
關注
53文章
8263瀏覽量
146683 -
Linux系統
+關注
關注
4文章
595瀏覽量
27449 -
UUID
+關注
關注
0文章
22瀏覽量
8145
發布評論請先 登錄
相關推薦
評論