Linux中管理EXT2、 EXT3和EXT4文件系统健康状况的4个工具

系统 Linux
在这篇文章中,我们将介绍监视或维护一个 ext2、ext3 和 ext4 文件系统健康状况的工具。在这里描述的所有工具都需要 root 用户权限,因此,需要使用 sudo 命令去运行它们。

[[210913]]

文件系统是一个在计算机上帮你去管理数据怎么去存储和检索的数据结构。文件系统也可以被视作是磁盘上的物理(或扩展)分区。如果它没有很好地被维护或定期监视,它可能在长期运行中出现各种各样的错误或损坏。

这里有几个可能导致文件系统出问题的因素:系统崩溃、硬件或软件故障、 有问题的驱动和程序、不正确的优化、大量的数据过载加上一些小故障。

这其中的任何一个问题都可以导致 Linux 不能顺利地挂载(或卸载)一个文件系统,从而导致系统故障。

扩展阅读:Linux 中判断文件系统类型(Ext2, Ext3 或 Ext4)的 7 种方法

另外,受损的文件系统运行在你的系统上可能导致操作系统中的组件或用户应用程序的运行时错误,它可能会进一步扩大到服务器数据的丢失。为避免文件系统错误或损坏,你需要去持续关注它的健康状况。

在这篇文章中,我们将介绍监视或维护一个 ext2、ext3 和 ext4 文件系统健康状况的工具。在这里描述的所有工具都需要 root 用户权限,因此,需要使用 sudo 命令去运行它们。

怎么去查看 EXT2/EXT3/EXT4 文件系统信息

dumpe2fs 是一个命令行工具,用于去转储 ext2/ext3/ext4 文件系统信息,这意味着它可以显示设备上文件系统的超级块和块组信息。

在运行 dumpe2fs 之前,先去运行 df -hT 命令,确保知道文件系统的设备名。

  1. $ sudo dumpe2fs /dev/sda10 

示例输出:

  1. dumpe2fs 1.42.13 (17-May-2015) 
  2. Filesystem volume name:    
  3. Last mounted on:          / 
  4. Filesystem UUID:          bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b 
  5. Filesystem magic number:  0xEF53 
  6. Filesystem revision #:    1 (dynamic
  7. 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 
  8. Filesystem flags:         signed_directory_hash  
  9. Default mount options:    user_xattr acl 
  10. Filesystem state:         clean 
  11. Errors behavior:          Continue 
  12. Filesystem OS type:       Linux 
  13. Inode count:              21544960 
  14. Block count:              86154752 
  15. Reserved block count:     4307737 
  16. Free blocks:              22387732 
  17. Free inodes:              21026406 
  18. First block:              0 
  19. Block size:               4096 
  20. Fragment size:            4096 
  21. Reserved GDT blocks:      1003 
  22. Blocks per group:         32768 
  23. Fragments per group:      32768 
  24. Inodes per group:         8192 
  25. Inode blocks per group:   512 
  26. Flex block group size:    16 
  27. Filesystem created:       Sun Jul 31 16:19:36 2016 
  28. Last mount time:          Mon Nov  6 10:25:28 2017 
  29. Last write time:          Mon Nov  6 10:25:19 2017 
  30. Mount count:              432 
  31. Maximum mount count:      -1 
  32. Last checked:             Sun Jul 31 16:19:36 2016 
  33. Check interval:           0 () 
  34. Lifetime writes:          2834 GB 
  35. Reserved blocks uid:      0 (user root) 
  36. Reserved blocks gid:      0 (group root) 
  37. First inode:              11 
  38. Inode size:           256 
  39. Required extra isize:     28 
  40. Desired extra isize:      28 
  41. Journal inode:            8 
  42. First orphan inode:       6947324 
  43. Default directory hash:   half_md4 
  44. Directory Hash Seed:      9da5dafb-bded-494d-ba7f-5c0ff3d9b805 
  45. Journal backup:           inode blocks 
  46. Journal features:         journal_incompat_revoke 
  47. Journal size:             128M 
  48. Journal length:           32768 
  49. Journal sequence:         0x00580f0c 
  50. Journal start:            12055 

你可以通过 -b 选项来显示文件系统中的任何保留块,比如坏块(无输出说明没有坏块):

  1. $ 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,在你运行这些工具之前,首先要去卸载分区,如下所示。

  1. $ sudo unmount /dev/sda10 
  2.  
  3. $ sudo fsck /dev/sda10 

此外,可以使用 -V 开关去启用详细输出,使用 -t 去指定文件系统类型,像这样:

  1. $ sudo fsck -Vt ext4 /dev/sda10 

调优 EXT2/EXT3/EXT4 文件系统

我们前面提到过,导致文件系统损坏的其中一个因素就是不正确的调优。你可以使用 tune2fs 实用程序去改变 ext2/ext3/ext4 文件系统的可调优参数,像下面讲的那样。

去查看文件系统的超级块,包括参数的当前值,使用 -l 选项,如下所示。

  1. $ sudo tune2fs -l /dev/sda10 

示例输出:

  1. tune2fs 1.42.13 (17-May-2015) 
  2. Filesystem volume name:    
  3. Last mounted on:          / 
  4. Filesystem UUID:          bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b 
  5. Filesystem magic number:  0xEF53 
  6. Filesystem revision #:    1 (dynamic
  7. 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 
  8. Filesystem flags:         signed_directory_hash  
  9. Default mount options:    user_xattr acl 
  10. Filesystem state:         clean 
  11. Errors behavior:          Continue 
  12. Filesystem OS type:       Linux 
  13. Inode count:              21544960 
  14. Block count:              86154752 
  15. Reserved block count:     4307737 
  16. Free blocks:              22387732 
  17. Free inodes:              21026406 
  18. First block:              0 
  19. Block size:               4096 
  20. Fragment size:            4096 
  21. Reserved GDT blocks:      1003 
  22. Blocks per group:         32768 
  23. Fragments per group:      32768 
  24. Inodes per group:         8192 
  25. Inode blocks per group:   512 
  26. Flex block group size:    16 
  27. Filesystem created:       Sun Jul 31 16:19:36 2016 
  28. Last mount time:          Mon Nov  6 10:25:28 2017 
  29. Last write time:          Mon Nov  6 10:25:19 2017 
  30. Mount count:              432 
  31. Maximum mount count:      -1 
  32. Last checked:             Sun Jul 31 16:19:36 2016 
  33. Check interval:           0 () 
  34. Lifetime writes:          2834 GB 
  35. Reserved blocks uid:      0 (user root) 
  36. Reserved blocks gid:      0 (group root) 
  37. First inode:              11 
  38. Inode size:           256 
  39. Required extra isize:     28 
  40. Desired extra isize:      28 
  41. Journal inode:            8 
  42. First orphan inode:       6947324 
  43. Default directory hash:   half_md4 
  44. Directory Hash Seed:      9da5dafb-bded-494d-ba7f-5c0ff3d9b805 
  45. Journal backup:           inode blocks 

接下来,使用 -c 标识,你可以设置文件系统在挂载多少次后将进行 e2fsck 检查。下面这个命令指示系统每挂载 4 次之后,去对 /dev/sda10 运行 e2fsck。

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

你也可以使用 -i 选项定义两次文件系统检查的时间间隔。下列的命令在两次文件系统检查之间设置了一个 2 天的时间间隔。

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

现在,如果你运行下面的命令,你可以看到对 /dev/sda10 已经设置了文件系统检查的时间间隔。

  1. $ sudo tune2fs -l /dev/sda10 

示例输出:

  1. Filesystem created:       Sun Jul 31 16:19:36 2016 
  2. Last mount time:          Mon Nov  6 10:25:28 2017 
  3. Last write time:          Mon Nov  6 13:49:50 2017 
  4. Mount count:              432 
  5. Maximum mount count:      4 
  6. Last checked:             Sun Jul 31 16:19:36 2016 
  7. Check interval:           172800 (2 days) 
  8. Next check after:         Tue Aug  2 16:19:36 2016 
  9. Lifetime writes:          2834 GB 
  10. Reserved blocks uid:      0 (user root) 
  11. Reserved blocks gid:      0 (group root) 
  12. First inode:              11 
  13. Inode size:           256 
  14. Required extra isize:     28 
  15. Desired extra isize:      28 
  16. Journal inode:            8 
  17. First orphan inode:       6947324 
  18. Default directory hash:   half_md4 
  19. Directory Hash Seed:      9da5dafb-bded-494d-ba7f-5c0ff3d9b805 
  20. Journal backup:           inode blocks 

要改变缺省的日志参数,可以使用 -J 选项。这个选项也有子选项: size=journal-size (设置日志的大小)、device=external-journal (指定日志存储的设备)和 location=journal-location (定义日志的位置)。

注意,这里一次仅可以为文件系统设置一个日志大小或设备选项:

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

***,同样重要的是,可以去使用 -L 选项设置文件系统的卷标,如下所示。

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

调试 EXT2/EXT3/EXT4 文件系统

debugfs 是一个简单的、交互式的、基于 ext2/ext3/ext4 文件系统的命令行调试器。它允许你去交互式地修改文件系统参数。输入 ? 查看子命令或请求。

  1. $ sudo debugfs /dev/sda10 

缺省情况下,文件系统将以只读模式打开,使用 -w 标识去以读写模式打开它。使用 -c 选项以灾难(catastrophic)模式打开它。

示例输出:

  1. debugfs 1.42.13 (17-May-2015) 
  2. debugfs:  ? 
  3. Available debugfs requests: 
  4. show_debugfs_params, params 
  5. Show debugfs parameters 
  6. open_filesys, open       Open a filesystem 
  7. close_filesys, close     Close the filesystem 
  8. freefrag, e2freefrag     Report free space fragmentation 
  9. feature, features        Set/print superblock features 
  10. dirty_filesys, dirty     Mark the filesystem as dirty 
  11. init_filesys             Initialize a filesystem (DESTROYS DATA) 
  12. show_super_stats, stats  Show superblock statistics 
  13. ncheck                   Do inode->name translation 
  14. icheck                   Do block->inode translation 
  15. change_root_directory, chroot 
  16. .... 

要展示未使用空间的碎片,使用 freefrag 请求,像这样:

  1. debugfs: freefrag 

示例输出:

  1. Device: /dev/sda10 
  2. Blocksize: 4096 bytes 
  3. Total blocks: 86154752 
  4. Free blocks: 22387732 (26.0%) 
  5. Minfree extent: 4 KB  
  6. Maxfree extent: 2064256 KB 
  7. Avgfree extent: 2664 KB 
  8. Num. free extent: 33625 
  9. HISTOGRAM OF FREE EXTENT SIZES: 
  10. Extent Size Range :  Free extents   Free Blocks  Percent 
  11. 4K...    8K-  :          4883          4883    0.02% 
  12. 8K...   16K-  :          4029          9357    0.04% 
  13. 16K...   32K-  :          3172         15824    0.07% 
  14. 32K...   64K-  :          2523         27916    0.12% 
  15. 64K...  128K-  :          2041         45142    0.20% 
  16. 128K...  256K-  :          2088         95442    0.43% 
  17. 256K...  512K-  :          2462        218526    0.98% 
  18. 512K... 1024K-  :          3175        571055    2.55% 
  19. 1M...    2M-  :          4551       1609188    7.19% 
  20. 2M...    4M-  :          2870       1942177    8.68% 
  21. 4M...    8M-  :          1065       1448374    6.47% 
  22. 8M...   16M-  :           364        891633    3.98% 
  23. 16M...   32M-  :           194        984448    4.40% 
  24. 32M...   64M-  :            86        873181    3.90% 
  25. 64M...  128M-  :            77       1733629    7.74% 
  26. 128M...  256M-  :            11        490445    2.19% 
  27. 256M...  512M-  :            10        889448    3.97% 
  28. 512M... 1024M-  :             2        343904    1.54% 
  29. 1G...    2G-  :            22      10217801   45.64% 
  30. 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 系统的整体性能。如果你有任何问题或更多的想法,可以使用下面的评论去分享。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2012-05-08 10:56:15

Linux

2010-12-17 09:37:13

ext4文件系统

2009-08-04 08:28:10

2009-10-27 12:47:29

linux Ext3文

2018-09-12 15:48:35

ext4Linux文件系统

2012-05-21 09:48:58

Ext4

2010-12-28 09:51:06

ext4文件系统

2009-10-22 12:09:57

linux文件系统

2009-11-30 09:46:45

Ubuntu文件系统选择

2010-06-01 09:55:24

ext4文件系统

2017-02-28 20:00:17

Linux文件系统对比

2012-05-21 10:42:02

Ext4

2011-06-27 10:17:15

EXT4 Btrfs

2009-06-10 08:49:05

LinuxExt3恢复

2009-07-07 15:58:13

2009-03-26 17:46:53

LinuxExt3Reiserfs

2018-11-05 09:45:01

Linux文件系统命令

2017-07-12 12:29:54

2010-09-30 10:06:35

2009-12-14 14:12:07

Linux文件系统
点赞
收藏

51CTO技术栈公众号