dmesg日志显示磁盘故障如何修复
Linux 磁盘故障定位与修复实操指南

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
服务器突然变慢,或者文件系统莫名其妙变成只读,这背后十有八九是磁盘在“报警”。别慌,跟着下面这套流程走,你就能像老手一样,快速定位问题并采取正确行动。
一、快速定位与判断
第一步,别急着动手,先搞清楚状况。系统内核日志(dmesg)是故障的第一现场,从这里入手最直接。
- 查看内核日志,聚焦 I/O 与设备错误:
- 先看最近的记录:
dmesg | tail -n 100 - 再精准过滤关键词:
dmesg | grep -iE “error|fail|ata|sd|IO|bad” - 这里有几个典型的“危险信号”:出现 Buffer I/O error、I/O error、Unrecovered read error,或者文件系统提示变为只读(比如EXT4-fs报“Couldn‘t remount RDWR … unprocessed orphan inode list”)。这些信息通常指向介质损坏或文件系统出了严重问题。
- 先看最近的记录:
- 检查磁盘健康状态(SMART):
- 安装体检工具:
yum/apt install smartmontools - 快速看结果:
smartctl -H /dev/sda(看整体健康状态) - 看详细报告:
smartctl -a /dev/sda - 报告里要盯紧这几个关键字段:SMART overall-health(PASSED/FAILING)、Reallocated_Sector_Ct(重映射扇区数)、Current_Pending_Sector(待映射扇区数)、UDMA_CRC_Error_Count(CRC错误计数)。如果重映射或待映射扇区数不是0,基本可以确定盘片有物理问题了;而CRC错误计数偏高,则很可能是线缆或接口接触不良。
- 安装体检工具:
- 检查是否只读挂载: 运行
mount | grep ‘ro,’。如果发现根分区都变成只读了,这往往是文件系统检测到致命错误后触发的自我保护机制。 - 实时 I/O 与负载: 执行
iostat -dx 1 5。如果看到 await(等待时间)异常飙升,或者 %util(利用率)长时间接近100%,那磁盘要么是异常了,要么就是遇到了性能瓶颈。
二、常见故障场景与处理
根据上面收集到的线索,基本可以归入下面几种场景。对症下药,效率最高。
| 场景与 dmesg 特征 | 处理要点 |
|---|---|
| 文件系统只读(EXT4-fs 报“Couldn‘t remount RDWR … unprocessed orphan inode list”) | 首要任务是备份关键数据。然后进入救援模式或单用户模式,对问题分区执行 fsck(例如 fsck -y /dev/mapper/vg0-root)。如果修复失败,可以尝试升级 e2fsck 工具版本后再试。修复完成后,再重新正常挂载。 |
| SMART 健康为 FAILING 或 Reallocated/Pending 不为 0 | 这是硬盘的“病危通知书”。立即安排全量备份,并准备更换新硬盘。如果磁盘在RAID阵列里,请严格按照阵列管理流程,将故障盘踢出并更换重建。 |
| 大量 “Buffer I/O error / I/O error / Unrecovered read error” | 同样,先备份数据。然后卸载该磁盘,运行只读坏道扫描定位问题:badblocks -s -v -o bb.log /dev/sdX。如果发现的坏道极少,可能是逻辑错误,可以在确保数据已备份且磁盘离线的前提下,尝试用 badblocks -w 命令重写扇区来修复。否则,一律视为物理坏道,该隔离就隔离,该换盘就换盘。 |
| “UnrecovData 10B8B BadCRC / READ FPDMA QUEUED / hard resetting link” | 这类错误高概率是链路问题,比如SATA线质量差、电源线松动、背板接触不良或控制器兼容性有问题。优先更换一根高质量的SATA线,检查电源接口和主板接口,更新驱动和固件。排除链路问题后,再重新评估硬盘本体的健康状况。 |
| 根分区无法卸载导致无法 fsck | 系统盘正在使用,自然无法修复。这时需要借助救援模式、LiveCD或专用的救援系统启动,在离线环境下对相应的逻辑卷或分区执行 fsck 操作。 |
三、标准修复流程
无论遇到哪种情况,遵循一个清晰的流程能最大程度避免失误和数据损失。
- 保障安全: 动手前,立即对重要数据进行全量备份。最好在离线或只读挂载状态下操作,防止修复过程造成二次破坏。
- 确认对象: 综合利用
dmesg、smartctl、mount、iostat等命令,明确问题到底是文件系统错误,还是磁盘介质/链路故障,并锁定具体的设备或分区(例如/dev/sda、/dev/mapper/vg0-root)。 - 文件系统修复(只读或异常挂载时):
- 首先卸载目标分区(如果是系统盘,需要进入救援/单用户模式)。
- 执行修复:
fsck -y /dev/sdXN;对于ext系列文件系统,也可以用e2fsck。 - 如果工具版本太旧或报错,尝试在救援模式下升级
e2fsck后再重试。
- 介质坏道处理(仅在已备份前提下):
- 只读扫描定位:
badblocks -s -v -o bb.log /dev/sdX - 逻辑坏道尝试重写: 先备份受影响的文件或扇区,然后使用
badblocks -w(注意参数顺序是 END START),修复后再次扫描验证。 - 将坏块加入文件系统坏块表(ext系列):
e2fsck -l bb.log /dev/sdXN - 必须清醒认识到,物理坏道是无法“修复”的,只能通过隔离或更换磁盘来解决。用分区或阵列策略屏蔽坏区只是权宜之计,并非长久之策。
- 只读扫描定位:
- 链路问题排查: 如果日志中间出现 BadCRC、NCQ错误或链路复位,别急着判硬盘死刑。更换SATA线、检查电源和主板接口、排除背板问题往往是更有效的办法。排除后再测试SMART状态。
- 恢复与验证: 所有修复完成后,重新挂载磁盘。在恢复业务前,建议做一次全量校验(比如用
rsync的校验模式,或对比关键文件的校验和)。之后,还需要持续观察一段时间dmesg日志和SMART数据趋势,确保问题真正解决。
四、关键命令速查
为了方便操作,这里把核心命令再整理一遍:
- 日志与状态:
dmesg | tail -n 100;dmesg | grep -iE “error|fail|ata|sd|IO|bad”mount | grep ‘ro,’;iostat -dx 1 5
- 健康检测:
smartctl -H /dev/sda;smartctl -a /dev/sda
- 文件系统修复:
fsck -y /dev/sdXN;e2fsck -y /dev/sdXN
- 坏道检测与处理:
- 只读扫描:
badblocks -s -v -o bb.log /dev/sdX - 写入修复(仅针对逻辑坏道,且必须已备份):
badblocks -s -w /dev/sdX END START - 标记坏块(ext系列):
e2fsck -l bb.log /dev/sdXN
- 只读扫描:
五、风险提示
最后,必须强调几点。数据修复和坏道重写操作本身就有导致数据丢失的风险。因此,“先备份,后操作”是铁律,尽量在离线环境下进行。对于关键业务系统,如果心里没底,建议请专业人员进行现场评估和操作。尤其要记住:当SMART报告显示FAILING,或者出现不可恢复的读错误时,最稳妥的方案是优先更换磁盘,而不是冒险继续修复。硬盘有价,数据无价。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
centos php如何进行代码审查
CentOS 下的 PHP 代码审查实践 一 工具选型与定位 工欲善其事,必先利其器。一套清晰的工具组合,能让代码审查事半功倍。具体来说,可以这样分工: 规范与风格:首推 PHP_CodeSniffer(phpcs)。它的任务很明确——统一团队的编码规范,比如强制执行 PSR-12。那些命名、缩进、
centos php如何配置缓存机制
在CentOS系统中配置PHP的缓存机制 说到给CentOS上的PHP提速,配置缓存机制——通常指的就是启用OPcache扩展——是个立竿见影的办法。它能把编译好的PHP脚本缓存在内存里,下次执行时直接调用,省去了重复编译的开销,执行效率自然就上去了。下面,咱们就一步步来看看具体怎么配置。 1 安
centos php如何管理依赖库
在CentOS系统中,使用PHP管理依赖库通常涉及到以下几个步骤: 1 安装PHP及相关工具 第一步,自然是确保系统已经装好了PHP以及相关的开发工具。这事儿用一条命令就能搞定: sudo yum install php php-cli php-devel 2 安装Composer 接下来,我们
CentOS Java如何进行故障恢复
CentOS Ja va故障恢复实操手册 当Ja va应用在CentOS服务器上突然“罢工”,那种感觉确实让人头疼。别慌,这份手册的目的,就是帮你把那些零散的命令和步骤,梳理成一套清晰、可执行的恢复流程。咱们从最紧急的快速操作开始,一步步深入到稳定保障和深度排查。 一 快速恢复步骤 故障发生时,时间
CentOS Java如何进行单元测试
在CentOS上进行Ja va单元测试:从环境搭建到流程集成 为Ja va项目编写单元测试,是保障代码质量的关键一环。在CentOS这类Linux服务器环境中部署和运行测试,流程其实很清晰。下面,我们就来一步步拆解,看看如何从零开始,在CentOS上为你的Ja va项目搭建起一套可靠的单元测试流程。
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

