机械盘已经开了休眠,却每隔几十分钟自己转起来,多半不是硬盘坏了。常见情况是:系统在体检硬盘、相册后台连一下服务器、飞牛网页在读温度、或者某次定时任务扫了整盘。本文按一台飞牛的实测来写,你照着 SSH 进去就能查、能改。
先看结论
- 先确认盘是不是真的睡着。不要用飞牛「硬件信息」判断,那一页自己就会把盘叫醒。
- 飞牛默认空闲 30 分钟才让盘睡;系统里的硬盘体检默认也是大约 30 分钟问一次。两边撞车,盘刚要睡就被叫醒。
- 手机新照片、缩略图、相册数据库放固态盘;机械盘只放大文件和很少打开的旧照片。不要先关手机备份。
- 不适合照做:电影库整天从机械盘直读、真正的多盘阵列需要定期对账、硬盘已经在报警还想把体检拉得很稀。
- 最大风险:搬家相册目录时漏文件,相册打不开;多盘阵列上关掉对账,等于停掉有用的检查。
文里这些词是什么意思
后面命令输出里会看到英文,先对一下人话。
| 你看到的 | 人话 |
|---|---|
| standby | 盘睡着了,马达停了 |
| active/idle | 盘还在转 |
| SMART | 硬盘自己的体检报告(温度、起停次数等) |
| smartd | 定时去读这份报告的小程序 |
| DiskSpindown / DiskWakeup | 飞牛记下的「睡着了 / 被叫醒了」 |
| UPLOAD_LOCATION | Immich 把新照片存到哪 |

先用 SSH 进飞牛
后面所有检查都在 NAS 上跑命令。Windows 不用额外装软件。
- 浏览器打开飞牛网页,在设置里打开 SSH(默认端口 22)。
- 电脑按
Win + R,输入cmd回车;或打开「Windows 终端」。 - 输入(把用户名和 IP 换成你的):
ssh 你的用户名@NAS的局域网IP
- 第一次会问是否继续,输入
yes回车。 - 输入飞牛登录密码。输入时屏幕不显示字符,输完回车即可。
- 成功后,提示符会变成类似
你的用户名@主机名:~$。下面命令前面有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 手册。

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

2. 对照飞牛自己的睡着 / 叫醒记录
为什么做: 空闲 30 分钟睡、你真去拷文件就醒,这是正常的。要处理的是没人用也周期性醒。
sudo journalctl --since "7 days ago" | grep -E "DiskSpindown|DiskWakeup"
DiskSpindown 是睡着,DiskWakeup 是被叫醒。把时间和你是否在用 NAS 对一下。
本机 2026-08-24 开机后的记录(硬盘序列号已去掉):
| 时间 | 记录 | 说明 |
|---|---|---|
| 08-24 19:13 | DiskSpindown | 开机后第一次睡着 |
| 08-25 02:36 | DiskWakeup | 夜里被访问一次 |
| 08-25 03:06 | DiskSpindown | 满 30 分钟再次睡着 |
| 08-25 20:02 | hdparm 仍是 standby | 连续睡了约 17 小时 |

对时间用这张表:
| 什么时候醒 | 多半是谁 | 要不要改 |
|---|---|---|
| 你刚打开飞牛「硬件信息」 | 网页在读体检/温度 | 查休眠时别开这页 |
| 每隔大约 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 写下了这条,当时盘继续睡。

改完不要立刻跑 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 未触发搬家。