群晖硬盘不断唤醒(无法休眠)的一些折腾

Linux, Windows, 折腾 2019/12/18

写在最前面:

其实在折腾群晖硬盘休眠前,我查阅了一些资料,在 通电但不读写是否对硬盘寿命有影响 的问题上,绝大多数的回答还是 有,但微乎其微

但毕竟是作为仓储盘,日常读写频率并不高的情况下,我还是想让它安静一些,又或许休眠了,才能给人一种安全感……所以才有了下面的折腾过程。

黑群(星际蜗牛)还可以参考这篇:黑群晖(星际蜗牛)硬盘不断唤醒\无法休眠的一些折腾

开始

最近群晖硬盘总是隔一段时间就被唤醒,日志中心间隔记录到 Internal disks woke up from hibernation

找了很多教程,不过都没有适用的,于是就自己折腾。

以上的图就是我目前遇到的情况,每隔2~3分钟硬盘就被唤醒

并且除了File Station等无法卸载的套件而外,我没有安装任何套件,可以排除套件唤醒的因素。

一、开启休眠日志

技术支持中心 - 技术支持服务 - 系统日志工具 开启日志记录

开启之后就等一段时间,间隔太短分析的日志没意义。

更新:即使开着日志记录,该休眠的时候,群晖也会休眠。

另外,官方的说明有提到开启这个功能也可能会导致无法休眠,所以每次记录完日志后也需要及时关闭。

二、分析日志

以root身份SSH登陆群晖,查看休眠日志

tail -f /var/log/hibernationFull.log

好吧,对于我这样一个刚入门群晖的新手来说,看不懂啊~咱也不好说啊~

上面的日志,每行的大概意思就是,几点几分某个程序在某一个存储器上进行了某项操作,举例来说:

[ 1842.213806] syno_hibernatio(11591): dirtied inode 30101 (hibernationFull.log) on md0

1842.213806(貌似是是相对时间),syno_hibernatio程序(PID为11591),dirtied inode 30101(操作块?),hibernationFull.log(休眠的日志文件),on md0(md0存储器)

唉,读一遍就通了,明白了日志文件是怎么记录的。

于是乎就针对上述查看休眠日志的命令改造一下,去除在内存上的读写日志

tail -f /var/log/hibernationFull.log | grep -v 'proc\|tmpfs'

结合上面的图,剔除掉内存读写的相关条目,基本上日志里来来回回硬盘的都是以下几个程序,逐行分析,分析日志里记录的都是哪些程序在操作硬盘。

md0_raid1

也可能是md1_raid1\md2_raid1\md3_raid1,因为群晖的系统是有几块盘就在几块盘上写系统,类似RAID,所以需要隔一段时间同步系统数据,据我的观察,此操作只有在系统唤醒的状态下才会进行

jdb

也是记录日志的,原文:The JBD is the journaling block device that sits between the file system and the block device driver.

syno_hibernatio

应为syno_hibernation_debug,因为开启了技术支持中心的休眠日志记录功能,所以系统在唤醒的时候,会调用该程序记录日志

嗯,所以按照这个来分析,我的日志没问题啊,也没异常程序读写啊……陷入尴尬 :笑哭:

三、继续分析

排除套件的原因,我按其他教程以及 官方的指导 里提到的

关闭了一些开关,比如Bonjour、SSDP等等,仅保留了samba(SMB)

过了几个小时,再次观察日志,硬盘的唤醒间隔变大了,而且又有点眉目了

16:55:07 记录到被唤醒

这次的日志记录到一条奇怪的东西

smbd(5624): dirtied inode 24478 (smbXsrv_client_global.tdb) on md0

看名称就知道和samba(SMB)有关……局域网的其他设备唤醒的?

好吧,与其一个设备一个设备的排查,不如直接关闭群晖的SAMBA开关,继续记录日志

四、还是分析

关闭了Samba,过了一晚上,再次查看日志

硬盘被唤醒的时间终于变长了,不错不错~

所以结合上面的操作,应该就是Samba的锅??? 不过我没有具体排查到底是局域网内哪个设备在扫描Samba共享文件夹,从而激活了群晖,从休眠中唤醒。

但是正常使用,我也要用Samba啊,要不然买NAS干嘛~索性就暴力一点,祭出防火墙大法

控制面板 - 安全性 - 防火墙

选择局域网标签,添加允许的设备访问Samba,其他保持拒绝访问。

继续收集日志……

五、依然是分析

接上一步,已经处于深度休眠很久了(差不多4~5个小时),下班回家打开电脑,意外发现这时NAS也被同时唤醒了!!!

不过既然知道是Samba的锅,所以很快就找到这次被唤醒的原因

因为我在Windows的文件管理器中挂载了NAS的硬盘,盲猜一下,就是当打开 此电脑 ,也就是Windows资源管理器的时候,不管你有没有访问这个已挂载的盘符或者其内容,会发送一些数据包给NAS,从而唤醒

任何 SMB/CIFS 广播数据包都可能会阻止 Synology NAS 进入系统休眠,包括网络中运行的任何 Windows 文件浏览器。如果想要在进入系统休眠时忽略 CIFS 广播数据包,请选择 忽略来自 Windows 资源管理器的广播数据包 请注意选择此选项后,SMB/CIFS 将无法使用数据包来退出系统休眠。

这样就好理解了……不过……我特么找遍NAS里所有的设置都没发现“忽略来自 Windows 资源管理器的广播数据包”这一选项

一番搜索……在 https://geoexpat.com/forum/119/thread328657-12.html 找到了相关的图。

虽然是英文版,但在我的NAS设置对应位置,却没有该选项,所以是砍掉了?还是不同的NAS型号功能上有所阉割?

到这里,就暂时没下文了,关于这个选项,我还在继续搜索相关的资料

于是我就把Windows下挂载的samba文件夹断开,需要的时候直接在地址栏输入samba地址进入共享文件夹

断开挂载的NAS盘符之后,到目前为止并没有出现异常唤醒的情况,所以基本可以断定就是就是这个的锅了。

六、先将就着

现在回过头来,发现以上的折腾真是蛋疼,而我暂时也没找到如何解决这个问题的方法,只能先不挂载盘符了……

阶段性的小结一下:在排除套件、日志、不必要的开关的情况下,群晖休眠状态下硬盘被不断唤醒的原因大概率是samba或者其他共享服务引起的

先匿了…… :害羞:

本文标签:


16条评论

  • vivi 评论于

    你好大佬,我的群晖 6.1.7 每天上午同一时间会被唤醒1 次,检查日志后发现是
    [344672.773232] md0_raid1(4191): WRITE block 4980352 on sda1 (8 sectors)
    [344672.773279] md0_raid1(4191): WRITE block 4980352 on sdb1 (8 sectors)
    [344672.773297] md0_raid1(4191): WRITE block 4980352 on sdf1 (8 sectors)
    在操作硬盘,但是我并未唤醒系统啊。

    • Bug侠 评论于

      @vivi 参考本文前面的内容,这个md0_raid就是群辉系统的同步工具,每隔一段时间,在每块硬盘上同步一下系统,避免硬盘损坏导致系统损坏。如果这个md0_raid不是很频繁的唤醒,则是正常的

    • Bug侠 评论于

      @vivi 对了,解决方法就是你下面这位哥们说的~

      • vivi 评论于

        @Bug侠 谢谢指导,启动不是很频繁,是直接mdadm –fail /dev/sda1 这样吗?

  • zzcat 评论于

    除了直达硬盘的读写操作以外,系统盘/dev/md0 /dev/md1也会造成机械硬盘的频繁唤醒,md0 md1是系统盘的raid1阵列,在保证阵列正常的情况下,可以把多余的机械盘使用mdadm进行fail处理,即可避免唤醒。

    • Bug侠 评论于

      @zzcat 是个好方法,感谢分享 :咧嘴:

    • vivi 评论于

      @zzcat 谢谢大佬,请问是直接ssh输入这个命令吗?
      mdadm –fail /sda1

      • zzcat 评论于

        @vivi 根据硬盘决定是sd几,前面少了/dev,我也没用黑群晖了,转omv很久了

        • vivi 评论于

          @zzcat 好的,谢谢指导

        • vivi 评论于

          @zzcat mdadm /dev/md3 -f /dev/sdb3
          好像玩脱了,系统内这块硬盘的raid group、存储空间、硬盘页面全部显示已损毁,还是说标记fail之后就是这样?

          • zzcat 评论于

            @vivi 为什么会是md3? 系统盘只有md0和md1,md3是你自己的raid了

            • vivi 评论于

              @zzcat = =,我挑了一个小点的硬盘下手..我以为每个盘都要这么操作呢..

              • zzcat 评论于

                @vivi mdx 是mdadm阵列,一个阵列里放了很多盘,系统阵列是md0 md1,你要做的是在md0 md1里把机械硬盘单独fail掉,只留启动盘或者ssd,而不是找md2 md3这些东西

                • vivi 评论于

                  @zzcat 好的,谢谢,受教了,那还能恢复么?我 -m 后 又-a 加入都没变化呢。

  • Jack 评论于

    感谢解答,已按你说的进行设定。
    但这个rrshare,会重复的自动下载。这个是bug吗?

  • jevin 评论于

    换成Mac可破,访达不会出现这种情况

  • 评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)