转载:http://wiki.debian.org.hk/w/Check_filesystem
Unix/Linux 一般使用工具 fsck (意思為 filesystem check 或 filesystem consistency check) 來檢查檔案系統是否有問題和進行修復工作 (和 Windows/MSDOS 的磁碟掃瞄工具 SCANDISK/CHKDISK 類似),您可以使用系統管理員帳戶 (即 root) 身份打「fsck 儲存裝置
」來檢查特定的儲存裝置。
目录[隐藏] |
強行檢查檔案系統
然而,事實上 fsck 一般只會對檔案系統作很簡單的檢查就會離開:
- 檔案系統是否有被正常卸載 (unmount)
- 是否夠時間需進行例行的完整檔案系統檢查
要強迫 fsck 進行完整的檔案系統檢查,您需要加上選項 -f
,即命令「fsck -f 儲存裝置
」:
fsck -f /dev/sda7
fsck 會自動根據要檢查儲存裝置的檔案系統,尋找程式 fsck.檔案系統
並執行。以 ext3 為例,如果要檢查儲存裝置的檔案系統為 ext3,fsck 自然會把檢查檔案系統交由 fsck.ext3 處理。一般 GNU/Linux 都會有 e2fsck、fsck.ext2 和 fsck.ext3,而事實上三個命令都是同一個程式。
檔案系統 | fsck 程式 | 套件 |
---|---|---|
Ext2/Ext3/Ext4 | e2fsck, fsck.ext2, fsck.ext3, fsck.ext4 | e2fsprogs |
SGI XFS | fsck.xfs (幌子程式) | xfsprogs |
ReiserFS | reiserfsck, fsck.reiserfs | reiserfsprogs |
IBM JFS | jfs_fsck, fsck.jfs | jfsutils |
FAT | dosfsck, fsck.vfat, fsck.msdos | dosfstools |
cramfs | fsck.cramfs | util-linux |
Minix 檔案系統 | fsck.minix | util-linux |
檢查檔案系統的作用
fsck 的工作主要是檢查檔案系統的一致性 (consistency)。
檢查檔案系統工作
Ext2/Ext3/Ext4 (e2fsck)
大部份檔案系統的 fsck 都會用多重步驟 (multi-pass) 來進行檢查工作。e2fsck 就有五重步驟[2]:
- 第一步:檢查所有 inode 的一致性 - 檢查所有 inode 所表示檔案和目錄的 mode (包括檔案類型和使用權限) 是否有效,所有區塊 (block) 指標中的區塊編號是否有效,inode 中的檔案大小 (size count) 和區塊數目 (block count) 欄是否正確以及多於一個 inode 使用同一個區塊。在檢查過程中,fsck 同時收集檔案系統以下資料以方便進行往後的步驟:
- 記錄那個 inode 確實正在使用,表示檔案還是目錄。
- 記錄那個區塊確實正在使用,和有沒有多於一個 inode 使用同一個區塊。
- 識別表示目錄的 inode 所使用的資料區塊 (data block)
- 第二步:檢查所有目錄 - 使用第一步建立的紀錄檢查所有目錄中資料,並在過程中同時同時收集各目錄的父目錄 inode:
- 每個目錄項目的長度和檔案/目錄名稱是否有效
- 目錄中 inode 編號是否有效 (大於 1 和小於檔案系統的 inode 總數)
- 目錄中 inode 編號所指的 inode 是否正使用
- 第一個項目是 “.” 而且 inode 編號指向目錄自己
- 第二個項目是 “..”
- 第三步:檢查目錄結構 - 先將根目錄 (/) 標記為 “done”,並追踪所有目錄 inode 的父目錄 inode 直至一個已標記為 “done”的目錄 inode。如果不成功或追踪過程訪問同一目錄 inode 多於一次 (表示為循環目錄),e2fsck 會把目錄移至lost+found 中。
- 第四步:檢查所有 inode 的連結數目 (link count/reference counter) - 比較在第一步計算出來的連結數目和第二、三步的結果,把連結數目 0 的 inode 移至lost+found 中。
- 第五步:檢查超級區塊 (superblock) 的資料 - 比較超級區塊的資料和前四步所計算的資料包括區塊對應表 (block bitmaps) 和 inode 對應表 (inode bitmaps) 。如果不一樣,將使用前四步所計算的資料修正超級區塊的資料。
e2fsck 如檢查有檔案系統有問題,會嘗試自動修復。修復出來的檔案將存放在目錄 lost+found 中。
# e2fsck -f /dev/sda7 e2fsck 1.41.3 (12-Oct-2008) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda7: 254995/720896 files (1.2% non-contiguous), 2814327/2879643 blocks
SGI XFS (fsck.xfs)
因為作為日誌式檔案系統的 XFS 是直接在掛載 (mount) 時自動進行修復工作,所以 fsck.xfs
只是一個幌子程式,無論如何不做任何事而直接離開。
直接檢查檔案系統一致性的工具和修復工具分別為 xfs_check
和 xfs_repair
。
ReiserFS (reiserfsck)
IBM JFS (jfs_fsck)
FAT (dosfsck)
依次序檢查以下:
- FAT 中有無效的 cluster 編號,發現則改成 EOF。
- 檔案 cluster 鏈有循環
- 有壞 cluster (讀取時有錯誤),發現則把該 cluster 標記為壞 cluster,並由使用它的檔案中移除。
- 有大量壞項目的目錄,發現則可能要遺棄整個目錄。
- 檔案 . 和 .. 不是目錄,發現則需要改名。
- 在根目錄發現目錄 . 和 ..,發現則需要遺棄。
- 有壞檔案名稱,發現則需要改名。
- 有重覆目錄項目,發現則需要改名或遺棄。
- 有目錄的檔案大小為非零,發現則需要設定為 0。
- 有目錄 . 不指向父目錄 (parent directory),發現則需要調節指標。
- 有目錄 .. 不指向父目錄的父目錄,發現則需要調節指標。
- 檔案的第一 cluster 編號無效,發現則需要設檔案大小為 0。
- 檔案有壞或未使用的 cluster,發現則需要折斷檔案。
- 檔案 cluster 鏈長於檔案大小欄所指定的大小,發現則需要折斷檔案。
- 兩個或以上的檔案使用同一個 cluster,發現則除一個檔案外,其檔案都需要被折斷。如果被折斷是一個已檢查的目錄,折斷後需要重新開以整個檔案系統檢查工作。
- 檔案 cluster 鏈短於檔案大小欄所指定的大小,發現則需要折斷檔案。
- cluster 被標記為已使用但未有一個檔案使用,發現則需要未使用。
此外,亦會檢查以下但不進行修復:
- 啟動磁區 (boot sector) 有無效參數
- 非根目錄沒有 [[File:.|.]] 和 [[File:..|..]] 兩項目
參考資料
- ↑ Henson, Valerie (2006-07-05). “The 2006 Linux Filesystems Workshop (Part II)” Linux Weekly News.
- ↑ William von Hagen (2001). “Linux Filesystems”. Sams Publishing. ISBN 06-723-2272-2
請參看
外部連結
- 維基百科: fsck - 維基百科對 fsck 的說明
- Adminschoice.com: checking and repairing file system with fsck (Admin's Choice)
- Linux Weekly News: The many faces of fsck (Valerie Henson 2007-09-15)
- GNU/Linux Manpage: fsck(8) - check and repair a Linux file system
[SuSE][OpenSuSE] - GNU/Linux 中的 fsck(8) 說明文件
- e2fsprogs: fsck(8): check and repair a Linux file system (e2fsprogs 2008-03) - GNU/Linux 中 e2fsprogs 1.40.8 的 fsck(8) 說明文件