CodeGym /Adesua ahorow /Docker SELF /檢查和修復檔案系統:fsck 指令

檢查和修復檔案系統:fsck 指令

Docker SELF
等級 6 , 課堂 2
開放

檢查和修復檔案系統:fsck 指令

1. 為什麼檢查文件系統很重要?

Linux 的文件系統其實是操作系統中最「忙」的工作人員之一。當你儲存文件、打開程式或者只是讀取數據時,它都在努力工作。但想像一下:在最關鍵的時刻,這位工作人員累壞了,決定長假(也就是:系統因停電關閉了)。這可能會導致文件表受損、數據丟失或者其他許多令人頭疼的問題。

但會出什麼問題呢?

  1. 突然的電源中斷 — 你的設備突然斷電,沒來得及完成數據寫入。
  2. 存儲錯誤 — 硬碟或 SSD 可能會有硬體故障,導致文件系統損壞。
  3. 軟體錯誤 — 驅動或系統工具中可能存在 bug。

在這些事件發生後,文件系統經常會出現問題,系統可能會要求你檢查它的狀態。這時候 fsck 就出場了,它的全名是 File System Check


2. 什麼是fsck,它如何運作?

工具的理念

fsck是一種通用工具,它檢查檔案系統的完整性並修復發現的錯誤。它就像醫生一樣:進行測試,找到問題,並在可能的情況下進行"治療"。如果問題過於嚴重,fsck至少可以診斷出究竟出了什麼問題。

什麼時候使用fsck

  1. 當明顯的檔案操作故障發生時(例如檔案突然"消失")。
  2. 如果系統無法啟動並報告檔案系統錯誤。
  3. 作為定期預防措施,確保一切正常。

3. fsck 的基本語法

要使用 fsck,通常使用以下指令:

fsck [參數] <設備>

主要參數:

  • -y — 自動確認修復。如果你不想一直坐著回應每個問題的 yes,這會很方便。
  • -n — 僅進行檢查,不修復(模擬執行)。如果你擔心會弄壞什麼,這對分析情況很有用。
  • -t — 指定檔案系統類型(例如,ext4, xfs)。
  • -r — 開啟互動模式(你需要確認每個修復)。

4. 實作:檢查檔案系統

讓我們從簡單的檢查開始。假設我們有一個裝置 /dev/sdb1,我們想檢查它。

步驟 1:檢查但不修復

首先,我們在不做更改的情況下檢查檔案系統的狀態:

fsck -n /dev/sdb1

執行命令後,你會看到找到的問題列表(如果有的話)。下面是輸出範例:

Inodes that were part of a corrupted orphan linked list found.
Filesystem errors detected. Run fsck to repair.

步驟 2:自動修復

現在我們啟用錯誤修復模式:

fsck -y /dev/sdb1

fsck 將嘗試修復每個檢測到的錯誤並自動確認操作。如果裝置較大,這可能需要一些時間。


5. 檔案系統正在使用時該怎麼辦?

啟動 fsck 時的錯誤

如果你嘗試對已經掛載的分區執行 fsck,會收到以下警告:

fsck: cannot check a mounted filesystem.

這是因為對掛載中的檔案系統執行檢查可能會導致資料損壞。有一些方法可以解決這個問題。

  1. 以唯讀模式重新掛載裝置。
mount -o remount,ro /dev/sdb1
  1. 使用 LiveCD 或 LiveUSB。

從啟動光碟或者隨身碟啟動系統,然後執行對已卸載裝置的檢查。

  1. 使用修復模式。

將系統重新啟動到修復模式,通常會提供一個安全的環境來執行檢查。

檢查根檔案系統 / 的特點

根檔案系統是一個特例,因為它被系統積極使用。如果需要對該分區執行 fsck,需要:

  1. 使用以下指令進入單使用者模式:
systemctl isolate rescue.target
  1. 手動執行 fsck
fsck -y /

6. 常見錯誤及其修復

損壞的 inodes

如果 fsck 報告有損壞的 inode(儲存檔案資訊的結構),它會建議刪除它們。這是安全的,因為損壞的 inode 已經與當前的檔案無關。

丟失的檔案

有時候在啟動 fsck 之後,丟失的檔案會進入檔案系統根目錄中的 lost+found 資料夾。你可以手動檢查這個位置來恢復重要的資料。

重要建議

  1. 在檢查之前一定要備份。 雖然 fsck 通常是安全的,但修復可能導致資料丟失。

  2. 不要在已掛載的分區上運行 fsck 這可能導致資料損壞。

  3. 使用 -n 標誌進行初始分析。 如果不確定是否要自動修復錯誤,先從模擬運行開始。


7. 範例:模擬錯誤並修復

  1. 創建虛擬磁碟,並在其上建立檔案系統:
dd if=/dev/zero of=./disk.img bs=1M count=100
mkfs.ext4 ./disk.img
  1. 掛載磁碟:
sudo mount ./disk.img /mnt/test/
  1. 模擬損毀:
sudo dd if=/dev/zero of=/mnt/test/randomfile bs=512 count=10
  1. 卸載磁碟並檢查它:
sudo umount /mnt/test/
fsck ./disk.img

根據指令的輸出,修復錯誤。

走到這一步,你已經能自信地處理檔案系統的檢查,能正確地修復錯誤並避免事故發生。接下來我們將學習更多用於檔案系統的工具,但 fsck 現在已經是你診斷和修復的可靠工具啦。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION