Linux 硬盘SMART信息与温度查询全流程操作手册

本手册适用于 Ubuntu、Debian 等主流 Linux 发行版,覆盖内置 SATA 硬盘、USB 移动硬盘、NVMe 固态硬盘全场景。内容从磁盘路径定位、工具部署、SMART 数据读取、温度检测到故障排查,全程无冗余表述,每条命令、每段脚本均附带详细解释,解决硬盘检测中设备不识别、无温度数据、SMART 读取失败等常见问题。


一、前置操作:确认磁盘设备路径

查询硬盘 SMART 信息和温度前,必须精准定位物理磁盘路径,禁止使用分区路径。以下为四种可靠的磁盘定位方法,按推荐优先级排序。

方法1:lsblk 命令(直观易用,首选)

lsblk 用于列出系统所有块设备,可快速区分物理磁盘与分区,定位效率最高。

lsblk

命令输出解读:

  • TYPE 为 disk:代表整块物理硬盘,是查询 SMART 和温度的目标对象

  • TYPE 为 part:代表磁盘分区,仅用于挂载存储,不可用于硬盘检测

  • SATA/USB 接口硬盘:路径格式为 /dev/sdX(X 为英文字母 a/b/c,按识别顺序排序)

  • NVMe 固态硬盘:路径格式为 /dev/nvmeXn1(X 为数字 0/1/2,按插槽顺序排序)

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk  # 物理硬盘,目标路径:/dev/sda
└─sda1        8:1    0 931.5G  0 part /mnt/hdd  # 硬盘分区,不可用
nvme0n1     259:0    0 512G   0 disk  # 物理硬盘,目标路径:/dev/nvme0n1
└─nvme0n1p1 259:1    0 512G   0 part /  # 系统分区,不可用

方法2:fdisk -l 命令(精准识别,带硬盘型号)

该命令需管理员权限,可显示硬盘型号、容量、分区表等详细信息,适合多盘环境区分硬盘。

sudo fdisk -l

输出关键信息:开头 Disk /dev/xxx 即为物理磁盘路径,后续 Disk model 显示硬盘型号,可核对目标硬盘。

方法3:df -h 命令(按挂载点反查)

已知硬盘挂载目录时,通过挂载目录反向定位磁盘路径,快速锁定目标盘。

# 替换 /mnt/hdd 为实际挂载目录
df -h /mnt/hdd

输出示例:/dev/sda1 916G 200G 669G 23% /mnt/hdd,分区 /dev/sda1 对应的物理磁盘为 /dev/sda

方法4:/dev/disk/by-id 目录(硬件ID绑定,无歧义)

该目录下文件为硬盘唯一硬件标识,绑定硬盘型号,适合服务器多盘场景,彻底避免路径混淆。

ls -l /dev/disk/by-id/

输出为软链接格式,链接指向的 ../../sdX../../nvmeXn1 即为最终磁盘路径。


二、安装硬盘检测必备工具

Linux 系统默认未安装硬盘 SMART 检测工具,需手动部署核心工具包,覆盖全类型硬盘检测需求。

# 1. 更新系统软件源,确保安装包为最新版本
sudo apt update

# 2. 安装smartmontools:核心SMART检测工具,支持SATA/USB硬盘读取健康度、温度数据
sudo apt install -y smartmontools

# 3. 安装lm-sensors:系统传感器工具,作为SMART读取失败时的兜底温度检测方案
sudo apt install -y lm-sensors

# 4. 安装nvme-cli:NVMe固态硬盘专用工具,读取NVMe盘SMART和温度更稳定精准
sudo apt install -y nvme-cli

三、硬盘SMART信息查询(详细命令+解释)

SMART 是硬盘自我监测、分析及报告技术,存储硬盘健康状态、通电时长、坏扇区、温度等核心寿命数据,是判断硬盘故障的关键依据。

(一)基础SMART查询命令

所有命令需替换 /dev/sda 为实际磁盘路径;USB移动硬盘/硬盘盒必须追加 -d sat 参数(部分桥接芯片可尝试 -d usb、-d ata),内置SATA/NVMe盘无需加 -d 参数。以下为常用命令及功能说明:

命令语句命令功能详解
sudo smartctl -a /dev/sda
(USB移动硬盘需加 -d 参数:sudo smartctl -a -d sat /dev/sda)读取硬盘完整SMART信息,包含健康状态、属性参数、运行日志、温度、坏扇区统计等全部数据,适合全面排查
sudo smartctl -A /dev/sda
(USB移动硬盘需加 -d 参数:sudo smartctl -A -d sat /dev/sda)仅读取SMART关键属性表,精简输出,聚焦温度、通电时长、坏扇区等核心参数,查询速度更快
sudo smartctl -H /dev/sda
(USB移动硬盘需加 -d 参数:sudo smartctl -H -d sat /dev/sda)快速检测硬盘整体健康状态,仅输出PASSED(正常)或FAILED(故障),适合快速巡检
sudo smartctl -i /dev/sda
(USB移动硬盘需加 -d 参数:sudo smartctl -i -d sat /dev/sda)查看硬盘基础信息+SMART功能状态,确认SMART是否开启

(二)关键SMART字段含义解释

  • SMART overall-health self-assessment test result:硬盘整体健康评估结果,PASSED代表无故障,FAILED代表存在硬件故障

  • Power_On_Hours:硬盘累计通电时长,反映硬盘使用磨损程度

  • Power_Cycle_Count:硬盘开关机次数,辅助判断硬盘使用频率

  • Temperature_Celsius:硬盘当前运行温度,单位为摄氏度

  • Reallocated_Sector_Ct:已重映射坏扇区数量,数值越大代表硬盘坏道越多,故障风险越高

  • Current_Pending_Sector:待修复不稳定扇区数量,数值非零需警惕数据丢失风险

(三)开启SMART功能(必做操作)

若执行查询命令提示 SMART support is: Disabled,说明硬盘SMART功能未开启,需先启用才能读取数据。

# 启用目标磁盘SMART功能,替换/dev/sda为实际路径
# USB硬盘需加 -d sat 参数:sudo smartctl -s on -d sat /dev/sda
sudo smartctl -s on /dev/sda

# 验证SMART是否成功开启
# USB硬盘需加 -d sat 参数:sudo smartctl -i -d sat /dev/sda
sudo smartctl -i /dev/sda

四、分场景硬盘温度查询(详细命令)

场景1:内置SATA硬盘(直连主板)

SATA 硬盘直接连接主板,无需额外参数,可直接读取温度数据。

# 命令1:精准提取温度数据,过滤冗余输出
sudo smartctl -A /dev/sda | grep -i temperature

# 命令2:若上述命令无结果,查看完整SMART信息,手动查找Temperature相关字段
sudo smartctl -a /dev/sda

场景2:USB移动硬盘/硬盘盒(核心场景)

USB 硬盘通过桥接芯片连接,系统无法自动识别SMART数据,需手动指定设备类型。为避免反复测试参数,提供一键自动化脚本,自动适配各类USB桥接芯片。

第一步:创建检测脚本

# 新建脚本文件,命名为check_hdd_temp.sh
nano check_hdd_temp.sh

第二步:粘贴脚本代码(全注释详解)

#!/bin/bash
# 脚本功能:Linux硬盘SMART健康状态+温度一键检测,适配SATA/USB/NVMe硬盘
# 使用方法:sudo bash check_hdd_temp.sh 磁盘路径(例:sudo bash check_hdd_temp.sh /dev/sda)

# 判断是否输入磁盘路径,无参数则提示用法并退出
if [ -z "$1" ]; then
    echo "用法:sudo bash $0 物理磁盘路径"
    echo "示例:sudo bash $0 /dev/sda"
    exit 1
fi

# 接收输入的磁盘路径参数
DISK="$1"
echo "==================== 硬盘检测开始 ===================="
echo "目标磁盘路径:$DISK"

# 定义USB桥接芯片兼容类型,遍历测试确保适配
DEVICE_TYPES=("sat" "usb" "ata" "scsi")
for TYPE in "${DEVICE_TYPES[@]}"; do
    echo -e "\n--- 测试设备类型:$TYPE ---"
    # 测试当前类型是否能识别硬盘,屏蔽错误输出
    sudo smartctl -i -d "$TYPE" "$DISK" >/dev/null 2>&1
    # 判断上一条命令执行结果,0代表识别成功
    if [ $? -eq 0 ]; then
        echo "设备类型适配成功,读取SMART数据中..."
        # 输出硬盘健康状态
        echo -e "\n--- 硬盘健康状态 ---"
        sudo smartctl -H -d "$TYPE" "$DISK"
        # 输出硬盘温度数据
        echo -e "\n--- 硬盘当前温度 ---"
        sudo smartctl -A -d "$TYPE" "$DISK" | grep -i temperature
        echo -e "\n==================== 检测完成 ===================="
        exit 0
    fi
done

# 所有类型测试失败,启用兜底检测方案
echo -e "\nSMART数据读取失败,切换兜底检测方案..."
# 兜底1:系统传感器检测温度
echo -e "\n--- 系统传感器温度数据 ---"
sudo sensors-detect --auto >/dev/null 2>&1
sensors | grep -i -E "hdd|temp|drive"
# 兜底2:udisks工具读取磁盘信息
echo -e "\n--- udisks磁盘温度信息 ---"
udisksctl info --block-device "$DISK" | grep -i temperature
echo -e "\n==================== 检测结束 ===================="

第三步:脚本赋权与执行

# 给脚本添加可执行权限
chmod +x check_hdd_temp.sh

# 运行脚本,替换/dev/sda为实际磁盘路径
sudo bash check_hdd_temp.sh /dev/sda

场景3:NVMe固态硬盘

NVMe 盘协议特殊,推荐专用工具读取,数据更稳定,支持两种查询方式。

# 方式1:smartctl通用工具查询
sudo smartctl -a /dev/nvme0n1 | grep -i temperature

# 方式2:nvme-cli专用工具查询(推荐,兼容性更强)
sudo nvme smart-log /dev/nvme0n1 | grep temperature

五、硬盘温度标准参考

不同类型硬盘正常工作温度范围不同,超出警戒温度会缩短硬盘寿命、引发降速或掉盘故障。

硬盘类型正常工作温度警戒温度(需改善散热)
机械硬盘(HDD)30℃ - 45℃高于55℃
SATA固态硬盘(SSD)40℃ - 70℃高于75℃
NVMe固态硬盘40℃ - 75℃高于80℃(易触发降速、掉盘)

六、常见故障排查详解

1. 报错:Unknown USB bridge

问题原因:USB硬盘桥接芯片未被自动识别,缺少设备类型参数。
解决方法:直接使用上文一键脚本,自动遍历适配设备类型,无需手动修改参数。

2. 无温度数据显示

问题原因:廉价USB硬盘盒硬件不支持SMART透传、老旧硬盘无温度传感器。
解决方法:将硬盘从硬盘盒取出,直连主板SATA接口后重新检测;或更换支持SMART的硬盘盒。

3. 健康状态显示FAILED

问题原因:硬盘存在硬件故障、坏扇区过多。
解决方法:立即备份硬盘内所有数据,停止使用该硬盘,尽快更换硬盘避免数据丢失。

4. 提示SMART功能未开启

问题原因:硬盘SMART功能默认关闭。
解决方法:执行 sudo smartctl -s on /dev/sda 开启后,重新执行查询命令。


七、常用命令速查(精简版)

  • 查看系统所有磁盘:lsblk

  • SATA硬盘健康状态:sudo smartctl -H /dev/sda

  • SATA硬盘温度查询:sudo smartctl -A /dev/sda | grep -i temperature

  • USB硬盘一键检测:sudo bash check_hdd_temp.sh /dev/sda

  • NVMe硬盘温度查询:sudo nvme smart-log /dev/nvme0n1 | grep temperature

  • 完整SMART信息查询:sudo smartctl -a /dev/sda