使用 lm_sensors 进行健康监控
几年前,我的一位朋友的电脑出了问题。它变得不可靠;他会遇到奇怪的错误,或者系统会挂起。他重新安装了操作系统和他的主要应用程序,但问题仍然存在。这浪费了他的时间,而他的时间是很宝贵的。
问题原来很简单:他 CPU 散热器上的冷却风扇坏了。CPU 过热反过来导致了随机问题。他最终更换了 CPU 和散热器,因为 CPU 已经损坏了。
如果他运行了某种计算机健康监控系统,例如 lm_sensors,他本可以避免这一切。
lm_sensors 是一组 Linux 内核模块,用于监控计算机的重要指标:电源的电压、系统和 CPU 的温度以及风扇转速。 lm_sensors 包括一个命令行实用程序,用于检查当前读数。还有各种图形工具可用于为 lm_sensors 提供一个漂亮的界面。
在您尝试安装 lm_sensors 内核模块之前,您应该安装 I2C 驱动程序模块。I2C,即 Inter-IC 总线,是一个简单的串行数据系统,用于连接芯片,以便它们可以相互通信。大多数具有健康监控功能的母板都使用 I2C 总线来访问这些功能。
确保您的系统上安装了 I2C 驱动程序。(如果您构建自己的内核,I2C 选项位于“字符设备”下。)
安装提供 lm_sensors 的软件包,或者从源代码构建并安装它。然后输入 sensors-detect,这是一个脚本,用于找出如何在您的系统上安装 lm_sensors。它将尝试各种 I2C 模块,然后尝试各种 lm_sensors 模块,直到找到一个在您的系统上工作的组合。完成后,它会提供有关如何在 /etc 中设置配置文件的说明,这些配置文件会在您的系统启动时加载正确的模块。
一旦 lm_sensors 的模块安装并正常工作,您就可以从 shell 运行 sensors 命令并收到一些有用的输出。但您可能还没有完成。
您的下一步是编辑 /etc/sensors.conf 文件。此文件设置了一些自定义参数,使 lm_sensors 可以与您的计算机系统一起工作。例如,您可以添加一个标签,将 Temp1 更改为 CPU 温度;如果您没有传感器并且它报告无意义的信息,您可以完全禁用 Temp3;并且您可以自定义用于计算显示值的数学函数。
理想情况下,在您编辑 /etc/sensors.conf 之前,您应该重新启动您的计算机并进入 BIOS 设置屏幕。(对于大多数计算机,您在启动时按 Del 键或 F1 键进入 BIOS。查看您系统的用户手册,或在启动时观看屏幕上的消息,例如 按 <Del> 进入设置。)BIOS 设置应该有一个子菜单,显示您希望 lm_sensors 报告的相同数字。记下您看到的读数。例如,如果 CPU 温度约为 60 摄氏度,请将其写下来。
现在,启动回 Linux,运行 sensors 命令。如果所有数字都在那里并且看起来正确,那么您就完成了。如果不是,您需要自定义 /etc/sensors.conf。
查看 sensors 命令输出的顶部;它会向您显示 lm_sensors 正在与哪个芯片通信。在 /etc/sensors.conf 中找到该芯片,并查看您可以自定义的设置。/etc/sensors.conf 包含大量注释,使您更容易弄清楚您需要做什么。您还可以阅读手册页,man sensors.conf。
一旦您自定义了 /etc/sensors.conf,您必须运行命令 sensors -s 以使您的更改生效。然后再次运行 sensors 命令以检查它报告的值。
此外,您应该确保每次系统启动时都运行 sensors -s。
您可以选择安装 sensord,即 lm_sensors 监控守护进程。您可以将此配置为记录到标准日志文件或循环数据库(一个恒定大小的数据库,设置为例如保存一周的读数;新读数覆盖最旧的读数)。通过编辑 /etc/syslog.conf,您可以安排在传感器读数超出范围时接收电子邮件。
lm_sensors 在 /proc 下创建包含传感器值的文件。您可以通过编写脚本来检查这些文件中的值或解析 sensors 命令的结果来创建自定义监控系统。
lm_sensors 的源代码发行版包含一个简单的 Bourne shell 守护进程 healthd.sh,如果任何传感器指示警报状态,它会向 root 帐户发送电子邮件。
有许多程序可用于检查 lm_sensors 值或以某种炫酷的方式显示它们,包括 KDE 和 GNOME 的小程序以及几个窗口管理器。“资源”部分有一些链接可以帮助您入门。
我一直在运行精细的 GKrellM,这是一个 GTK 小程序,旨在制作令人印象深刻的监视器面板。右侧的屏幕截图显示它在我的系统上运行,不仅包含 lm_sensors 数据,还包含 S.M.A.R.T. 硬盘温度数据和 BubbleFishyMon 插件。(BubbleFishyMon 将内存负载表示为水位,将 CPU 活动表示为气泡,将网络数据包表示为来回游动的鱼。橡皮鸭只是为了好玩。)
Freshmeat.net 上的 lm_sensors 相关项目
hddtemp,一个使用 S.M.A.R.T. 监控硬盘温度的插件
xsensors,一个使用 GTK 小部件的简单 lm_sensors 显示
Steve Hastings 第一次在实际的纸质电传打字机上使用 UNIX。他喜欢骑自行车、音乐、抚摸他的猫以及让他的 Linux 计算机做新的事情。
电子邮件: srhastings@langri.com