Linux中國

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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國