商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux怎么查看硬盘的健康状态 Linux下smartctl检测详解

Linux怎么查看硬盘的健康状态 Linux下smartctl检测详解

  发布于2026-05-22 阅读(0)

扫一扫,手机访问

看到那个“PASSED”就松一口气?别急,这事儿可没这么简单。在Linux服务器上,smartctl -H /dev/sda输出的“PASSED”状态,充其量只是硬盘固件在那一刻上报的一张“快照”。它可能被RAID卡伪造,也可能掩盖了一个危险的事实:那些读写不稳定的“待定扇区”已经存在,只是还没触发重映射机制。真正的硬盘健康管理,远不止看这一行字。

Linux怎么查看硬盘的健康状态 Linux下smartctl检测详解

第一步:确认SMART真的“在线”

很多运维老手都踩过这个坑:在老服务器或者配置了RAID卡(比如常见的LSI MegaRAID)的机器上,直接运行smartctl -i /dev/sda,结果却显示“SMART support is: Disabled”,甚至直接报错“ATA device not found”。这往往不是硬盘坏了,而是访问路径被硬件层拦截了。

正确的打开方式是这样的:

  • 先用lsblk或者sudo fdisk -l确认你的物理硬盘在系统里对应的设备名,比如可能是/dev/sdb
  • 运行sudo smartctl -i /dev/sdb,如果输出里没有明确出现“SMART support is: Enabled”,先别急着判硬盘死刑。试试加上设备类型参数:对于接在RAID卡后的硬盘,用sudo smartctl -i -d megaraid,0 /dev/sdb(这里的“0”通常指阵列中的第一块物理盘);对于直连的SATA盘,可以尝试-d ata
  • 如果还遇到“Permission denied”,那是忘了加sudo;但如果返回“No Information”,那问题就有点棘手了,很可能是硬件层面彻底屏蔽了SMART通道,这时候可能得考虑切换RAID卡到直通模式,或者更换硬件了。

第二步:抓住关键指标,别被表格迷惑

运行smartctl -A /dev/sda,你会看到几十行属性列表,让人眼花缭乱。其实,90%的信息都可以暂时忽略。真正需要你死死盯住的,是下面这四个ID及其对应的原始值(RAW_VALUE)。切记,别看VALUE那一列——各家厂商的编码逻辑天差地别,有的数值越小越糟糕,有的则相反,只有原始值最可靠。

  • 重映射扇区计数(Reallocated_Sector_Ct, ID 5):只要这个值大于0,就说明硬盘已经动用了备用扇区来替换物理坏道。如果这个数字还在持续上涨,那基本就是在告诉你:这块盘正在加速报废。
  • 当前待定扇区(Current_Pending_Sector, ID 197):这是真正的红灯警报。大于0意味着有扇区处于读写不稳定状态,下一次访问就可能直接触发重映射,甚至变成无法恢复的硬错误。一旦发现,必须高度警惕。
  • UDMA CRC错误计数(UDMA_CRC_Error_Count, ID 199):这个错误通常不怪硬盘本身,它更像是“信号不好”的提示。问题往往出在线缆松动、供电不稳,或者主板SATA接口老化。如果这个值反复上升,第一件事就是换条质量好的数据线再测试。
  • 媒体磨损指示器(Media_Wearout_Indicator, ID 233):这是SSD的专属指标,机械硬盘不用看。它的原始值越接近0,就意味着NAND闪存的剩余寿命越短。

第三步:理解自检,用对场景

SMART自检分短的和长的,用错了场景,轻则白费时间,重则可能让硬盘当场“罢工”。

短自检(smartctl -t short /dev/sda)大概就两分钟,它只扫描文件分配表、目录区这些高频访问的区域,非常适合纳入日常巡检脚本。

长自检(smartctl -t long /dev/sda)可就“实在”多了,它会遍历硬盘上每一个LBA地址。在机械硬盘上,这个过程可能长达数小时,期间I/O响应会明显变慢,甚至出现卡顿。

这里有几点关键提醒:

  • 除非你已经发现Current_Pending_Sector > 0,否则不要轻易发起长自检。它并不会修复坏道,它的作用是把那些“待定扇区”逼出来,强制硬盘做出判断,这个过程有可能导致不稳定的硬盘直接掉线。
  • 对SSD来说,长自检意义不大,耗时虽短但很少能触发重映射。监控SSD的健康,更应该关注Media_Wearout_IndicatorA vailable_Reserve_Space这类指标。
  • 自检过程中,想查看进度用sudo smartctl -c /dev/sda;需要中断后台自检任务,则用sudo smartctl -X /dev/sda
  • 自检完成后,必须使用sudo smartctl -l selftest /dev/sda来查看日志。只有看到Status列显示为“Completed without error”才算过关。如果出现“Failed”,务必记下日志中报告的LBA地址,那就是坏道的具体位置。

第四步:告别手动,构建自动化监控

依赖smartctl -a /dev/sda来做自动化监控,其实是个误区。这个命令的输出包含大量冗余信息(固件版本、序列号、温度历史记录等),而且文本结构不固定,用grep或脚本解析很容易“断线”。

真正的自动化巡检,应该基于smartctl -A(注意是大写A)。它的输出格式稳定,字段对齐工整,非常方便用awkcut这类工具提取关键属性的RAW_VALUE

几个进阶要点:

  • 别依赖图形化桌面工具,Linux服务器的健康管理必须交给脚本和cron。一个最精简的检查脚本核心可能就是一行:smartctl -A /dev/sda | awk '/Reallocated_Sector_Ct|Current_Pending_Sector|UDMA_CRC_Error_Count/ {print $1,$NF}'
  • 注意,NVMe固态硬盘不走传统的ATA协议,smartctl命令默认对它无效。这时候需要用sudo nvme smart-log /dev/nvme0n1来获取健康信息。
  • 最后,还有一种最让人头疼的情况:所有SMART指标一片翠绿,看起来健康无比,但当你用dd if=/dev/sda of=/dev/null bs=1M做全盘读取时,却会随机卡住好几秒。这通常是主控固件存在Bug,或者NAND闪存磨损严重不均导致的,而这类问题,SMART指标根本反映不出来。所以,定期做一下简单的I/O压力测试,有时比看SMART更有用。
本文转载于:https://www.php.cn/faq/2400296.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注