背景

操作系统中,文件系统负责组织-----数据的存储和恢复方式。运维中我们经常会遇到,因主机突然断电宕机、异常关机或其他磁盘故障等,导致文件系统可能会被破坏,比较常见的是超级块(Super-block)损坏。超级块是文件系统的核心"档案",它记录了该文件系统的类型、大小、空闲磁盘块等信息。 如果文件系统出现这种不一致,建议验证其完整性。

我们可以通过名为fsck的系统实用程序( 文件系统一致性检查)完成。 此检查可在引导期间自动完成或手动运行。

在本文中,我们将回顾fsck实用程序及其用法,以帮助大家修复磁盘错误。

操作指导

1)何时在Linux中使用fsck

运行fsck时,有不同的场景。 以下是一些例子:

系统无法启动。
系统上的文件已损坏(登录系统后可能会看到输入/输出错误)。
附加驱动器(包括闪存驱动器/ SD卡)无法正常工作。

2)fsck命令回顾

需要使用超级用户权限或root运行Fsck命令。 它有丰富的参数:

-A - 用于检查所有文件系统。 该列表取自/etc/fstab 。
-C - 显示进度条。
-l - 锁定设备以确保在检查期间没有其他程序尝试使用该分区。
-M - 不检查已挂载的文件系统。
-N - 仅显示将要执行的操作 - 不进行实际更改。
-P - 如果要并行检查文件系统,包括root。
-R - 不检查根文件系统。 这仅适用于’ -A '。
-r - 为正在检查的每个设备提供统计信息。
-T - 不显示标题。
-t - 专门指定要检查的文件系统类型。 类型可以是逗号分隔列表。
-V - 提供描述正在进行的操作。

3)运行fsck修复Linux文件系统错误的几个条件:

1>在单用户模式下运行;该模式下可以无密码登录;
2>在救援模式下运行;
3>在文件系统卸载情况下运行,禁止在挂载使用情况下操作,容易导致其他次生风险,造成文件系统永久性损坏。

示例1:# fsck -y /dev/sda //比如分区报对应的sda Ext4-fs error,执行该命令检查次哦按分区错误并自动修正

示例2:#fsck -AR -y //修复除root分区外的其他所有分区错误

示例3:#touch /forcefsck //系统启动时强制fsck;这样在下次启动期间,将执行fsck 。 如果停机时间很重要,应提前合理安排,因为如果系统上有许多使用的inode, fsck可能需要一些额外的时间,这可能是不能忍受的。完成后,强手动删除forcefsck文件,避免下次重启继续检查

当文件系统的超级块数据损坏是,Linux将无法识别该文件系统,挂载时会出现"you must specify the filesystem type"的提示而不能正常使用。

修复一般的文件系统错误可以使用"fsck"命令进行,结合"-t"选项指定文件系统类型,结合"-y"选项对发现的问题自动回答"yes"。需要注意的是,如果该文件系统遭受破坏的情况很严重,则修复完毕后可能会丢失一些数据,因此请慎重决定是否进行修复(必要时也可以先用dd命令将损坏的分区进行备份)。

备份:dd if=/dev/sda2 of=/sda2.img 或
dd if=/dev/sda2 | gzip > /local/path/sda2_image.gz //
恢复:dd if=/sda2.img of=/dev/sda2 或
gzip -dc /local/path/sda2_image.gz | dd of=/dev/sda2

另外可用badblocks -sv /dev/sda //检查磁盘坏道