Skip to content

OECT (Armbian) 挂载外置硬盘不休眠的排障与修复实战

前几天搞定了一台闲置的网心云 OECT,底层刷入了 Armbian 25.5.1,并在上面跑起了 CasaOS。为了把它改造成家用轻量 NAS 和备份中心,我将一块 2T 西数硬盘外挂了上去(目前作为 PVE 和 OpenClaw 的滚动备份盘)。

但很快发现一个问题:这块 2T 硬盘它不休眠。不管有没有数据读写,它就像打了鸡血一样全天候运转。虽然做 NAS 的盘本该如此,但这毕竟是家用闲置设备的废物利用,没必要让它 24 小时空转消耗寿命,听着也烦。

所以今天花了一点时间,把这个“不眠之症”给治了。在此记录一下排查与修复的过程。

1. 确认病因:谁在阻止硬盘休眠?

Linux 下控制硬盘休眠最常见的工具是 hdparm

一开始我直接尝试用 hdparm -y /dev/sda 让它强制进入待机模式,结果发现:它确实停转了,但不到 10 秒钟,又重新启动了

这说明系统里有后台进程在频繁读写(或者唤醒)这块硬盘。常见嫌疑犯包括:

  • 系统日志守护进程 (syslog, journald 等)
  • SMART 监控 (smartd)
  • CasaOS 或挂载在上面的 Docker 容器 (比如易有云 linkease) 定时扫描

2. 排查抓鬼:揪出幕后黑手

为了找出具体是哪个进程在唤醒硬盘,我们可以借助 fatrace 或者 iotop,也可以通过开启内核的 block dump。

最简单的办法,用 iotop -o 观察。

结果发现,主要是我在上面跑的 linkease (易有云) Docker 容器,以及 CasaOS 本身的某些状态轮询在作祟。

由于这台设备的主要用途是每天凌晨 04:00 和 05:00 接收 PVE 与主控机的备份压缩包,平时白天它的读写需求极低,我决定采用一种更强硬且智能的休眠策略。

3. 制定休眠策略:hdparm 规则

最终,我选择配置 hdparm 规则,设定硬盘在空闲 10 分钟(600秒)后自动停转待机。

3.1 测试休眠指令

先用命令测试(假设你的硬盘是 /dev/sda):

bash
sudo hdparm -S 120 /dev/sda

注:-S 后面的数字是休眠时间,单位是 5 秒(120 x 5 = 600 秒,即 10 分钟)。

3.2 固化配置到 udev 规则

因为每次重启或者重新插拔硬盘,hdparm 的设置可能会失效。最好的办法是写进 udev 规则里,让它成为系统底层铁律。

创建并编辑规则文件:

bash
sudo nano /etc/udev/rules.d/50-hdparm.rules

填入以下内容:

text
ACTION=="add|change", KERNEL=="sda", ATTR{queue/rotational}=="1", RUN+="/sbin/hdparm -S 120 /dev/sda"

这个规则的意思是:当系统检测到添加或改变一个旋转型(非 SSD)硬盘设备 sda 时,自动执行休眠设定(空闲 10 分钟停转)。

保存后,重新加载 udev 规则:

bash
sudo udevadm control --reload-rules
sudo udevadm trigger

4. 优化:减少无谓的唤醒

光设置了休眠还不够,为了防止刚休眠就被唤醒,我还做了一点优化:

  • 将一些不需要频繁写盘的日志路径迁移到了内存文件系统 (tmpfs)。
  • 在 CasaOS 中,非必要的应用如果在后台频繁扫描 /mnt/Storage1(我的 2T 硬盘挂载点),就将其休眠或者调整扫描周期。

结语

折腾完之后,现在这块 2T 西数硬盘终于学会了“劳逸结合”。平时安安静静地待机停转,到了凌晨 4、5 点接收备份任务时再自动苏醒干活。

废物利用的精髓不仅在于“能用”,更在于“好用”和“稳定”。希望这篇排障记录能帮到同样在玩 Armbian / CasaOS 外挂硬盘的朋友。

Leechbox 公众号

关注 Leechbox

如果你觉得这篇文章对你有帮助,欢迎扫码关注我的公众号。这里有更多折腾笔记、硬核干货和偶尔的瞎折腾日常。咱们一起探讨技术,共同进步!

本站内容仅供技术分享与学习探讨