磁盘硬件故障表现为I/O挂起、命令卡死、dmesg报Buffer I/O error或end_request错误,需通过dmesg定位错误设备,用smartctl检查Reallocated_Sector_Ct等SMART值,并确认设备是否离线或只读。

磁盘硬件故障引发的 I/O 挂起,往往表现为命令卡死(ls、df无响应)、dmesg持续刷错、Buffer I/O error、end_request: I/O error或设备直接消失。这不是配置或负载问题,而是底层物理层已不可靠——必须快速识别、隔离、验证,避免进一步损坏或元数据崩溃。
看内核日志找硬件级错误信号
这是最直接的突破口。硬件异常会在内核日志中留下明确痕迹:
- 运行
dmesg -T | tail -40,重点搜索:Buffer I/O error、end_request: I/O error、ata timeout、UNC(Uncorrectable)、Media error、failed command: READ或WRITE - 若看到类似
sdX: tag#Y FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE+Sense Key: Medium Error,基本可断定是磁盘介质故障 - 注意错误是否集中于某块盘(如全为
sdb);若多个设备同时报错,需排查控制器、背板或电源
用 smartctl 验证磁盘物理健康
SMART 是判断硬盘是否“带病上岗”的核心依据。务必在低负载时执行:
- 先装工具:
apt install smartmontools(Debian/Ubuntu)或yum install smartmontools(RHEL/CentOS) - 执行完整检测:
sudo smartctl -a /dev/sdX(把sdX替换为实际设备,如sdb) - 重点关注以下几项(任一非零且持续增长即属高危):
Reallocated_Sector_Ct:重映射扇区数,>0 表示已有坏道被替换
Current_Pending_Sector:待重映射扇区,>0 表示有扇区读取失败,正等待写入触发重映射
UDMA_CRC_Error_Count:接口级校验错误,飙升说明线材、接口或控制器问题
Reported_Uncorrect:无法纠正的读写错误总数
检查设备是否已进入只读或离线状态
内核发现严重错误后,会主动降级保护:
- 运行
cat /proc/partitions或lsblk,确认目标设备是否还存在;若消失,大概率是硬件掉盘或控制器复位 - 执行
mount | grep "sdX",看挂载选项是否含ro(只读)。只读是保护机制,但根源仍是硬件异常 - 查 LVM 状态:
lvs和vgs,若 LV 显示inactive或 VG 报 “not found”,很可能是底层 PV 设备已不可达
辅助验证:用 dd 或 hdparm 测试底层通路
当 smartctl 无法读取或返回异常,需绕过缓存直探硬件:
- 测试首扇区可读性(极轻量):
sudo dd if=/dev/sdX of=/dev/null bs=512 count=1
若立即报Input/output error,说明开头区域已失效 - 测随机访问稳定性:
sudo hdparm -Tt /dev/sdX
若Timing buffered disk reads超时或结果为零,表明设备响应异常 - ⚠️ 注意:避免对疑似故障盘执行大范围
dd或badblocks,可能加剧损坏
不复杂但容易忽略——硬件故障的线索就藏在 dmesg 和 smartctl 的输出里,关键是要看准指标、及时停用、留出抢救窗口。











