Linux硬盘文件系统损坏,Linux常见的文件系统类故障该怎么解决-文件系统错误

Linux如何分析和排查系统故障——排除文件系统类故障

前言:文件系统及磁盘中所存储的数据的价值是无法估量的,管理员的工作职责之一就是要确保数据的安全。由于磁盘属于易损耗品,无法预估它什么时候会损坏。最好的办法就是建立完善的备份机制。当系统出现文件系统或磁盘类故障时,一定要慎重处理。

一、修复文件系统

在Linux主机中,可能会因为非正常关机、突然断电、设备数据读写异常等原因导致文件系统的破坏。比较常见的是超级块(Super-block)损坏。超级块是文件系统的核心"档案",它记录了该文件系统的类型、大小、空闲磁盘块等信息。

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

示例1:执行以下操作可以破坏/dev/sdb1文件系统的超级块数据库,尝试挂载时不能成功。

模拟对 /dev/sdb1 分区的破坏操作

ca3d95a652f0d7909e94845084f8c7b2.png

检查是否能挂载该分区

7721a47260da476db6bea75b9bb2a5ea.png

对于通过/etc/fstab文件自动挂载且设置了fsck参数(第6列的值非0;该数字用于决定在系统启动时进行磁盘检查的顺序。0表示不进行检查,1表示优先检查,2表示其次检查。这个知识点以前分享过,是在我的主页一篇标题为:"Linux基础命令——挂载、卸载文件系统"的文章中讲的,感兴趣的话可以去我的主页翻翻看)的文件系统,若超级块出现错误,则Linux系统在启动时会报错,并提示用户需要进行修复操作。例如,当/dev/sdb1分区的超级块出现错误时,启动后系统将提示"Give root password for maintenance"。如下图图示1.1

出现这种情况时,只需根据提示输入root用户的密码,即可进入到一个临时的shell环境,在这里用户可以对出现错误的文件系统进行修复。修复完毕后执行exit命令即可退出并重启系统。如下图图示1.2

图示:1.1

9cd13acba826dd02164ae1ea3b33cfa5.png

图示1.2

852604e05662cee3d1bf6d17c443486b.png

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

上述总结:

故障原因非正常关机、突然断电、设备读写失误等

文件系统的超级块(super-block)信息被破坏

故障现象无法向分区中读取或写入数据

启动后提示"Give root password for maintenance"

解决思路根据提示输入 root 口令,进入修复状态

使用 fsck 命令进行修复

二、磁盘资源耗尽

当一个文件系统的磁盘空间耗尽以后,将无法继续在该分区中创建新的文件数据,从而导致故障的出现。例如,当根分区"/"中的磁盘空间耗尽以后,将可能导致部分程序乃至整个系统无法正常启动或运行,因此一些临时性的运行文件将无法建立。

当根分区磁盘空间不足而无法启动进入Linux系统时,可以通过安装光盘进入急救模式,转移或清理掉根分区中占用大量空间的文件。具体过程就不再赘述了,光盘进入急救模式在上上个文章已经分享过了。使用dd命令可以模拟出根分区耗尽的故障,例如"dd if=/dev/zero of=/testfile bs=1M count=999999"。

除此之外,在文件系统中能够使用的文件数量(对应i节点数量)也是有限的,当一个文件系统被格式化以后,其i节点即文件数量就已经固定下来了。如果用户在该分区中创建了巨量的细小文件(耗尽i节点),将可能出现这种情况:虽然该分区中任然有大量的剩余磁盘空间,但是却无法再建立新文件。

应用示例:

1.模拟i节点耗尽故障

具体步骤:

1)新建一个约32MB大小的EXT4文件系统(如/dev/sdb7),将其挂载到/data目录下(怎么创建新的分区在以前的文章中也有过分享)。并使用带"-i"选项的df命令确认该文件系统中的节点的使用情况。

图示:

c4d1ed9d325a89caa53b262fd739f2f7.png

2)编写一个简单的脚本,运行该脚本可以耗尽/dev/sdb7分区中的所有可用的i节点。关于脚本的相关知识,我们将在以后的文章中会讲到,这里简单了解一下。

图示:

aad751fa4cec913dc3f741bd319e7209.png

3)当i节点耗尽以后,在该文件系统中再创建新的文件时,会出现"设备上没有空间"的错误假象。但当我们通过df命令查看该分区的磁盘空间时,会看到还有可用的磁盘空间,这其实就是因为i节点耗尽导致的,所以无法创建。

图示:

996d38968522b3212f333b2e7ff86314.png

2.修复i节点耗尽故障

理解i节点耗尽故障的根结之后,问题就好解决了。只需找到该分区中占用大量i节点的细小文件,并进行转移或者删除即可。对于多用户公用的文件系统,建议为相关用户设置磁盘限额(包括文件数量和磁盘空间两方面)。

图示:

1be8d4d09f004b67c6f8589faba7f7f8.png

上述总结:

故障原因磁盘空间已被大量的数据占满,空间耗尽

虽然还有可用空间,但文件数i节点耗尽

故障现象无法写入新的文件,提示"… : 设备上没有空间"

部分程序无法运行,甚至系统无法启动

解决思路清理磁盘空间,删除无用、冗余的文件

转移或删除占用大量 i 节点的琐碎文件

进入单用户模式、急救模式进行修复

为用户设置磁盘配额

三、检测硬盘坏道

磁盘坏道可分为逻辑坏道和物理坏道两种,前者主要由于软件操作不当造成的,可以使用软件修复;后者是物理损坏,只能通过更爱磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏块的磁盘空间。

故障现象读取磁盘中的数据时,磁盘设备发出异常声响。

访问磁盘中的某个文件时,反复读取且出错,提示文件损坏

对于新建立的分区无法完成格式化

系统使用该磁盘时频繁死机

硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并可能造成频繁死机或数据丢失的后果。所以必要时应该对磁盘进行定期检测,检查是否存在坏道。

在Linux系统中,检测磁盘的坏道情况可以使用badblocks命令进行

选项:

#-s 显示进度信息

#-v 显示详情

示例:查看硬盘设备/dev/sdb中的坏道情况

f66f7ec0908fb9c7131296d1af65b103.png

在长期使用计算机的过程中,文件系统和磁盘的故障现象很难完全避免,对于此类故障的修复处理需要十分谨慎,如果操作不慎可能会加重数据破坏的程度。当发现硬盘中存在坏道时,应尽快停止系统中的应用服务、备份相关数据,必要时立即关闭系统以防止磁盘坏道进一步扩散,导致更大的损失。对于存在坏道的硬盘设备,应使用其他完好的硬盘进行替换。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值