麒麟系统遇i/o错误等异常时须用smartctl查s.m.a.r.t.原始值判物理坏道,badblocks扫描定位逻辑坏块,再以e2fsck屏蔽,最后用smart自检交叉验证。

当麒麟系统出现文件复制失败、I/O错误、dmesg日志中频繁报“Input/output error”,或启动卡在“Boot From Harddisk”时,必须立即用命令行检测硬盘是否已产生坏道——这类底层故障无法通过图形界面彻底确认,只能靠终端工具穿透固件层获取原始证据。
用smartctl读取S.M.A.R.T.原始值判别物理坏道
这是最权威的非侵入式判断方式,直接解析硬盘固件日志,结果可量化、可复现,不依赖文件系统状态。
方法一:快速健康状态初筛
Ctrl+Alt+T打开终端 → 输入su回车 → 输入root密码获取权限 → 执行lsblk -d -o NAME,MODEL,ROTA,TRAN | grep -E "(sda|nvme)"确认目标磁盘(如/dev/sda)→ 运行smartctl -H /dev/sda;若返回“PASSED”仅说明基础自检通过,【不能排除早期坏道】——很多重映射扇区刚发生时整体健康评估仍显示正常。
方法二:关键字段深度核查
执行smartctl -a /dev/sda | grep -E "(Reallocated_Sector|Current_Pending|Raw_Read_Error|UDMA_CRC)" → 重点看三列RAW_VALUE:
① Reallocated_Sector_Ct > 5 → 表示已有5个以上扇区被强制重映射,物理损伤已实际发生;
② Current_Pending_Sector ≠ 0 → 【硬盘已发现不可读扇区但尚未成功重映射,随时可能彻底失效,必须立即备份数据】;
③ Raw_Read_Error_Rate持续上升 → 校验错误频发,预示磁头老化或盘片污染。
用badblocks逐扇区扫描定位逻辑坏块
前一步只能告诉你“有没有坏道”,这一步才能精确到字节偏移地址,生成可屏蔽的坏块列表,适用于ext4/xfs等已格式化分区的底层验证。
第一步:准备环境
运行mount | grep sda2确认目标分区未挂载;若有输出,先执行sudo umount /dev/sda2;若提示“target is busy”,用sudo lsof +D /挂载点查出占用进程并kill。
第二步:执行只读扫描
输入sudo badblocks -v -s /dev/sda2 > /tmp/badsectors.txt 2>&1;-v显示进度,-s实时刷新,>将结果重定向至文本文件;该操作不写入磁盘,安全可靠。
第三步:写入坏块表
对ext4分区执行sudo e2fsck -l /tmp/badsectors.txt /dev/sda2;此命令会将坏块地址写入文件系统预留区,内核后续分配空间时自动跳过这些扇区。
第四步:验证屏蔽效果
运行sudo dumpe2fs -h /dev/sda2 | grep -i "bad";若输出中包含Bad blocks count: [非零数值],说明屏蔽成功。
触发SMART固件级自检确认异常位置
短自检和长自检由硬盘固件自主执行,能暴露smartctl常规读取无法发现的瞬态错误,是交叉验证坏道真实性的黄金标准。
执行短自检:smartctl -t short /dev/sda;等待约2分钟 → 再次运行smartctl -a /dev/sda → 查看“Self-test execution status”字段是否为“completed without error”。
若短自检失败或报告异常,立即执行长自检:smartctl -t long /dev/sda;【长自检期间严禁断电、休眠、卸载磁盘,否则可能导致固件状态紊乱甚至永久锁死】;长自检耗时数小时,完成后同样用smartctl -a /dev/sda检查结果。











