smartctl 是唯一能提前预警物理硬盘损坏的工具,需用 sudo smartctl -a /dev/sda 查看健康状态、重映射扇区数和待映射扇区数,nvme盘用 /dev/nvme0n1,raid直通盘需用 storcli 等专用工具。

用 smartctl 查物理硬盘健康状态(最准)
宝塔面板自己不检测坏道,它连 SMART 信息都读不到。真要确认是不是硬盘快挂了,必须进命令行用 smartctl。这不是“辅助手段”,是唯一能提前预警物理损坏的方式。
- 先查清系统里硬盘设备名:
lsblk或fdisk -l,重点找类似/dev/sda、/dev/vdb这种主磁盘,别去查/dev/sr0(光驱)或 LVM 逻辑卷 - 执行检测:
sudo smartctl -a /dev/sda(把sda换成你的真实盘符) - 关键看三处:
SMART overall-health self-assessment test result: PASSED—— 必须是 PASSED,FAIL 就得立刻备份换盘Reallocated_Sector_Ct—— 值大于 0 就说明已出现坏扇区,>5 就该警惕,>10 基本建议停用Current_Pending_Sector—— 这个值非 0 比Reallocated_Sector_Ct更危险,代表有扇区读写失败但还没重映射,随时可能丢数据
注意:smartctl 对 NVMe 盘要用 -a /dev/nvme0n1,参数一样,但设备路径不同;RAID 卡直通的盘可能被屏蔽 SMART,这时得靠 RAID 卡工具(如 storcli)查。
别信 chkdsk 或 Windows 工具扫 Linux 磁盘
有人把服务器硬盘拔下来接 Windows,用 chkdsk 或第三方坏道扫描软件扫,结果全是误报。Linux 的 ext4/xfs 文件系统结构和 Windows 完全不同,这些工具根本看不懂元数据,只会把日志、预留空间、延迟分配块当成“无法读取”,疯狂标红。
-
chkdsk只适用于 NTFS/FAT 分区,对/dev/vda1运行等于无效操作 - 图形化坏道扫描工具(如 HD Tune)在 Linux 下跑不了,强行用 Wine 也拿不到底层 ATA 指令权限
- 真要验证文件系统逻辑一致性,应该用
e2fsck -f /dev/vda1(ext4)或xfs_repair -n /dev/vda1(xfs),但这检查的是文件系统错误,不是硬盘物理坏道
一句话:smartctl 看硬件,e2fsck/xfs_repair 修文件系统,二者不能混用,也不能互相替代。
面板显示 IO 延迟高?先排除坏道再调优
宝塔面板监控页如果持续显示“IO 延迟 > 100ms”或“写入卡顿”,很多人第一反应是调 MySQL、关日志、升 SSD。但若硬盘已有坏道,所有优化都是白忙——系统每次读到坏扇区就会重试、超时、降速,await 值会直接飙到几百毫秒,%util 却未必拉满。
- 执行
iostat -x 1,若看到await长期 > 100ms,同时svctm(实际服务时间)也高,大概率是硬件响应变慢,不是负载问题 - 再运行
sudo iotop -oP,如果高 IO 进程写入量不大(比如才几百 KB/s),但延迟极高,就是硬盘在“硬扛”坏扇区 - 此时别急着
e4defrag或调内核参数——碎片整理对坏道无效,反而可能加速盘片恶化
坏道一旦触发,最稳妥动作只有两个:立刻备份关键数据 + 准备更换硬盘。试图“抢救”或“继续用几天”,往往在某次读写中彻底掉线。
机械盘 vs SSD:坏道表现完全不同,别用同一套逻辑判断
HDD 和 SSD 的“坏道”机制本质不同,误判会导致完全相反的操作:
- HDD 的坏道是物理划伤或磁头偏移,
Reallocated_Sector_Ct上升是明确信号;声音异常(嗒嗒声)、随机卡顿、dmesg里频繁出现end_request: I/O error都是典型表现 - SSD 没有“扇区”概念,它用磨损均衡和备用块管理故障,
smartctl里要看的是Media_Wearout_Indicator(剩余寿命)、Available_Reserve_Space(备用块余量),值低于 10% 就该换,而不是等重映射计数涨
更关键的是:SSD 出现写入缓慢、掉盘、只读模式,90% 是主控固件 bug 或 NAND 老化,smartctl 报告可能还是 “PASSED”,这时候得查厂商专用工具(如三星 Magician、Intel MAS)或固件更新记录。
坏道这事,宁可多花十分钟跑一遍 smartctl,也别靠“好像还能用”硬撑。等面板打不开、网站 502、数据库连不上,数据早就不完整了。










