内容


学习 Linux,101

保持文件系统的完整性

了解磁盘空间动态

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 学习 Linux,101

敬请期待该系列的后续内容。

此内容是该系列的一部分:学习 Linux,101

敬请期待该系列的后续内容。

概述

在本文中,学习:

  • 验证文件系统的完整性
  • 监控磁盘可用空间和 inode
  • 修复简单文件系统问题

本文涵盖了标准和日志文件系统(也称为日志),将重点放在 ext2(标准文件系统)和 ext3(日志文件系统)上,但是用于其他文件系统的工具也有提及。该资料绝大部分同时适用于 2.4 和 2.6 内核。 本文中的大部分示例使用带有 2.6.32 内核的 Fedora 12。您在其他系统上的结果可能会有所不同。

本文帮助您准备 Linux Professional Institute's Junior Level-1 (LPIC-1) 考试 101 中主题 104 下的目标 104.2。该目标的权值为 2。

先决条件

为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并需要准备一个 Linux 系统,用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同。

您还应该熟悉我们的文章 “学习 Linux,101:创建分区和文件系统” 中的内容。

检查文件系统

有时候系统可能会崩溃或者断电。在这些情况下,Linux 无法干净地卸载文件系统,它们可能会处于不一致的状态,即某些修改完成了,而其他修改没有完成。操作受损的文件系统不是一个好的解决方法,因为这可能会使现有的错误进一步复杂化。

检查文件系统的主要工具是 fsck,与 mkfs 相似,这种工具实际上也是针对各种文件系统类型的文件系统检查例程的前端。一些底层检查例程如清单 1 所示。

清单 1. 一些 fsck 程序
[ian@echidna ~]$ ls /sbin/*fsck*
/sbin/btrfsck  /sbin/fsck         /sbin/fsck.ext3     /sbin/fsck.msdos
/sbin/dosfsck  /sbin/fsck.cramfs  /sbin/fsck.ext4     /sbin/fsck.vfat
/sbin/e2fsck   /sbin/fsck.ext2    /sbin/fsck.ext4dev  /sbin/fsck.xfs

您可能会惊讶地发现,这些文件中有很多是到一个文件的硬链接,如清单 2 所示。因为这些文件可能早在启动过程中就已用到,所以可能未挂载文件系统,且符号链接尚不可用。参见我们的文章 学习 Linux,101:创建和更改硬链接和符号链接,了解关于硬链接和符号链接的更多信息。

清单 2. 多面的一个 fsck 程序
[ian@echidna ~]$ find /sbin -samefile /sbin/e2fsck
/sbin/fsck.ext4dev
/sbin/e2fsck
/sbin/fsck.ext3
/sbin/fsck.ext4
/sbin/fsck.ext2

系统引导过程使用 fsck-A 选项来检查根文件系统和 /etc/fstab 控制文件中指定检查的所有其他文件系统。如果文件系统不能完全卸载,那么执行一致性检查并进行修复,这一切都要在安全环境下完成。这受 /etc/fstab 项的 pass(或 passno)字段(第 6 个字段)控制。在引导时,不检查 pass 设置为零的文件系统。根文件系统的 pass 值是 1,它先被检查。其他文件系统的 pass 值常常是 2(或更大),这些值表示应该以什么次序检查它们。

如果系统认为有利,多个 fsck 操作可同时运行,所以不同文件系统可以具有相同的 pass 值,清单 3 中所示的 /grubfile 和 //mnt/ext3test 文件系统就是这种情况。注意,fsck 会避免在同一物理磁盘上运行多个文件系统检查。要了解有关 /etc/fstab 布局的更多信息,请查看 fstab 的说明页。

清单 3. 使用 /etc/fstab 项指定文件系统的引导检查
filesystem                           mount point  type   options    dump pass
UUID=a18492c0-7ee2-4339-9010-3a15ec0079bb /              ext3    defaults        1   1
UUID=488edd62-6614-4127-812d-cbf58eca85e9 /grubfile      ext3    defaults        1   2
UUID=2d4f10a6-be57-4e1d-92ef-424355bd4b39 swap           swap    defaults        0   0
UUID=ba38c08d-a9e7-46b2-8890-0acda004c510 swap           swap    defaults        0   0
LABEL=EXT3TEST                            /mnt/ext3test  ext3    defaults        0   2
/dev/sda8                                 /mnt/xfstest   xfs     defaults        0   0
LABEL=DOS                                 /dos           vfat    defaults        0   0
tmpfs                   /dev/shm                         tmpfs   defaults        0   0
devpts                  /dev/pts                         devpts  gid=5,mode=620  0   0
sysfs                   /sys                             sysfs   defaults        0   0
proc                    /proc                            proc    defaults        0   0

一些日志文件系统(比如 ReiserFS 和 XFS)的 pass 值可能为零,因为由日志代码(而非 fsck)执行文件系统一致性检查和修复。另一方面,有些文件系统,比如 /proc,是在初始化时构建的,因而有必要予以检查。

您可以在引导系统后检查文件系统。您将需要根授权,且要首先卸载希望检查的文件系统。清单 4 显示如何使用设备名、标签或 UUID 检查我们其中的两个文件系统。您可以使用 blkid 命令,根据给定的标签或 UUID 查找设备,或根据给定设备名查找标签和 UUID。

清单 4. 使用 fsck 检查文件系统
[root@echidna ~]# # find the device for LABEL=EXT3TEST
[root@echidna ~]# blkid -L EXT3TEST
/dev/sda7
[root@echidna ~]# # Find label and UUID for /dev/sda7
[root@echidna ~]# blkid /dev/sda7
/dev/sda7: LABEL="EXT3TEST" UUID="7803f979-ffde-4e7f-891c-b633eff981f0" SEC_TYPE="ext2" 
 TYPE="ext3" 
[root@echidna ~]# # Check /dev/sda7
[root@echidna ~]# fsck /dev/sda7
fsck from util-linux-ng 2.16.2
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Check it by label using fsck.ext3
[root@echidna ~]# fsck.ext3 LABEL=EXT3TEST
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Check it by UUID using e2fsck
[root@echidna ~]# e2fsck UUID=7803f979-ffde-4e7f-891c-b633eff981f0
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Finally check the vfat partition
[root@echidna ~]# fsck LABEL=DOS
fsck from util-linux-ng 2.16.2
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
/dev/sda9: 1 files, 1/513064 clusters

如果您尝试检查一个挂载的文件系统,您通常会看到一个警告,类似于清单 5 中在试图检查根文件系统时出现的警告。听从警告,不要执行!

清单 5. 不要试图检查一个挂载的文件系统
[root@echidna ~]# fsck UUID=a18492c0-7ee2-4339-9010-3a15ec0079bb 
fsck from util-linux-ng 2.16.2
e2fsck 1.41.9 (22-Aug-2009)
/dev/sdb9 is mounted.  

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no

check aborted.

另外最好让 fsck 弄清在一个文件系统上要运行哪个检查;运行错误的检查会损坏文件系统。如果您想了解 fsck 会为给定的文件系统或文件系统集做什么,使用清单 6 中所示的 -N 选项。

清单 6. 查明 fsck 如何检查 /dev/sda7、/dev/sda8 和 /dev/sda9
[root@echidna ~]# fsck -N /dev/sda7 /dev/sda[89]
fsck from util-linux-ng 2.16.2
[/sbin/fsck.ext3 (1) -- /mnt/ext3test] fsck.ext3 /dev/sda7 
[/sbin/fsck.xfs (2) -- /mnt/xfstest] fsck.xfs /dev/sda8 
[/sbin/fsck.vfat (3) -- /dos] fsck.vfat /dev/sda9

到目前为止,我们检查了 ext 和 vfat 文件系统。现在我们来检查 /dev/sda8 上的 XFS 文件系统。正如清单 7 所示,fsck 命令仅告诉我们应该使用 xfs_check 命令。如果没有错误,那么 xfs_check 不显示任何输出。对于冗长输出,有一个 -v 选项,不过它对于一个简单的检查来说太过繁琐。

清单 7. 对 XFS 使用 fsck
[root@echidna ~]# fsck /dev/sda8
fsck from util-linux-ng 2.16.2
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_check(8) and xfs_repair(8).
[root@echidna ~]# xfs_check /dev/sda8

监控磁盘可用空间

在一个存储设备上,文件或目录包含在 集合中。有关文件或目录的信息包含在 inode 中,inode 记录的信息包括,所有者是谁、上次访问文件是何时、文件有多大、它是否是目录、谁能对其进行读写操作。inode 号也就是文件序列号,在一个特定的文件系统中是惟一的。参见我们的文章 学习 Linux,101:文件和目录管理,了解关于文件和目录的更多信息。

数据块和 inode 都要占用文件系统上的空间,所以需要监控空间的使用情况,确保文件系统有增长的空间。

df 命令

df 命令显示挂载的文件系统的相关信息。 如果您添加 -T 选项,那么显示中会包含文件系统的类型;否则不予显示。对于我们上面使用过的 Fedora 12 系统,df 输出如清单 8 所示。

清单 8. 显示文件系统使用情况
[ian@echidna ~]$ df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sdb9     ext3    45358500  24670140  18384240  58% /
tmpfs        tmpfs     1927044       808   1926236   1% /dev/shm
/dev/sda2     ext3      772976     17760    716260   3% /grubfile
/dev/sda8      xfs    41933232      4272  41928960   1% /mnt/xfstest
/dev/sda7     ext3   112754024    192248 106834204   1% /mnt/ext3test
/dev/sda9     vfat     2052256         4   2052252   1% /dos

注意,输出包含块的总数、使用量和空闲量。还有设备名(/dev/sbd9)以及其挂载点:/ /dev/sdb9。tmpfs 项用于虚拟内存文件系统。这些仅存在于 RAM 或交换空间中,且在挂载时无需使用 mkfs 命令即可被创建。您可以在 “通用线程:高级文件系统实现者指南,第 3 部分” 中了解更多 tmpfs 相关内容。

如果需要关于 inode 使用情况的特定信息,那么在 df 命令中使用 -i 选项。您可以使用 -x 选项排除某些文件系统类型,或使用 -t 选项只显示某些文件系统类型的信息。如有必要,可多次使用这些选项。参见清单 9 中的示例。

清单 9. 显示 inode 使用情况
[ian@echidna ~]$ df -i -x tmpfs
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb9            2883584  308920 2574664   11% /
/dev/sda2              48768      41   48727    1% /grubfile
/dev/sda8            20976832       3 20976829    1% /mnt/xfstest
/dev/sda7            7159808      11 7159797    1% /mnt/ext3test
/dev/sda9                  0       0       0    -  /dos
[ian@echidna ~]$ df -iT -t vfat -t ext3
Filesystem    Type    Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb9     ext3   2883584  308920 2574664   11% /
/dev/sda2     ext3     48768      41   48727    1% /grubfile
/dev/sda7     ext3   7159808      11 7159797    1% /mnt/ext3test
/dev/sda9     vfat         0       0       0    -  /dos

您可能会看到 FAT32 文件系统没有 inode,这不足为奇。如果您有一个 ReiserFS 文件系统,其信息中也不显示 inode。ReiserFS 在 stat items 中保存文件和目录的元数据。而且,因为 ReiserFS 使用平衡的树结构,所以没有像 ext2、ext3 或 xfs 文件系统中那样的预先确定的 inode 号。

还可以在 df 命令上使用其他选项,从而只显示本地文件系统或者控制输出格式。例如,使用 -H 选项显示人工可读的空间大小,比如 1K 表示 1024,或使用 -h(或 --si)选项将空间大小表示以 10 的幂次方为单位(1K=1000)。

如果不确定目录树的某一部分在哪个文件系统上,那么可以使用 df 命令并提供目录名或文件名作为参数,如清单 10 所示。

清单 10. 人工可读的 df 输出
[ian@echidna ~]$ df --si ~ian/index.html
Filesystem             Size   Used  Avail Use% Mounted on
/dev/sdb9               47G    26G    19G  58% /

tune2fs 命令

文件系统的 ext 系列也有一个称为 tune2fs 的实用程序,可用于检查有关块数目的信息以及文件系统是日志型(ext3 或 ext4)还是标准型(ext2)的信息。该命令还可用于设置多个参数或通过添加一个日志将一个 ext2 文件系统转化为 ext3 文件系统。清单 11 显示几乎为空的 ext3 文件系统的输出信息,使用 -l 选项来仅显示现有信息。

清单 11. 使用 tune2fs 显示 ext4 文件系统信息
[root@echidna ~]# tune2fs -l /dev/sda7
tune2fs 1.41.9 (22-Aug-2009)
Filesystem volume name:   EXT3TEST
Last mounted on:          <not available>
Filesystem UUID:          7803f979-ffde-4e7f-891c-b633eff981f0
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype 
 needs_recovery sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              7159808
Block count:              28637862
Reserved block count:     1431893
Free blocks:              28140444
Free inodes:              7159797
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1017
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Mon Aug  2 15:23:34 2010
Last mount time:          Tue Aug 10 14:17:53 2010
Last write time:          Tue Aug 10 14:17:53 2010
Mount count:              3
Maximum mount count:      30
Last checked:             Mon Aug  2 15:23:34 2010
Check interval:           15552000 (6 months)
Next check after:         Sat Jan 29 14:23:34 2011
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
Default directory hash:   half_md4
Directory Hash Seed:      2438df0d-fa91-4a3a-ba88-c07b2012f86a
Journal backup:           inode blocks

xfs_info

对于 XFS 文件系统,您可以使用 xfs_info 显示在创建文件系统时 mkfs.xfs 显示的相同信息。您需要在一个挂载的文件系统上使用 xfs_info

清单 12. 使用 xfs_info 显示 XFS 文件系统信息
[root@echidna ~]# xfs_info /dev/sda8
meta-data=/dev/sda8              isize=256    agcount=4, agsize=2622108 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=10488429, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=5121, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

du 命令

df 命令只提供关于整个文件系统的信息。有时您可能想知道主目录使用了多少空间,或者将 /usr 转移到一个专用的文件系统需要多大的分区。为了回答这类问题,使用 du 命令。

du 命令显示参数指定的文件(或多个文件)的相关信息。如果目录名已给定,那么 du 命令递归地计算给定目录中的每个文件和子目录的大小。结果可能有很多输出。幸好,您可以使用 -s 选项显示目录的汇总。如果使用 du 获取多个目录的信息,那么可以添加 -c 选项来获得总值。您也可以使用与 df 相同的选项集(-h-H--si 等)来控制输出格式。清单 13 显示了一个新建用户的主目录的两个视图,该用户已登录过一次且创建了一个 index.html 文件。

清单 13. 使用 du
[testuser1@echidna ~]$ du -hc *
4.0K	Desktop
4.0K	Documents
4.0K	Downloads
16K	index.html
4.0K	Music
4.0K	Pictures
4.0K	Public
4.0K	Templates
4.0K	Videos
48K	total
[testuser1@echidna ~]$ du -hs .
1.1M	.

du -c * 输出的 48K 总值与 du -s 输出的 1.1M 总值之间有这么大差别,是因为后者包括以点开始的项,比如 .bashrc,而前者不包含。

关于 du 还要注意一点,对于正在运行的命令所在的目录,您必须有读权限。

现在,让我们使用 du 来显示 /usr 树及其每个一级子目录使用的空间总量。结果如清单 14 所示。使用根授权来确保您拥有适当的访问权限。

清单 14. 在 /usr 上使用 du
[root@echidna ~]# du -shc /usr/*
394M	/usr/bin
4.0K	/usr/etc
4.0K	/usr/games
156M	/usr/include
628K	/usr/kerberos
310M	/usr/lib
1.7G	/usr/lib64
110M	/usr/libexec
136K	/usr/local
30M	/usr/sbin
2.9G	/usr/share
135M	/usr/src
0	/usr/tmp
5.7G	total

修复文件系统

偶尔会有最坏的情况发生(我们希望尽量少发生),您需要因系统崩溃或故障未能完全卸载而修复一个文件系统。上面提及的 fsck 命令可检查和修复文件系统。通常自动启动时检查可修复这些问题,以供您继续操作。

如果文件系统的引导时自动检查无法恢复一致性,您通常要转入一个单用户 shell,可以在这里用一些指令手动运行 fsck。对于非日志型的 ext2 文件系统,会向您提出一系列请求,请您确认建议的操作以修复文件系统上的特定块。一般应该回答 y(表示 yes ),让 fsck 尝试修复问题。在系统重启时,检查是否有任何丢失的数据或文件。

如果怀疑文件系统损坏了,或希望手动运行检查,大多数检查程序要求先卸载文件系统,或至少以只读模式挂载文件系统。因为不能卸载正在运行的系统上的根文件系统,最好进入单用户模式(使用 telinit 1),然后以只读模式重新挂载根文件系统,这时便可执行一个一致性检查。检查文件系统的一种更好的方式是引导一个恢复系统,比如实时 CD 或 USB 内存密钥,然后从那里检查未挂载的文件系统。

如果 fsck 不能修复问题,您还有其他工具可用,不过您通常需要具备文件系统布局的高级知识才能成功修复问题。

为什么要采用日志?

对 ext2 硬盘进行 fsck 扫描要花费相当长的时间,因为必须完整地扫描文件系统的内部数据结构(或元数据)。随着文件系统越来越大,尽管硬盘的速度快了,但是这个过程花的时间仍然越来越长,所以一次完整的检查可能要花一小时,甚至更长时间。

这个问题导致了日志型 文件系统的出现。日志型文件系统维护着最近对文件系统元数据的修改的日志。在系统崩溃之后,文件系统驱动程序检查了这个日志,判断文件系统最近修改的部分是否有错误。由于采用了这种设计,检查日志型文件系统的一致性通常只需几秒时间,无论文件系统有多大。而且,文件系统驱动程序常常在挂载时检查文件系统,所以外部的 fsck 检查一般是不需要的。实际上,对于 xfs 文件系统,fsck 不做任何事!

如果要运行文件系统手动检查,请查看适当 fsck 命令(fsck.ext3e2fsck reiserfsck 等)的手册页,以决定合适的参数。对 ext2、ext3 或 ext4 文件系统使用 -p 选项将促使 fsck 自动修复可安全修复的问题。这实际上就是在引导时进行的。

我们将阐述 e2fsckxfs_check 的用法,首先在一个空的 XFS 文件系统上运行 e2fsck,然后使用 xfs_check 修复它。我们曾建议您使用 fsck 前端,以确保您在使用正确的检查程序,而且我们提醒过,不这样做可能导致文件系统损坏。

在清单 15 中,我们开始对包含一个 XFS 文件系统的 /dev/sda8 运行 e2fsck。在经过一些交互之后,我们使用 ctrl-Break 来中断,但是已经太晚了。警告:除非您希望毁坏您的文件系统,否则切勿这样做。

清单 15. 在一个 XFS 文件系统上谨慎地手动运行 e2fsck
[root@echidna ~]# e2fsck /dev/sda8
e2fsck 1.41.9 (22-Aug-2009)
/dev/sda8 was not cleanly unmounted, check forced.
Resize inode not valid.  Recreate<y>? yes

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
Free blocks count wrong for group #0 (31223, counted=31224).
Fix<y>? ctrl-Break

/dev/sda8: e2fsck canceled.

/dev/sda8: ***** FILE SYSTEM WAS MODIFIED *****

即使您在第一个提示出现时中断,您的 XFS 系统还是受到损坏了。再次强调,除非您希望毁坏您的文件系统,否则切勿这样做。

现在让我们使用 xfs_check 来修复 XFS 文件系统。xfs_check 命令相当冗长,不过它有一个 -s 选项仅报告真正的错误。其输出如清单 16 所示。

清单 16. 使用 xfs_check 修复 XFS 文件系统
[root@echidna ~]# xfs_check -s /dev/sda8
cache_node_purge: refcount was 1, not zero (node=0x1cf3ee0)
xfs_check: cannot read root inode (117)
cache_node_purge: refcount was 1, not zero (node=0x1cf7400)
xfs_check: cannot read realtime bitmap inode (117)
bad magic # 0x1040000 in btbno block 0/1
bad magic # 0x4000 in btcnt block 0/2
bad magic # 0x58465342 in inobt block 0/0

您还可使用 xfs_repair 来修复一个 XFS 文件系统。如同 xfs_check 一样,它也相当冗长,且没有 -s 选项。如果您想了解什么需要修复但又无需真正修复它,使用 xfs_repair -n

超级块

您可能会困惑,所有这些检查和修复工具如何知道从哪里开始。Linux 和 UNIX 文件系统通常有一个超级块,它描述文件系统元数据 或描述文件系统本身的数据。这通常存储在一个已知位置,一般在文件系统起始处附近,而在其他众所周知的位置进行复制。您可以使用 mke2fs-n 选项来显示一个现有文件系统的超级块位置。如果您指定了参数,比如每个 inode 的字节数之间的比例,在使用 -n 选项时就应当调用带相同参数的 mke2fs。清单 17 显示 /dev/sda7 上超级块的位置。

清单 17. 查找超级块位置
[root@echidna ~]# mke2fs -n /dev/sda7
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
7159808 inodes, 28637862 blocks
1431893 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
874 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

高级工具

有一些更高级的工具可以用来检查或修复文件系统。通过手册页了解正确的使用方法,并参考 Linux Documentation Project(参见 参考资料)中的 how-to 信息。这些工具几乎都要求先卸载文件系统,但是有些功能可以应用于以只读模式挂载的文件系统。下面描述了几个命令。

在尝试进行任何恢复之前,应该对文件系统进行备份。

用于 ext2 和 ext3 文件系统的工具

tune2fs
调整 ext2 和 ext3 文件系统上的参数。使用它将日志添加到 ext2 文件系统上,使它成为 ext3 系统,以及显示或设置实施检查之前进行挂载的最大次数。还可以分配标签,以及设置或禁用各种可选特性。
dumpe2fs
输出 ext2 或 ext3 文件系统的超级块和块组描述符信息。
debugfs
这是一个交互式的文件系统调试器。使用它检查或修改 ext2 或 ext3 文件系统的状态。

用于 Reiserfs 文件系统的工具

reiserfstune
显示和调整 ReiserFS 文件系统上的参数。
debugreiserfs
它对 ReiserFS 文件系统执行与 dumpe2fs 和 debugfs 相似的功能。

用于 XFS 文件系统的工具

xfs_info
显示 XFS 文件系统信息。
xfs_growfs
扩展 XFS 文件系统(假设有另一个分区可用)。
xfs_admin
更改 XFS 文件系统的参数。
xfs_repair
当挂载检查不足以修复系统时,修复 XFS 文件系统。
xfs_db
检查或调试 XFS 文件系统。

我们将通过对 debugfs 命令的阐述来完成对文件系统工具的回顾。该命令允许您探索一个 ext 系列文件系统的内在工作机理。默认情况下,它以只读模式打开文件系统。它有很多命令可支持您取消对文件或目录的删除,且执行其他需要写访问的操作,因此您特别需要使用 -w 选项启用写访问。使用它时一定要谨慎。清单 18 显示在我的系统上打开根文件系统;导航到我的主目录;显示一个名为 index.html 的文件的相关信息,包括 inode 号;最后将该 inode 号映射回文件的路径名。

清单 18. 使用 debugfs
[root@echidna ~]# debugfs /dev/sdb9
debugfs 1.41.9 (22-Aug-2009)
debugfs:  cd home/ian
debugfs:  pwd
[pwd]   INODE: 165127  PATH: /home/ian
[root]  INODE:      2  PATH: /
debugfs:  stat index.html
Inode: 164815   Type: regular    Mode:  0644   Flags: 0x0
Generation: 2621469650    Version: 0x00000000
User:  1000   Group:  1000   Size: 14713
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 32
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4bf1a3e9 -- Mon May 17 16:15:37 2010
atime: 0x4c619cf0 -- Tue Aug 10 14:39:44 2010
mtime: 0x4bf1a3e9 -- Mon May 17 16:15:37 2010
Size of extra inode fields: 4
Extended attributes stored in inode body: 
  selinux = "unconfined_u:object_r:user_home_t:s0\000" (37)
BLOCKS:
(0-2):675945-675947, (3):1314836
TOTAL: 4

debugfs:  ncheck 164815
Inode	Pathname
164815	/home/ian/index.html
debugfs:  q

结束语

我们介绍了可用于检查、修改和修复文件系统的多个工具。切记谨慎使用本文讨论的工具或任何其他工具。只需轻轻敲击一下键盘可能就会导致数据丢失。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=524522
ArticleTitle=学习 Linux,101: 保持文件系统的完整性
publish-date=09202010