机械盘已经开了休眠,却每隔几十分钟自己转起来,多半不是硬盘坏了。常见情况是:系统在体检硬盘、相册后台连一下服务器、飞牛网页在读温度、或者某次定时任务扫了整盘。本文按一台飞牛的实测来写,你照着 SSH 进去就能查、能改。

先看结论

  • 先确认盘是不是真的睡着。不要用飞牛「硬件信息」判断,那一页自己就会把盘叫醒。
  • 飞牛默认空闲 30 分钟才让盘睡;系统里的硬盘体检默认也是大约 30 分钟问一次。两边撞车,盘刚要睡就被叫醒。
  • 手机新照片、缩略图、相册数据库放固态盘;机械盘只放大文件和很少打开的旧照片。不要先关手机备份。
  • 不适合照做:电影库整天从机械盘直读、真正的多盘阵列需要定期对账、硬盘已经在报警还想把体检拉得很稀。
  • 最大风险:搬家相册目录时漏文件,相册打不开;多盘阵列上关掉对账,等于停掉有用的检查。

文里这些词是什么意思

后面命令输出里会看到英文,先对一下人话。

你看到的人话
standby盘睡着了,马达停了
active/idle盘还在转
SMART硬盘自己的体检报告(温度、起停次数等)
smartd定时去读这份报告的小程序
DiskSpindown / DiskWakeup飞牛记下的「睡着了 / 被叫醒了」
UPLOAD_LOCATIONImmich 把新照片存到哪
机械盘热冷分层示意:手机备份走固态,机械盘只存冷数据
图:处理方向——新照片走固态,机械盘只放大文件和很少打开的旧照片。

先用 SSH 进飞牛

后面所有检查都在 NAS 上跑命令。Windows 不用额外装软件。

  1. 浏览器打开飞牛网页,在设置里打开 SSH(默认端口 22)。
  2. 电脑按 Win + R,输入 cmd 回车;或打开「Windows 终端」。
  3. 输入(把用户名和 IP 换成你的):
ssh 你的用户名@NAS的局域网IP
  1. 第一次会问是否继续,输入 yes 回车。
  2. 输入飞牛登录密码。输入时屏幕不显示字符,输完回车即可。
  3. 成功后,提示符会变成类似 你的用户名@主机名:~$。下面命令前面有 sudo 的,还要再输一次密码。

进不去时:飞牛网页确认 SSH 已打开;电脑和 NAS 在同一局域网;IP 在飞牛首页或路由器设备列表里看。

开始前要准备什么

项目要求怎么确认
系统飞牛 fnOS。本文实测 Debian 12进 SSH 后运行下面「看系统」命令
盘系统/相册程序在固态,大文件在机械盘进 SSH 后运行下面「看硬盘」命令
权限看状态用登录用户;改设置要管理员密码(sudo)先跑不带改动的命令
备份改相册目录、改体检配置前,先复制一份配置复制到固态上的目录

看系统和哪块是机械盘:

cat /etc/os-release
lsblk -d -o NAME,MODEL,SIZE,ROTA,TRAN

ROTA 为 1 的是机械盘,为 0 的是固态。把机械盘的 NAME 记下来,比如是 sda,后面命令里的 /dev/sdX 就写成 /dev/sda。

飞牛网页「存储」里也能看到哪块是机械盘、路径大概是 /vol1 还是 /vol2。命令里的 /你的机械盘目录/、/你的固态目录/ 换成你自己的路径,不要照抄别人的。

本文实测:机械盘 WDC WD40EZAZ 4TB,固态 Samsung 990 EVO Plus 1TB,飞牛空闲休眠 30 分钟。

操作步骤

1. 先看盘睡没睡

为什么做: 先分清「从来没睡着」和「睡了又被叫醒」。查的时候不能把盘叫醒,否则结论是假的。

sudo hdparm -C /dev/sdX

睡着了应看到:

/dev/sdX:
 drive state is:  standby

还在转则是 active/idle。本机 2026-08-25 20:02 查到的就是 standby。这条命令只问状态,不会把已经睡着的盘转起来。说明见 hdparm 手册。

用 hdparm -C 确认机械盘处于 standby
图:只问电源状态。standby 表示马达已停,这条命令不会把睡着的盘叫醒。

再确认「体检时睡着就跳过」:

sudo smartctl -n standby -A /dev/sdX

睡着时应看到 Device is in STANDBY mode, exit(2),然后立刻退出。 不要运行不带 -n standby 的 smartctl -A,也不要打开飞牛「硬件信息 / 存储详情」来看睡没睡——那两页会读温度和体检报告,等于敲门。

smartctl 在盘休眠时直接退出
图:加上 -n standby 后,盘睡着就拒绝读详细体检,避免一次查看把盘转起来。

2. 对照飞牛自己的睡着 / 叫醒记录

为什么做: 空闲 30 分钟睡、你真去拷文件就醒,这是正常的。要处理的是没人用也周期性醒。

sudo journalctl --since "7 days ago" | grep -E "DiskSpindown|DiskWakeup"

DiskSpindown 是睡着,DiskWakeup 是被叫醒。把时间和你是否在用 NAS 对一下。

本机 2026-08-24 开机后的记录(硬盘序列号已去掉):

时间记录说明
08-24 19:13DiskSpindown开机后第一次睡着
08-25 02:36DiskWakeup夜里被访问一次
08-25 03:06DiskSpindown满 30 分钟再次睡着
08-25 20:02hdparm 仍是 standby连续睡了约 17 小时
飞牛睡着与叫醒事件时间线
图:醒完再睡是正常现象。要盯的是叫醒有没有对应你正在用 NAS,以及睡下之后能不能稳住。

对时间用这张表:

什么时候醒多半是谁要不要改
你刚打开飞牛「硬件信息」网页在读体检/温度查休眠时别开这页
每隔大约 30 分钟,没人用硬盘体检程序太勤要改,见第 4 步
手机备份或打开相册新照片还在机械盘上把新照片放到固态,别关 App
每天凌晨固定扫很久相册全库校验,或单盘对账改成每月;单盘对账关掉
闲着仍有小文件在写网盘客户端把数据库放在机械盘程序配置放到固态

一直显示 active/idle、日志里几乎没有 DiskSpindown 时,再查谁在写机械盘。下面这条会读目录,会把空闲计时清零,只在要抓现行时用一次:

sudo find /你的机械盘目录 -xdev -mmin -10 -type f

列出最近 10 分钟被动过的文件。看到哪个程序的目录,就去改那个程序的存放位置。

3. 改硬盘体检:拉长时间,睡着就跳过

为什么做: smartd 默认大约每 30 分钟问一次硬盘(1800 秒),见 smartd 手册。飞牛也是 30 分钟才睡。盘刚要睡,体检又来敲门。

加上 -n standby 后,盘已经睡着就这次不问,见 smartd 配置说明。

先备份:

sudo cp /etc/default/smartmontools /etc/default/smartmontools.bak-$(date +%F)
sudo cp /etc/smartd.conf /etc/smartd.conf.bak-$(date +%F)

看现在怎么配的:

grep smartd_opts /etc/default/smartmontools
grep -v '^#' /etc/smartd.conf

用编辑器改启动参数。不会用 nano 的话,Windows 上先把文件拷出来改完再拷回去也可以。目标是这一行(6 小时问一次):

smartd_opts="--interval=21600"

/etc/smartd.conf 里保留睡着跳过。飞牛常常已经有类似这一行,改前先看现成文件:

DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

改完重启并查看:

sudo systemctl restart smartmontools
sudo systemctl status smartmontools --no-pager

正常结果: 状态是 active,命令行里有 --interval=21600。盘在睡着时,过几个小时再查日志,应出现:

sudo journalctl -u smartmontools --since "1 day ago" | grep -i standby

类似:

Device: /dev/sdX [SAT], is in STANDBY mode, skipping checks

本机 2026-08-25 00:30 写下了这条,当时盘继续睡。

硬盘体检改为 6 小时一次,睡着就跳过
图:默认大约 30 分钟问一次,改成 6 小时,并且睡着跳过。00:30 那次检查看到 standby 后没有把盘叫醒。

改完不要立刻跑 smartctl -A 做「验证」,那会把这次实验破坏掉。需要更勤的体检可以改成 10800(3 小时),不要改回 1800。

4. 把手机相册的新照片放到固态

为什么做: 手机 Immich 会时不时连一下 NAS。新照片如果还在机械盘上,App 在后台刷新也会把盘叫醒。官方用 UPLOAD_LOCATION 指定照片目录,改完必须重建容器,见 Immich 环境变量。

建议这样分:

内容放哪原因
新照片固态手机备份不再敲门
缩略图、相册数据库、数据库备份固态定时备份数据库不是再拷一遍照片
大约 30 天以前的原图机械盘,原位置留快捷方式少起停,相册路径不用改
网盘里那堆旧照片机械盘,只读挂上一个月扫一次即可

怎么查照片是不是还在机械盘:

docker ps --format "{{.Names}}"

找到名字里带 immich 且像 server 的那个容器,下面用 immich_server 举例,以你 docker ps 里的实际名字为准。

docker inspect immich_server --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{println}}{{end}}'

看左边宿主机路径。如果照片目录、/data 指向机械盘(常见是 /vol1/...),手机一备份就会醒盘。

再看环境变量:

docker inspect immich_server --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}'

会打出 compose 所在目录。然后:

grep UPLOAD_LOCATION /刚才打出的目录/.env

UPLOAD_LOCATION 应指向固态。改这个值之后,必须把目录里的 .immich 小文件一起搬走,否则相册会拒绝启动。改完用 docker compose up -d 重建,不要只重启。

不要把固态和机械盘合成一个「看起来像一块盘」的目录(有人用 mergerfs)。列表一下目录就可能把机械盘拉起来。也不要每隔 1 GB 搬一次,起停比睡着更伤盘。

本机把新照片迁到固态后,热目录大约 5 GB。另外用定时脚本:热目录满 20 GB,或每月 1 号,才把超过 30 天的日期文件夹挪到机械盘,并在原处留快捷方式。未满阈值时脚本直接退出,不碰机械盘。本机 08-19 到 08-24 的日志都是 noop。

展开:定时搬家命令和脚本要点

宿主机定时任务示例。路径换成你的,镜像版本和现用 Immich 一致,不要写 latest:

crontab -l

若还没有搬家行,再编辑(crontab -e)。下面 03:30 跑一次:

30 3 * * * docker run --rm --user 0:0 --entrypoint bash \
  -v /你的固态目录/docker/immich:/vol2/immich \
  -v /你的机械盘目录/immich:/vol1/immich \
  -v /var/log:/var/log \
  ghcr.io/immich-app/immich-server:v3 \
  /vol2/immich/scripts/immich-hdd-mover.sh

脚本只处理类似 2026-08-16 的日期文件夹,跳过已经是快捷方式的路径,以及 30 天内的新照片:

HOT_ROOT="/你的固态目录/docker/immich/library/library"
COLD_ROOT="/你的机械盘目录/immich/archive/library"
THRESHOLD=$((20 * 1024 * 1024 * 1024))
MIN_AGE_DAYS=30
DAY=$(date +%d)

HOT_BYTES=$(du -sb "$HOT_ROOT" | awk '{print $1}')
if [[ "$DAY" != "01" && "$HOT_BYTES" -lt "$THRESHOLD" ]]; then
  echo "noop"
  exit 0
fi

# 找到日期目录后:挪到机械盘,再 ln -s 回原路径

对照日志时注意时区。飞牛本地 03:30 跑;容器里如果是世界时,日志可能写成前一天 19:30。

正常结果: 手机照常备份。飞牛日志里的叫醒,不再跟你随手打开 App 对齐。

相册的「数据库备份」只备份设置和数据库,不是再拷照片。备份目录单独放固态。完整校验、外部库扫描改成每月一次,不必每天凌晨扫整盘。

5. 只有一块机械盘时,关掉整盘对账

为什么做: 系统有时会给「磁盘阵列」做对账,把整盘读一遍。只有一块盘却写成镜像阵列时,没有第二块可对,等于白读,必然叫醒机械盘。

先看有没有这对定时任务:

systemctl list-timers --all | grep -i mdcheck

有 mdcheck_start 或 mdcheck_continue 再关:

sudo systemctl disable --now mdcheck_start.timer mdcheck_continue.timer
systemctl is-enabled mdcheck_start.timer mdcheck_continue.timer

正常结果: 两行都是 disabled。飞牛大升级后若又天天醒盘,先把这两条再查一遍,看是不是被装回来了。

不要关: 你真的有两块及以上盘在做镜像/校验。那种对账是有用的。

网盘客户端同样:登录配置、小型数据库、日志放固态;真正下载的大文件可以仍在机械盘。本机把百度网盘容器的配置放到固态后,闲时刷库不再写机械盘。

常见问题与排错

一打开飞牛页面盘就转了

现象: 刚用上面的命令看到 standby,一点「硬件信息」马上变成 active/idle。

怎么查:

sudo hdparm -C /dev/sdX
sudo journalctl --since "10 minutes ago" | grep -E "DiskWakeup"

回忆这 10 分钟有没有打开硬件信息、存储详情。

看到什么算是它: 日志几乎在你点页面的同时出现 DiskWakeup,机械盘目录里没有新拷的大文件。

处理: 查休眠只用 SSH 这几条命令。硬件信息页当成「主动体检」,不要挂着当监控。

确认好了: 关掉该页面,等满飞牛设置的空闲时间(本机 30 分钟),再跑 sudo hdparm -C /dev/sdX,应回到 standby。

每隔大约 30 分钟醒一次,没有人用 NAS

现象: 叫醒记录间隔接近 30 分钟,机械盘上没有新照片。

怎么查:

grep smartd_opts /etc/default/smartmontools
sudo systemctl status smartmontools --no-pager
sudo journalctl -u smartmontools --since "1 day ago" | grep -iE "standby|skipping"

看到什么算是它: smartd_opts 是空的,或间隔仍是 1800;状态里看不到 6 小时;日志里没有 skipping checks。

处理: 按第 3 步改间隔,并保留睡着跳过。不要把间隔改成几分钟「更安全」——那会让盘永远睡不稳。

确认好了: 下一次体检时间点,若盘在睡,日志应写 skip;sudo hdparm -C /dev/sdX 仍是 standby。

手机一备份就醒盘

现象: 手机一打开 Immich 或后台备份,机械盘跟着转。

怎么查:

docker ps --format "{{.Names}}"
docker inspect immich_server --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{println}}{{end}}'
docker logs --since 2h immich_server 2>&1 | grep -iE "Websocket Connect|websocket"

容器名以 docker ps 为准。日志里一串 Websocket Connect,表示手机 App 在后台连服务器。

看到什么算是它: 挂载列表里,照片目录或 /data 指向机械盘;上面的连接日志时间和 DiskWakeup 对得上。

处理: 按第 4 步把新照片、缩略图、数据库放到固态。不要先关手机备份。

确认好了: 再备份一张新照片,立刻跑 sudo hdparm -C /dev/sdX。新照片走固态时,盘应仍是 standby。只有你主动翻机械盘上的旧照片时才该醒。

每天凌晨固定醒很久

现象: 凌晨机械盘连续转很久,像在扫整盘。

怎么查:

systemctl list-timers --all | grep -i mdcheck
sudo journalctl --since "yesterday" | grep -E "DiskWakeup|DiskSpindown"
docker logs --since 24h immich_server 2>&1 | grep -iE "Integrity|LibraryService|scan"
crontab -l

看定时任务是不是把备份写到了机械盘路径。

看到什么算是它: 单盘还在跑 mdcheck;相册每天全库校验;某条备份命令的目标在 /你的机械盘目录/。本机曾把密码库备份写到机械盘,后来改到固态。密码库部署见 Bitwarden 与 Vaultwarden。

处理: 相册校验改成每月;只有一块盘就关掉 mdcheck;备份目录改到固态。

确认好了: 之后两三个凌晨,日志里不再出现「没人用也扫很久」的叫醒;即使醒了,满空闲时间能再睡。

风险、备份与回滚

  • 改硬盘体检不会停机,但问得更稀。硬盘已经在报警时,不要靠拉长间隔来省电。
  • 改相册目录可能让网页暂时打不开。操作前把 compose、.env 和目录里的 .immich 小文件复制到固态。
  • 快捷方式方案要求相册仍然按原路径找文件。不要事后删掉固态目录里那些链接。
  • 不要把硬盘体检或 Docker 控制口直接暴露到公网。

恢复硬盘体检原来的配置:

sudo cp /etc/default/smartmontools.bak-日期 /etc/default/smartmontools
sudo cp /etc/smartd.conf.bak-日期 /etc/smartd.conf
sudo systemctl restart smartmontools
sudo systemctl status smartmontools --no-pager

只有当你本来就有多盘阵列时,才恢复对账:

sudo systemctl enable --now mdcheck_start.timer mdcheck_continue.timer

停掉搬家任务:crontab -e 里在对应行前面加 #。新照片已经在固态的,可以保持,不必搬回去。

回滚后:再跑第 1 步的 hdparm;相册首页能列出照片即恢复成功。

维护和更新

  • 飞牛大版本升级后,再查一次休眠分钟数、硬盘体检间隔、mdcheck、相册定时任务。
  • 体检程序或 Immich 大版本更新后,确认「睡着跳过」和照片路径设置还在。
  • 搬家阈值按自己拍照量调。阈值太低,又会变成频繁起停。
  • 最近核对:2026-08-25。当时机械盘处于 standby,体检在 00:30 跳过,热目录约 5.2 GB 未触发搬家。

参考资料