Linux 中管理 EXT2、 EXT3 和 EXT4 健康狀況的 4 個工具

Aaron Kili發表於2017-11-16

Linux 中管理 EXT2、 EXT3 和 EXT4 健康狀況的 4 個工具

檔案系統是一個在計算機上幫你去管理資料怎麼去儲存和檢索的資料結構。檔案系統也可以被視作是磁碟上的物理(或擴充套件)分割槽。如果它沒有很好地被維護或定期監視,它可能在長期執行中出現各種各樣的錯誤或損壞。

這裡有幾個可能導致檔案系統出問題的因素:系統崩潰、硬體或軟體故障、 有問題的驅動和程式、不正確的最佳化、大量的資料過載加上一些小故障。

這其中的任何一個問題都可以導致 Linux 不能順利地掛載(或解除安裝)一個檔案系統,從而導致系統故障。

擴充套件閱讀:Linux 中判斷檔案系統型別(Ext2, Ext3 或 Ext4)的 7 種方法

另外,受損的檔案系統執行在你的系統上可能導致作業系統中的元件或使用者應用程式的執行時錯誤,它可能會進一步擴大到伺服器資料的丟失。為避免檔案系統錯誤或損壞,你需要去持續關注它的健康狀況。

在這篇文章中,我們將介紹監視或維護一個 ext2、ext3 和 ext4 檔案系統健康狀況的工具。在這裡描述的所有工具都需要 root 使用者許可權,因此,需要使用 sudo 命令去執行它們。

怎麼去檢視 EXT2/EXT3/EXT4 檔案系統資訊

dumpe2fs 是一個命令列工具,用於去轉儲 ext2/ext3/ext4 檔案系統資訊,這意味著它可以顯示裝置上檔案系統的超級塊和塊組資訊。

在執行 dumpe2fs 之前,先去執行 df -hT 命令,確保知道檔案系統的裝置名。

$ 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 選項來顯示檔案系統中的任何保留塊,比如壞塊(無輸出說明沒有壞塊):

$ sudo dumpe2fs -b

檢查 EXT2/EXT3/EXT4 檔案系統的錯誤

e2fsck 用於去檢查 ext2/ext3/ext4 檔案系統的錯誤。fsck 可以檢查並且可選地 修復 Linux 檔案系統;它實際上是底層 Linux 提供的一系列檔案系統檢查器 (fsck.fstype,例如 fsck.ext3、fsck.sfx 等等) 的前端程式。

記住,在系統引導時,Linux 會為 /etc/fstab 配置檔案中被標為“檢查”的分割槽自動執行 e2fsck/fsck。而在一個檔案系統沒有被幹淨地解除安裝時,一般也會執行它。

注意:不要在已掛載的檔案系統上執行 e2fsck 或 fsck,在你執行這些工具之前,首先要去解除安裝分割槽,如下所示。

$ sudo unmount /dev/sda10
$ sudo fsck /dev/sda10

此外,可以使用 -V 開關去啟用詳細輸出,使用 -t 去指定檔案系統型別,像這樣:

$ sudo fsck -Vt ext4 /dev/sda10

調優 EXT2/EXT3/EXT4 檔案系統

我們前面提到過,導致檔案系統損壞的其中一個因素就是不正確的調優。你可以使用 tune2fs 實用程式去改變 ext2/ext3/ext4 檔案系統的可調優引數,像下面講的那樣。

去檢視檔案系統的超級塊,包括引數的當前值,使用 -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 標識,你可以設定檔案系統在掛載多少次後將進行 e2fsck 檢查。下面這個命令指示系統每掛載 4 次之後,去對 /dev/sda10 執行 e2fsck

$ sudo tune2fs -c 4 /dev/sda10
tune2fs 1.42.13 (17-May-2015)
Setting maximal mount count to 4

你也可以使用 -i 選項定義兩次檔案系統檢查的時間間隔。下列的命令在兩次檔案系統檢查之間設定了一個 2 天的時間間隔。

$ sudo tune2fs  -i  2d  /dev/sda10
tune2fs 1.42.13 (17-May-2015)
Setting interval between checks to 172800 seconds

現在,如果你執行下面的命令,你可以看到對 /dev/sda10 已經設定了檔案系統檢查的時間間隔。

$ 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

要改變預設的日誌引數,可以使用 -J 選項。這個選項也有子選項: size=journal-size (設定日誌的大小)、device=external-journal (指定日誌儲存的裝置)和 location=journal-location (定義日誌的位置)。

注意,這裡一次僅可以為檔案系統設定一個日誌大小或裝置選項:

$ sudo tune2fs -J size=4MB /dev/sda10

最後,同樣重要的是,可以去使用 -L 選項設定檔案系統的卷標,如下所示。

$ sudo tune2fs -L "ROOT" /dev/sda10

除錯 EXT2/EXT3/EXT4 檔案系統

debugfs 是一個簡單的、互動式的、基於 ext2/ext3/ext4 檔案系統的命令列偵錯程式。它允許你去互動式地修改檔案系統引數。輸入 ? 檢視子命令或請求。

$ sudo debugfs /dev/sda10

預設情況下,檔案系統將以只讀模式開啟,使用 -w 標識去以讀寫模式開啟它。使用 -c 選項以災難(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:  

透過去簡單瀏覽它所提供的簡要描述,你可以試試更多的請求,比如,建立或刪除檔案或目錄,改變當前工作目錄等等。要退出 debugfs,使用 q

現在就這些!我們收集了不同分類下的相關文章,你可以在裡面找到對你有用的內容。

檔案系統使用資訊:

  1. 12 Useful “df” Commands to Check Disk Space in Linux
  2. Pydf an Alternative “df” Command to Check Disk Usage in Different Colours
  3. 10 Useful du (Disk Usage) Commands to Find Disk Usage of Files and Directories

檢查磁碟或分割槽健康狀況:

  1. 3 Useful GUI and Terminal Based Linux Disk Scanning Tools
  2. How to Check Bad Sectors or Bad Blocks on Hard Disk in Linux
  3. How to Repair and Defragment Linux System Partitions and Directories

維護一個健康的檔案系統可以提升你的 Linux 系統的整體效能。如果你有任何問題或更多的想法,可以使用下面的評論去分享。


via: https://www.tecmint.com/manage-ext2-ext3-and-ext4-health-in-linux/

作者:Aaron Kili 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章