收起左侧

休眠问题排查攻略

5
回复
76
查看
[ 复制链接 ]

40

主题

8125

回帖

0

牛值

管理员

自系统版本 v0.9.10 起,飞牛系统新增支持设置硬盘自动唤醒偏好。当开启了硬盘休眠后,可选择硬盘唤醒的策略:

  1. 按需唤醒:仅在对存储空间读写数据时。 选择此选项后,系统只在读写数据时唤醒硬盘,不被读写到硬盘仍将保持休眠状态。
  2. 响应更快:有用户登录即唤醒。 选择此选项后,除了读写数据会唤醒硬盘外,有用户登录网页端、App时,系统也将自动唤醒全部硬盘,以提升读写操作时的响应速度,使用体验更丝滑。

为了实现以上功能,我们采用了更准确的休眠检测方式,也做了一些休眠日志展示策略的调整,引发了大家对不同版本休眠日志情况变化的关注。

因此,我们根据近期收集了无法休眠的案例,结合系统休眠机制,总结了不休眠的原因与自助排查方法,遇到疑似休眠异常的朋友可以按照以下各种情况排查系统不休眠的原因。

第一种情况,本身有文件读写行为,导致无法休眠

常见会唤醒硬盘的读写操作有:

  1. 存储空间任意的文件读写
    1. 通过任意方式访问文件管理
    2. 硬盘所在的存储空间上有正在执行的文件任务,包括上传、下载、移动、复制等;
    3. 其他设备通过各类远程挂载的方式在访问飞牛的文件
  2. 某个程序进程运行
    1. 应用或 Docker 安装在硬盘所在的存储空间上,且正在运行产生传输;
    2. 应用或 Docker 正在访问存储空间上的文件,包括影视刮削播放、相册查看和 AI 识别等;
    3. 下载类应用或 Docker 容器中有任务正在下载或做种。
    4. 其他一些自己手动安装的基于debian环境的应用**(容易被忽视,因为不被系统监控)**
  3. 获取硬盘运行状态
    1. APP或者web访问 系统设置 > 存储空间管理硬盘信息 页面时,由于需要查询存储相关信息,也会唤醒已被用于存储空间的所有硬盘。如不希望唤醒,可通过 资源监控 查看硬盘状态和信息。

排查方法:

关闭所有可能影响休眠的相关服务

  1. 关闭docker服务,避免服务自动运行

  1. 关闭所有共享协议,包括SMB\WebDAV\FTP\NFS\DLNA,避免其他设备自动访问飞牛

  1. 在应用中心,停用所有应用,避免应用自动运行

  1. 停用非本人使用账号,修改当前账号密码,避免其他用户在你不知情情况下访问

  1. 暂停所有下载进程

在完成以上五点之后,设置休眠时间为5分钟,重启一下设备,过一段时间之后再观察, 如果没有异常唤醒行为,则是由于应用或者读写导致的唤醒,并非BUG。可以逐步开启相关服务,看是由于那个服务引起的唤醒。

第二种情况,APM错误导致无法休眠

硬盘中的 APMAdvanced Power Management(高级电源管理) 的缩写。

因为一部分硬盘或者盘柜有内置的APM休眠策略,与系统通过hdparm发送休眠指令的行为有冲突,导致休眠失败,或者反复唤醒的情况。

需要手动配置APM为255,保障休眠服务正常。

一、APM 的作用:

APM 是一种节能机制,允许操作系统或硬盘固件根据当前的使用情况动态调整硬盘的功耗状态,以降低能耗和噪音,延长硬盘寿命。

具体来说,APM 会在空闲时:

  • 降低马达转速
  • 提前让硬盘进入休眠或低功耗状态
  • 减少磁头寻道频率

二、APM 的设置值含义:

APM 的数值通常是 0~255 之间的一个值,表示电源管理的激进程度。不同厂家的解释略有差异,但大致如下:

APM 数值 行为 特点
0 关闭 APM 不节能,性能优先,硬盘一直运行
1–127 激进节能 快速降速、快速待机,噪音低,可能增加磁头起停次数(影响寿命)
128–254 适中节能 平衡性能与能耗
255 最大性能 几乎无电源管理,硬盘保持高速运行,适合服务器/NAS

部分硬盘厂商(如 Western Digital)在低值时(例如 128 以下)会频繁地“停头”以省电,但这会导致 Load/Unload Cycle(装载/卸载磁头次数) 非常高,可能影响寿命。

三、APM的查询与配置

# 进入高级管理员模式
sudo -i
  1. 在日志里面找到盘符,sda sdb sdc等,为盘符标识

  1. 查询对应盘符的APM,注意修改sdX为你需要查询的盘符,例如sda sdb sdc
hdparm -I /dev/sdX | grep -i 'Advanced power management'

如果正常运行,你可以看到以下内容,level后面就是内容

[你的用户名]@feiniu:~$ sudo hdparm -I /dev/sda | grep -i 'Advanced power management'
        Advanced power management level: 254
           *    Advanced Power Management feature set

  1. 修改APM数值为255

查询到的值如果不是255或者display 就运行以下指令,注意修改sdX为你需要查询的盘符,例如sda sdb sdc

hdparm -B 255 /dev/sdX

第三种情况,固态硬盘不休眠

升级后,可能会遇到固态硬盘在日志里面没有显示休眠的情况,这个是设计如此。

固态硬盘实际没有休眠这个状态的, 过去大家会把低功耗模式作为广义的休眠,但是这个东西还比较新,实际上不同厂家会有不同的休眠标准。

系统新版本更新了对硬盘休眠的准确检测方式,上线了针对HDD机械硬盘更精准的休眠策略,但是与此同时,不同厂家的低功耗模式,很难准确的识别与控制,所以新版本之后,日志不会识别跟展示固态硬盘进入低功耗模式的状态。

第四种情况,主板、转接卡、硬盘或者硬盘柜的固件本身不支持hdparm休眠

因为系统让硬盘休眠的时候,会通过hdparm发送指令,但是部分设备的芯片会无视或者过滤系统发送的休眠指令,导致休眠失败。

这种类型的休眠失败,需要硬件厂家升级固件来解决

例如已知有希捷的部分设备,例如Seagate BarraCuda 3.5(CMR)不支持hdparm

验证此情况,可以手动发送hdparm休眠指令,看看硬盘是否会正常休眠,注意修改sdX为你需要查询的盘符,例如sda sdb sdc

hdparm -y /dev/sdX

输入指令之后,可以进入web端,可以看到休眠信息,则不是该原因导致。如果看到报错或者未执行,则代表可能存在硬件兼容问题。

第五种情况,不支持SMART检测的硬盘,无法正确返回休眠信息

如果你的硬盘柜本身不支持smart检测,即使休眠了,也不会返回休眠的信息给系统,所以不会有休眠的日志。

实际硬盘可能会按照自己的逻辑进行休眠

遇到不确定硬盘无法正常休眠的原因,可以根据上面步骤排查一下。如果以上情况均排除,可以再联系我们定位问题。

收藏
送赞
分享

1

主题

9

回帖

0

牛值

江湖小虾

输入这条指令hdparm -y /dev/sdX可以马上休眠。但是日志并没有休眠记录。其他情况都尝试了没有用。系统是新装的。

现在的问题是还是无法自动休眠。  详情 回复
昨天 19:42

1

主题

9

回帖

0

牛值

江湖小虾

  NullNull 发表于 2025-7-3 19:28
输入这条指令hdparm -y /dev/sdX可以马上休眠。但是日志并没有休眠记录。其他情况都尝试了没有用。系统是新 ...

现在的问题是还是无法自动休眠。

0

主题

17

回帖

0

牛值

江湖小虾

请解释一下 什么都不改变,同样的硬件,同样的硬盘,安装同样的应用,只有影视和相册, 0.98以后从不休眠, 现在重装回0.92就能够休眠

6

主题

15

回帖

0

牛值

江湖小虾

另一种方法:如果发现硬盘不休眠,没组raid存储空间却显示raid或者USB,不显示HDD的可以尝试去主板关闭raid模式,刚试过了关闭后存储空间会恢复显示hdd,所有机械硬盘正常休眠

有用,我硬盘休眠问题通过此方案已解决  详情 回复
5 小时前

1

主题

9

回帖

0

牛值

江湖小虾

mark8776661 发表于 2025-7-3 20:30
另一种方法:如果发现硬盘不休眠,没组raid存储空间却显示raid或者USB,不显示HDD的可以尝试去主板关闭raid ...

有用,我硬盘休眠问题通过此方案已解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则