Linux中管理EXT2、 EXT3和EXT4文件系統(tǒng)健康狀況的4個工具
文件系統(tǒng)是一個在計算機上幫你去管理數(shù)據(jù)怎么去存儲和檢索的數(shù)據(jù)結(jié)構(gòu)。文件系統(tǒng)也可以被視作是磁盤上的物理(或擴展)分區(qū)。如果它沒有很好地被維護或定期監(jiān)視,它可能在長期運行中出現(xiàn)各種各樣的錯誤或損壞。
這里有幾個可能導(dǎo)致文件系統(tǒng)出問題的因素:系統(tǒng)崩潰、硬件或軟件故障、 有問題的驅(qū)動和程序、不正確的優(yōu)化、大量的數(shù)據(jù)過載加上一些小故障。
這其中的任何一個問題都可以導(dǎo)致 Linux 不能順利地掛載(或卸載)一個文件系統(tǒng),從而導(dǎo)致系統(tǒng)故障。
擴展閱讀:Linux 中判斷文件系統(tǒng)類型(Ext2, Ext3 或 Ext4)的 7 種方法
另外,受損的文件系統(tǒng)運行在你的系統(tǒng)上可能導(dǎo)致操作系統(tǒng)中的組件或用戶應(yīng)用程序的運行時錯誤,它可能會進一步擴大到服務(wù)器數(shù)據(jù)的丟失。為避免文件系統(tǒng)錯誤或損壞,你需要去持續(xù)關(guān)注它的健康狀況。
在這篇文章中,我們將介紹監(jiān)視或維護一個 ext2、ext3 和 ext4 文件系統(tǒng)健康狀況的工具。在這里描述的所有工具都需要 root 用戶權(quán)限,因此,需要使用 sudo 命令去運行它們。
怎么去查看 EXT2/EXT3/EXT4 文件系統(tǒng)信息
dumpe2fs 是一個命令行工具,用于去轉(zhuǎn)儲 ext2/ext3/ext4 文件系統(tǒng)信息,這意味著它可以顯示設(shè)備上文件系統(tǒng)的超級塊和塊組信息。
在運行 dumpe2fs 之前,先去運行 df -hT 命令,確保知道文件系統(tǒng)的設(shè)備名。
- $ sudo dumpe2fs /dev/sda10
 
示例輸出:
- dumpe2fs 1.42.13 (17-May-2015)
 - Filesystem volume name:
 - Last mounted on: /
 - Filesystem UUID: bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b
 - Filesystem magic number: 0xEF53
 - Filesystem revision #: 1 (dynamic)
 - Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
 - Filesystem flags: signed_directory_hash
 - Default mount options: user_xattr acl
 - Filesystem state: clean
 - Errors behavior: Continue
 - Filesystem OS type: Linux
 - Inode count: 21544960
 - Block count: 86154752
 - Reserved block count: 4307737
 - Free blocks: 22387732
 - Free inodes: 21026406
 - First block: 0
 - Block size: 4096
 - Fragment size: 4096
 - Reserved GDT blocks: 1003
 - Blocks per group: 32768
 - Fragments per group: 32768
 - Inodes per group: 8192
 - Inode blocks per group: 512
 - Flex block group size: 16
 - Filesystem created: Sun Jul 31 16:19:36 2016
 - Last mount time: Mon Nov 6 10:25:28 2017
 - Last write time: Mon Nov 6 10:25:19 2017
 - Mount count: 432
 - Maximum mount count: -1
 - Last checked: Sun Jul 31 16:19:36 2016
 - Check interval: 0 ()
 - Lifetime writes: 2834 GB
 - Reserved blocks uid: 0 (user root)
 - Reserved blocks gid: 0 (group root)
 - First inode: 11
 - Inode size: 256
 - Required extra isize: 28
 - Desired extra isize: 28
 - Journal inode: 8
 - First orphan inode: 6947324
 - Default directory hash: half_md4
 - Directory Hash Seed: 9da5dafb-bded-494d-ba7f-5c0ff3d9b805
 - Journal backup: inode blocks
 - Journal features: journal_incompat_revoke
 - Journal size: 128M
 - Journal length: 32768
 - Journal sequence: 0x00580f0c
 - Journal start: 12055
 
你可以通過 -b 選項來顯示文件系統(tǒng)中的任何保留塊,比如壞塊(無輸出說明沒有壞塊):
- $ sudo dumpe2fs -b
 
檢查 EXT2/EXT3/EXT4 文件系統(tǒng)的錯誤
e2fsck 用于去檢查 ext2/ext3/ext4 文件系統(tǒng)的錯誤。fsck 可以檢查并且可選地 修復(fù) Linux 文件系統(tǒng);它實際上是底層 Linux 提供的一系列文件系統(tǒng)檢查器 (fsck.fstype,例如 fsck.ext3、fsck.sfx 等等) 的前端程序。
記住,在系統(tǒng)引導(dǎo)時,Linux 會為 /etc/fstab 配置文件中被標(biāo)為“檢查”的分區(qū)自動運行 e2fsck/fsck。而在一個文件系統(tǒng)沒有被干凈地卸載時,一般也會運行它。
注意:不要在已掛載的文件系統(tǒng)上運行 e2fsck 或 fsck,在你運行這些工具之前,首先要去卸載分區(qū),如下所示。
- $ sudo unmount /dev/sda10
 - $ sudo fsck /dev/sda10
 
此外,可以使用 -V 開關(guān)去啟用詳細輸出,使用 -t 去指定文件系統(tǒng)類型,像這樣:
- $ sudo fsck -Vt ext4 /dev/sda10
 
調(diào)優(yōu) EXT2/EXT3/EXT4 文件系統(tǒng)
我們前面提到過,導(dǎo)致文件系統(tǒng)損壞的其中一個因素就是不正確的調(diào)優(yōu)。你可以使用 tune2fs 實用程序去改變 ext2/ext3/ext4 文件系統(tǒng)的可調(diào)優(yōu)參數(shù),像下面講的那樣。
去查看文件系統(tǒng)的超級塊,包括參數(shù)的當(dāng)前值,使用 -l 選項,如下所示。
- $ sudo tune2fs -l /dev/sda10
 
示例輸出:
- tune2fs 1.42.13 (17-May-2015)
 - Filesystem volume name:
 - Last mounted on: /
 - Filesystem UUID: bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b
 - Filesystem magic number: 0xEF53
 - Filesystem revision #: 1 (dynamic)
 - Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
 - Filesystem flags: signed_directory_hash
 - Default mount options: user_xattr acl
 - Filesystem state: clean
 - Errors behavior: Continue
 - Filesystem OS type: Linux
 - Inode count: 21544960
 - Block count: 86154752
 - Reserved block count: 4307737
 - Free blocks: 22387732
 - Free inodes: 21026406
 - First block: 0
 - Block size: 4096
 - Fragment size: 4096
 - Reserved GDT blocks: 1003
 - Blocks per group: 32768
 - Fragments per group: 32768
 - Inodes per group: 8192
 - Inode blocks per group: 512
 - Flex block group size: 16
 - Filesystem created: Sun Jul 31 16:19:36 2016
 - Last mount time: Mon Nov 6 10:25:28 2017
 - Last write time: Mon Nov 6 10:25:19 2017
 - Mount count: 432
 - Maximum mount count: -1
 - Last checked: Sun Jul 31 16:19:36 2016
 - Check interval: 0 ()
 - Lifetime writes: 2834 GB
 - Reserved blocks uid: 0 (user root)
 - Reserved blocks gid: 0 (group root)
 - First inode: 11
 - Inode size: 256
 - Required extra isize: 28
 - Desired extra isize: 28
 - Journal inode: 8
 - First orphan inode: 6947324
 - Default directory hash: half_md4
 - Directory Hash Seed: 9da5dafb-bded-494d-ba7f-5c0ff3d9b805
 - Journal backup: inode blocks
 
接下來,使用 -c 標(biāo)識,你可以設(shè)置文件系統(tǒng)在掛載多少次后將進行 e2fsck 檢查。下面這個命令指示系統(tǒng)每掛載 4 次之后,去對 /dev/sda10 運行 e2fsck。
- $ sudo tune2fs -c 4 /dev/sda10
 - tune2fs 1.42.13 (17-May-2015)
 - Setting maximal mount count to 4
 
你也可以使用 -i 選項定義兩次文件系統(tǒng)檢查的時間間隔。下列的命令在兩次文件系統(tǒng)檢查之間設(shè)置了一個 2 天的時間間隔。
- $ sudo tune2fs -i 2d /dev/sda10
 - tune2fs 1.42.13 (17-May-2015)
 - Setting interval between checks to 172800 seconds
 
現(xiàn)在,如果你運行下面的命令,你可以看到對 /dev/sda10 已經(jīng)設(shè)置了文件系統(tǒng)檢查的時間間隔。
- $ sudo tune2fs -l /dev/sda10
 
示例輸出:
- Filesystem created: Sun Jul 31 16:19:36 2016
 - Last mount time: Mon Nov 6 10:25:28 2017
 - Last write time: Mon Nov 6 13:49:50 2017
 - Mount count: 432
 - Maximum mount count: 4
 - Last checked: Sun Jul 31 16:19:36 2016
 - Check interval: 172800 (2 days)
 - Next check after: Tue Aug 2 16:19:36 2016
 - Lifetime writes: 2834 GB
 - Reserved blocks uid: 0 (user root)
 - Reserved blocks gid: 0 (group root)
 - First inode: 11
 - Inode size: 256
 - Required extra isize: 28
 - Desired extra isize: 28
 - Journal inode: 8
 - First orphan inode: 6947324
 - Default directory hash: half_md4
 - Directory Hash Seed: 9da5dafb-bded-494d-ba7f-5c0ff3d9b805
 - Journal backup: inode blocks
 
要改變?nèi)笔〉娜罩緟?shù),可以使用 -J 選項。這個選項也有子選項: size=journal-size (設(shè)置日志的大?。evice=external-journal (指定日志存儲的設(shè)備)和 location=journal-location (定義日志的位置)。
注意,這里一次僅可以為文件系統(tǒng)設(shè)置一個日志大小或設(shè)備選項:
- $ sudo tune2fs -J size=4MB /dev/sda10
 
***,同樣重要的是,可以去使用 -L 選項設(shè)置文件系統(tǒng)的卷標(biāo),如下所示。
- $ sudo tune2fs -L "ROOT" /dev/sda10
 
調(diào)試 EXT2/EXT3/EXT4 文件系統(tǒng)
debugfs 是一個簡單的、交互式的、基于 ext2/ext3/ext4 文件系統(tǒng)的命令行調(diào)試器。它允許你去交互式地修改文件系統(tǒng)參數(shù)。輸入 ? 查看子命令或請求。
- $ sudo debugfs /dev/sda10
 
缺省情況下,文件系統(tǒng)將以只讀模式打開,使用 -w 標(biāo)識去以讀寫模式打開它。使用 -c 選項以災(zāi)難(catastrophic)模式打開它。
示例輸出:
- debugfs 1.42.13 (17-May-2015)
 - debugfs: ?
 - Available debugfs requests:
 - show_debugfs_params, params
 - Show debugfs parameters
 - open_filesys, open Open a filesystem
 - close_filesys, close Close the filesystem
 - freefrag, e2freefrag Report free space fragmentation
 - feature, features Set/print superblock features
 - dirty_filesys, dirty Mark the filesystem as dirty
 - init_filesys Initialize a filesystem (DESTROYS DATA)
 - show_super_stats, stats Show superblock statistics
 - ncheck Do inode->name translation
 - icheck Do block->inode translation
 - change_root_directory, chroot
 - ....
 
要展示未使用空間的碎片,使用 freefrag 請求,像這樣:
- debugfs: freefrag
 
示例輸出:
- Device: /dev/sda10
 - Blocksize: 4096 bytes
 - Total blocks: 86154752
 - Free blocks: 22387732 (26.0%)
 - Min. free extent: 4 KB
 - Max. free extent: 2064256 KB
 - Avg. free extent: 2664 KB
 - Num. free extent: 33625
 - HISTOGRAM OF FREE EXTENT SIZES:
 - Extent Size Range : Free extents Free Blocks Percent
 - 4K... 8K- : 4883 4883 0.02%
 - 8K... 16K- : 4029 9357 0.04%
 - 16K... 32K- : 3172 15824 0.07%
 - 32K... 64K- : 2523 27916 0.12%
 - 64K... 128K- : 2041 45142 0.20%
 - 128K... 256K- : 2088 95442 0.43%
 - 256K... 512K- : 2462 218526 0.98%
 - 512K... 1024K- : 3175 571055 2.55%
 - 1M... 2M- : 4551 1609188 7.19%
 - 2M... 4M- : 2870 1942177 8.68%
 - 4M... 8M- : 1065 1448374 6.47%
 - 8M... 16M- : 364 891633 3.98%
 - 16M... 32M- : 194 984448 4.40%
 - 32M... 64M- : 86 873181 3.90%
 - 64M... 128M- : 77 1733629 7.74%
 - 128M... 256M- : 11 490445 2.19%
 - 256M... 512M- : 10 889448 3.97%
 - 512M... 1024M- : 2 343904 1.54%
 - 1G... 2G- : 22 10217801 45.64%
 - debugfs:
 
通過去簡單瀏覽它所提供的簡要描述,你可以試試更多的請求,比如,創(chuàng)建或刪除文件或目錄,改變當(dāng)前工作目錄等等。要退出 debugfs,使用 q。
現(xiàn)在就這些!我們收集了不同分類下的相關(guān)文章,你可以在里面找到對你有用的內(nèi)容。
文件系統(tǒng)使用信息:
- 12 Useful “df” Commands to Check Disk Space in Linux
 - Pydf an Alternative “df” Command to Check Disk Usage in Different Colours
 - 10 Useful du (Disk Usage) Commands to Find Disk Usage of Files and Directories
 
檢查磁盤或分區(qū)健康狀況:
- 3 Useful GUI and Terminal Based Linux Disk Scanning Tools
 - How to Check Bad Sectors or Bad Blocks on Hard Disk in Linux
 - How to Repair and Defragment Linux System Partitions and Directories
 
維護一個健康的文件系統(tǒng)可以提升你的 Linux 系統(tǒng)的整體性能。如果你有任何問題或更多的想法,可以使用下面的評論去分享。















 
 
 
 
 
 
 