Linux 使用 hddtemp 监控硬盘温度
使用 hddtemp 监控硬盘温度
hddtemp或 smartctl 实用程序将通过从支持此功能的驱动器上的 SMART 读取数据来为您提供硬盘驱动器的温度。
只有现代硬盘驱动器才有温度传感器。hddtemp 还支持从 SCSI 驱动器读取 SMART 信息。hddtemp 可以作为简单的命令行工具或守护进程来从所有服务器获取信息。
如何在 Linux 上安装 hddtemp
要在Debian / Ubuntu Linux上安装 hddtemp,请使用apt-get 命令/ apt 命令:我的Ubuntu 20.04 LTS 桌面版
$ sudo apt-get install hddtemp
的示例输出如下:
[sudo] password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: hddtemp 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 47.7 kB of archives. After this operation, 185 kB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu focal/universe amd64 hddtemp amd64 0.3-beta15-53 [47.7 kB] Fetched 47.7 kB in 2s (30.3 kB/s) Preconfiguring packages ... Selecting previously unselected package hddtemp. (Reading database ... 267678 files and directories currently installed.) Preparing to unpack .../hddtemp_0.3-beta15-53_amd64.deb ... Unpacking hddtemp (0.3-beta15-53) ... Setting up hddtemp (0.3-beta15-53) ... Processing triggers for man-db (2.9.1-1) ... Processing triggers for systemd (245.4-4ubuntu3.19) ...
要在CentOS/RHEL/SL/Oracle Linux下安装 hddtemp ,请运行yum 命令(首先打开 EPEL repo):
$ sudo yum install hddtemp
键入以下 pacman 命令在Arch Linux 发行版下安装 hddtemp :
$ sudo pacman -S hddtemp
运行以下 dnf 命令在 Fedora Linux 发行版下安装 hddtemp:
$ sudo dnf install hddtemp
执行以下 zypper 命令在 OpenSUSE Linux 发行版下安装 hddtemp:
$ sudo zypper install hddtemp
相关:如何在 OpenSUSE Linux 中检查 CPU 温度
关于源代码安装的说明
您也可以执行源代码安装。在此处下载源代码 tar 包。使用以下命令
$ wget http://download.savannah.nongnu.org/releases/hddtemp/hddtemp-0.3-beta15.tar.bz2
解压并安装 hddtemp :
在 /usr/share/misc 或 /etc 目录安装硬盘温度数据库:
$ tar -jxvf hddtemp-0.3-beta15.tar.bz2
$ cd hddtemp-0.3-beta15
$ ./configure
$ make
$ sudo make install
$ cd /usr/share/misc
# use the wget command to grab the db
# wget http://download.savannah.nongnu.org/releases/hddtemp/hddtemp.db
使用 hddtemp 监控硬盘温度
让我们看看 hddtemp 命令的用法、语法和示例。语法是
TYPE 可以是 SATA、PATA 或 SCSI。如果省略,hddtemp 将尝试猜测磁盘类型。
$ hddtemp disk
$ hddtemp TYPE:disk
$ hddtemp [options] TYPE:disk
如何在 Linux 上监控硬盘温度?
要查看 /dev/sda 的温度,请输入以下命令:
$ hddtemp /dev/sda
示例输出
/dev/sda: WDC WD2500YS-01SHB1: 25°C
上面的输出表明我的硬盘温度是 25°C。如果温度高于 60°C,请立即考虑冷却选项。
如何查找远程服务器硬盘温度?
默认情况下,hddtemp 绑定到 TCP/IP 端口 7634。您需要以守护进程模式运行 hddtemp。登录远程计算机并按如下方式启动它以监视 /dev/sda、/dev/sdb、/dev/sdc 和 /dev/sdd:
# hddtemp -d /dev/sd[abcd]
使用 telnet 或 nc / netcat 命令从远程计算机获取温度:
$ telnet remotebox 7634
或
$ nc 192.168.1.100 7634
示例输出:
|/dev/sda|Samsung SSD 850 EVO mSATA 500GB|45|C|
您可以使用 awk 命令按如下方式格式化它:
$ nc centos7-box 7634 | awk -F'|' '{print $2 " " $4 $5 "(" $3 ")"}'
示例输出:
/dev/sda 45C(Samsung SSD 850 EVO mSATA 500GB)
如果温度 >= 55,则关闭 Linux 计算机
要关闭计算机,请通过cron tab(cron job)文件运行以下命令:
当温度 >= 55°C 时关闭计算机的示例 shell 脚本(下载链接):
# t=$(hddtemp /dev/sda --numeric)
# [ $t -ge 55 ] && /sbin/shutdown -h 0
#!/bin/bash # Purpose: Shutdown server if disk temp crossed $ALERT_LEVEL # Author: Vivek Gite {https://www.example.com/}, under GPL v.2.x # ----------------------------------------------------------------- HDDS="/dev/sda /dev/sdb /dev/sdc /dev/sdc /dev/sdd /dev/sde" HDT=/usr/sbin/hddtemp LOG=/usr/bin/logger DOWN=/sbin/shutdown ALERT_LEVEL=60 for disk in $HDDS do if [ -b $disk ]; then HDTEMP=$( ${HDT} --numeric ${disk} ) if [ $HDTEMP -ge $ALERT_LEVEL ]; then $LOG "System going down as hard disk \"$disk\" temperature ($HDTEMP) crossed its limit." sync;sync $DOWN -h 0 fi fi done
您可以在 Linux 或类 Unix系统上使用 cron 作业运行脚本:
$ sudo crontab -e
附加以下内容每 10 分钟运行一次 cron 作业来检查磁盘温度:
*/10 * * * * /root/bin/chk-disk-temp.bash
hddtemp 命令选项
要查看使用情况,请运行:
$ hddtemp --help
示例输出:
-b --drivebase : display database file content that allow hddtemp to recognize supported drives. -D --debug : display various S.M.A.R.T. fields and their values. Useful to find a value that seems to match the temperature and/or to send me a report. (done for every drive supplied). -d --daemon : run hddtemp in TCP/IP daemon mode (port 7634 by default.) -f --file=FILE : specify database file to use. -F --foreground : don't daemonize, stay in foreground. -l --listen=addr : listen on a specific interface (in TCP/IP daemon mode). -n --numeric : print only the temperature. -p --port=# : port to listen to (in TCP/IP daemon mode). -s --separator=C : separator to use between fields (in TCP/IP daemon mode). -S --syslog=s : log temperature to syslog every s seconds. -u --unit=[C|F] : force output temperature either in Celsius or Fahrenheit. -q --quiet : do not check if the drive is supported. -v --version : display hddtemp version number. -w --wake-up : wake-up the drive if need. -4 : listen on IPv4 sockets only. -6 : listen on IPv6 sockets only.
关于 NVME SSD 的说明
我们可以使用 smartctl 命令或 nvme 命令来获取温度。例如:
$ sudo smartctl -A /dev/nvme0
这是我看到的:
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.18.0-25-generic] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF SMART DATA SECTION === SMART/Health Information (NVMe Log 0x02, NSID 0xffffffff) Critical Warning: 0x00 Temperature: 41 Celsius Available Spare: 100% Available Spare Threshold: 10% Percentage Used: 0% Data Units Read: 15,889 [8.13 GB] Data Units Written: 80,845 [41.3 GB] Host Read Commands: 256,531 Host Write Commands: 553,980 Controller Busy Time: 3 Power Cycles: 38 Power On Hours: 4 Unsafe Shutdowns: 27 Media and Data Integrity Errors: 0 Error Information Log Entries: 41 Warning Comp. Temperature Time: 0 Critical Comp. Temperature Time: 0 Temperature Sensor 1: 41 Celsius Temperature Sensor 2: 45 Celsius
另一个选择是尝试使用 nvme 命令读取 nvme ssd 温度,如下所示:
$ sudo nvme smart-log /dev/nvme0
这是我从 Linux 笔记本电脑上看到的内容:
Smart Log for NVME device:nvme0 namespace-id:ffffffff critical_warning : 0 temperature : 41 C available_spare : 100% available_spare_threshold : 10% percentage_used : 0% data_units_read : 15,889 data_units_written : 80,841 host_read_commands : 2,56,531 host_write_commands : 5,53,822 controller_busy_time : 3 power_cycles : 38 power_on_hours : 4 unsafe_shutdowns : 27 media_errors : 0 num_err_log_entries : 41 Warning Temperature Time : 0 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 41 C Temperature Sensor 2 : 45 C Thermal Management T1 Trans Count : 0 Thermal Management T2 Trans Count : 0 Thermal Management T1 Total Time : 0 Thermal Management T2 Total Time : 0
请参阅“ Linux 使用命令行查找 NVMe SSD 温度”了解更多信息。
了解 smartctl 实用程序
如果您安装了smartctl 实用程序,请尝试按如下方式获取温度数据:
根据您的要求设置 ALERT_LEVEL。请参阅您的硬盘手册以了解工作温度指南。以下是一般温度指南(摘自 Seagate SV35.2 系列硬盘网页):
# smartctl -d ata -A /dev/sda | grep -i temperature
# smartctl -A /dev/sdb | grep -i temperature
操作 | 0 至 60 摄氏度 |
非操作 | -40 至 70 摄氏度 |
最大工作温度变化 | 每小时 20 摄氏度 |
最大非工作温度变化 | 每小时 30 摄氏度 |
最高工作外壳温度 | 69 摄氏度 |
基于 Gnome GUI 的磁盘和存储工具
键入以下命令:
$ gnome-disks
单击磁盘,它将显示磁盘温度,如下所示:
MS-Windows XP / Vista / 7 / 10 / 11 服务器用户须知
抱歉。hddtemp 是仅适用于 UNIX / Linux 的程序。
结论
您学习了如何使用 hddtemp、smartctl 和 GUI 工具监控硬盘温度。有关更多信息,请参阅:
- 使用 man 命令或 help 命令阅读 hddtemp 手册页。
- 如何查看 CentOS 7 和 RedHat Enterprise Linux 7 上的 CPU 温度
- 以图形方式监控Linux CPU温度、频率、功率
- Linux 使用 lm-sensors 读取 CPU 温度传感器芯片数据(包括电压和风扇转速)
- 如何在 Linux 上查找 Raspberry Pi GPU 和 ARM CPU 温度
- 官方 hddtemp主页在这里
- 测试 Linux 服务器 SCSI/SATA/SSD 硬盘是否出现故障
- Linux / UNIX:Smartctl 检查 3Ware RAID 卡后面的硬盘
- Linux 使用 smartctl 检查 Adaptec RAID 控制器后面的磁盘
- 在 Linux 或 UNIX 操作系统下使用 smartd 监控硬盘健康状况
- FreeBSD:使用 smartd 工具获取/读取硬盘温度
- Linux 使用 hddtemp 监控硬盘温度
- Linux 命令查找 SATA 链接速度(如 1.5 / 3.0 / 6.0 Gbps)[硬盘]
- 如何在 Linux 上查找硬盘规格/详细信息
- FreeBSD insatll smartctl top 检查硬盘健康状况