fsck - Arch Linux 中文维基

跳至內容

# fsck

出自 Arch Linux 中文维基

相關文章

- Ext4
- Btrfs
- fstab

翻譯狀態：

- 本文（或部分內容）譯自 Fsck，最近一次同步於 2026-03-25，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

fsck 是「file system check」的縮寫，意為「文件系統檢查」，用於檢查 Linux 上的文件系統並嘗試修復發現的錯誤。通常，fsck 會並行檢查不同物理磁碟上的文件系統來節省時間（請參閱 fsck(8)）。

在 Arch 的啟動流程中，fsck 會在您每次開機時自動檢查相關的驅動器，因此您無需使用命令行。

## 啟動時檢查

### 方式

提示：本小節中所有的「檢查」（共兩處）在英文原文中均為動詞 「fsck」，而 fsck 本身則包含「檢查並嘗試修復」之意，為保證語句通順譯為「檢查」，請知悉。

有兩種方式：

1. mkinitcpio 為您提供了一個選擇，即在掛載您的根文件系統前使用 `fsck` 鉤子檢查它。若如此做，您應當用 `rw` 內核參數將根文件系統掛載為可讀寫[1]。
2. systemd 會檢查所有 fsck 選項大於 0 的文件系統（使用 fstab 選項或用戶提供的單元文件)。對於根文件系統，其必須在開始時被使用 `ro` 內核參數被掛載為只讀，然後再通過 fstab 被重新掛載為可讀寫（請注意 `defaults` 掛載選項包含 `rw`）。

推薦第一種方式，若您遵循了安裝指南，則會默認這樣。若您想使用第二種方式，您應當從 `mkinitcpio.conf` 中移除 `fsck` 鉤子並在內核命令行中使用 `ro`。使用 `fsck.mode=skip` 內核參數可在兩種做法中完全禁用 fsck。

### 強制檢查

如果您使用 `base` 的 mkinitcpio 鉤子，您可以向內核傳遞 `fsck.mode=force` 內核參數以在啟動時強制執行 fsck，這會檢查您的設備上的每一個文件系統。

此外，systemd 提供了 systemd-fsck@.service(8)，用於檢查已配置的文件系統，且不在 initramfs 中執行。然而，用這種方法檢測根文件系統會推遲啟動流程，因為要重新掛載根文件系統。

這篇文章的某些內容需要擴充。

原因：有可能使用 systemd 鉤子在 initramfs 中運行 fsck 嗎？ (在 Talk:Fsck 中討論)
注意：習慣使用其他 GNU/Linux 發行版的用戶可能會習慣向每個文件系統寫入 `forcefsck` 文件或使用 `shutdown -F` 關機命令等舊方法，但它們僅適用於 SysVinit 和早期版本的 Upstart，但不適用於 systemd。因此上述方法是 Arch Linux 上唯一的解決方法。

### 在修復詢問中自動回答 yes

啟動時的 fsck 檢查可能會停止並返回 `"UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY."`。

當您需要允許某些更改以修復系統，而這些更改並不被認為是完全安全的時候，它就會發生。因此需要手動執行 fsck。

您可以通過將 `fsck.repair` 內核命令行選項設為 `yes` 來讓 `fsck` 自動接受所有建議的更改（即對所有問題回答 yes）。

提示：其他可能的值為 `no` 和 `preen`，參閱 systemd-fsck@.service(8) 以獲取這些選項的意義。

## 提示和技巧

### 嘗試修復壞塊

欲自動修復 ext2/ext3/ext4 或 FAT 文件系統上損壞的部分，請執行：

警告：這條命令不會詢問您是否修復，當您運行它時，回答就已經是 yes。

    # fsck -a

### 交互式地修復壞塊

這在 boot 分區上的文件被改動而日誌未能正確更新時會很有用。在這種情況下，請取消掛載 boot 分區，然後執行以下命令以修復損壞的部分：

    # fsck -r 设备

### 更改檢查頻率

注意：本小節的 tune2fs 命令和 dumpe2fs 命令僅在 ext2/ext3/ext4 文件系統上工作。

默認情況下，fsck 每 30 次啟動檢查一次文件系統（不同分區獨立計數）。要更改檢查頻率，請執行：

    # tune2fs -c 20 /dev/sda1

在本例中，`20` 是相鄰兩次檢查之間的啟動次數。

請注意 `1` 會在每次啟動時都執行檢查，而 `0` 會完全停止檢查。

欲查看某分區的檢查頻率和掛載次數，請執行：

    # dumpe2fs -h /dev/sda1 | grep -i 'mount count'

### fstab 選項

fstab 是一個系統配置文件，用於告訴 Linux 內核將哪些分區（文件系統）掛載到文件系統樹的哪裡。

一個典型的 `/etc/fstab` 條目可能看起來像這樣：

    /dev/sda1   /         ext4      defaults       0  1
    /dev/sda2   /other    ext4      defaults       0  2
    /dev/sda3   /win      ntfs-3g   defaults       0  0

第 6 列（粗體文字）是 fsck 選項。

- `0`——不檢查
- `1`——要檢查的第一個文件系統（分區），`/`（根分區）應當被設為 `1`。
- `2`——所有要檢查的其他文件系統。

## 疑難解答

### 無法在獨立的 /usr 分區上運行 fsck

1. 確保您的 `/etc/mkinitcpio.conf` 文件中配置了需要的鉤子，並在編輯該文件後重新生成了 initramfs。
2. 檢查您的 fstab！只有根分區的最後一項需要是 `1`，其他的都是 `2` 或 `0`。檢查是否存在其他拼寫錯誤。

### 「ext2fs: no external journal」 報錯

有時候 ext3/ext4 文件系統可能會損壞（由於電源故障）。通常，fsck 會提示 `no external journal`（無外部日誌），在這種情況下，請運行以下命令：

將該分區從其掛載點取消掛載：

    # umount directory

向該分區寫入新日誌：

    # tune2fs -j /dev/partition

運行 fsck 以修復該分區：

    # fsck -p /dev/partition

分類：​

- 文件系統
- 命令

fsck
新增話題