Linux 检查和修复文件系统

点击访问 Linux 命令大全 >>

Linux 文件系统在系统发生异常(如宕机、突然断电、内核崩溃)时会产生文件不一致。对于文件系统较小的损坏,fsck 命令可以很好地解决问题。特别是对 ext3fs 和 ReiserFS 这样的日志文件系统,fsck 可以快速执行检查,并将日志回滚到上一次正常的状态中。

fsck 命令

fsck 命令的英文全称是“filesystem check”,即检查文件系统的意思,常用于检查并修复 Linux 文件系统的一些错误信息。注意:操作文件系统前,需要先备份重要数据,以防丢失。

Linux fsck 命令用于检查并修复 Linux 文件系统,可以同时检查一个或多个 Linux 文件系统;若系统掉电或磁盘发生问题,可利用 fsck 命令对文件系统进行检查。

语法格式:fsck [OPTIONS] [FILE SYSTEM]

OPTIONS 选项说明:

选  项说  明
-a自动修复文件系统,不询问任何问题
-A依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N不执行指令,仅列出实际执行会进行的动作
-P当搭配”-A”参数使用时,则会同时检查所有的文件系统
-r采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式
-R当搭配”-A”参数使用时,则会略过/目录的文件系统不予检查
-t指定要检查的文件系统类型
-T执行fsck指令时,不显示标题信息
-V显示指令执行过程

运行 fsck 命令后 ,它将返回退出代码:

# man fsck 
0 No errors 
1 Filesystem errors corrected 
2 System should be rebooted 
4 Filesystem errors left uncorrected 
8 Operational error 
16 Usage or syntax error 
32 Checking canceled by user request 
128 Shared-library error

实例:查看 fsck 软件版本信息

[root@localhost ~]# fsck --version
fsck,来自 util-linux 2.23.2

实例:修复坏的分区文件系统

[root@localhost ~]# fsck -t ext3 -r /usr/local
 fsck from util-linux 2.23.2
 e2fsck 1.42.9 (28-Dec-2013)
 fsck.ext3: Is a directory while trying to open /usr/local
 The superblock could not be read or does not describe a correct ext2
 filesystem.  If the device is valid and it really contains an ext2
 filesystem (and not swap or ufs or something else), then the superblock
 is corrupt, and you might try running e2fsck with an alternate superblock:
     e2fsck -b 8193 
 /usr/local: status 8, rss 1232, real 0.020288, user 0.002022, sys 0.005354

实例:自检全部的硬盘

[root@localhost ~]# fsck

xfs_repair 命令

可使用 xfs_repair 命令尝试修复受损的 xfs 文件系统。语法如下:

[root@localhost ~]# xfs_repair
Usage: xfs_repair [options] device

Options:
  -f           The device is a file
  -L           Force log zeroing. Do this as a last resort.
  -l logdev    Specifies the device where the external log resides.
  -m maxmem    Maximum amount of memory to be used in megabytes.
  -n           No modify mode, just checks the filesystem for damage.
  -P           Disables prefetching.
  -r rtdev     Specifies the device where the realtime section resides.
  -v           Verbose output.
  -c subopts   Change filesystem parameters - use xfs_admin.
  -o subopts   Override default behaviour, refer to man page.
  -t interval  Reporting interval in seconds.
  -d           Repair dangerously.
  -V           Reports version and exits.

下面将先查看笔者 Linux 的文件系统类型,如下:

[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.3G   16G    8% /
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  146M  869M   15% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0

根据上面信息可以看出,/dev/sda1 和 /dev/mapper/centos-root 使用的均是 xfs 文件系统类型。

实例:使用 xfs_repair 命令检查和修复 /dev/sda1 文件系统。

## 尝试去检查和修复 /dev/sda1 文件系统,但是抛出了已挂载文件系统错误
[root@localhost ~]# xfs_repair /dev/sda1
xfs_repair: /dev/sda1 contains a mounted filesystem
xfs_repair: /dev/sda1 contains a mounted and writable filesystem

fatal error -- couldn't initialize XFS library

## 使用 umount 将 /dev/sda1 文件系统卸载
[root@localhost ~]# umount /dev/sda1

## 再次尝试去检查和修复 /dev/sda1 文件系统,成功了 ^_^
[root@localhost ~]# xfs_repair /dev/sda1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

xfs 相关命令如下:

  • xfs_admin:调整 xfs 文件系统的各种参数 

  • xfs_copy:拷贝 xfs 文件系统的内容到一个或多个目标系统(并行方式) 

  • xfs_db:调试或检测 xfs 文件系统(查看文件系统碎片等) 

  • xfs_check:检测 xfs 文件系统的完整性 

  • xfs_bmap:查看一个文件的块映射 

  • xfs_repair:尝试修复受损的 xfs 文件系统 

  • xfs_fsr:碎片整理 

  • xfs_quota:管理 xfs 文件系统的磁盘配额 

  • xfs_metadump:将 xfs 文件系统的元数据 (metadata) 拷贝到一个文件中 

  • xfs_mdrestore:从一个文件中将元数据 (metadata) 恢复到 xfs 文件系统 

  • xfs_growfs:调整一个 xfs 文件系统大小(只能扩展) 

  • xfs_logprint:printthe log of an XFS filesystem 

  • xfs_mkfile:创建一个 XFS 文件

  • xfs_info:expand an XFS filesystem 

  • xfs_ncheck:generate pathnames from i-numbers for XFS 

  • xfs_rtcp:XFS realtime copy command 

  • xfs_freeze:suspend access to an XFS filesystem 

  • xfs_io:debug the I/O path of an XFS filesystem

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号