群晖硬盘不断唤醒(无法休眠)的一些折腾
写在最前面:
其实在折腾群晖硬盘休眠前,我查阅了一些资料,在 通电但不读写是否对硬盘寿命有影响 的问题上,绝大多数的回答还是 有,但微乎其微
但毕竟是作为仓储盘,日常读写频率并不高的情况下,我还是想让它安静一些,又或许休眠了,才能给人一种安全感……所以才有了下面的折腾过程。
黑群(星际蜗牛)还可以参考这篇:黑群晖(星际蜗牛)硬盘不断唤醒\无法休眠的一些折腾
开始
最近群晖硬盘总是隔一段时间就被唤醒,日志中心间隔记录到 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或者其他共享服务引起的
先匿了……
18 条评论
大佬,最新的7.0.1系统,经常被唤醒
查看休眠日志
[ 1107.810796] Expected to copy HDIO_DRIVE_CMD header of 4 bytes from (null) – it failed
找不到同样的情况
请问有解决办法么
你好大佬,我的群晖 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)
在操作硬盘,但是我并未唤醒系统啊。
@vivi
参考本文前面的内容,这个md0_raid就是群辉系统的同步工具,每隔一段时间,在每块硬盘上同步一下系统,避免硬盘损坏导致系统损坏。如果这个md0_raid不是很频繁的唤醒,则是正常的
@vivi
对了,解决方法就是你下面这位哥们说的~
@Bug侠
谢谢指导,启动不是很频繁,是直接mdadm –fail /dev/sda1 这样吗?
除了直达硬盘的读写操作以外,系统盘/dev/md0 /dev/md1也会造成机械硬盘的频繁唤醒,md0 md1是系统盘的raid1阵列,在保证阵列正常的情况下,可以把多余的机械盘使用mdadm进行fail处理,即可避免唤醒。
@zzcat
是个好方法,感谢分享
@zzcat
谢谢大佬,请问是直接ssh输入这个命令吗?
mdadm –fail /sda1
@vivi
根据硬盘决定是sd几,前面少了/dev,我也没用黑群晖了,转omv很久了
@zzcat
好的,谢谢指导
@zzcat
mdadm /dev/md3 -f /dev/sdb3
好像玩脱了,系统内这块硬盘的raid group、存储空间、硬盘页面全部显示已损毁,还是说标记fail之后就是这样?
@vivi
为什么会是md3? 系统盘只有md0和md1,md3是你自己的raid了
@zzcat
= =,我挑了一个小点的硬盘下手..我以为每个盘都要这么操作呢..
@vivi
mdx 是mdadm阵列,一个阵列里放了很多盘,系统阵列是md0 md1,你要做的是在md0 md1里把机械硬盘单独fail掉,只留启动盘或者ssd,而不是找md2 md3这些东西
@zzcat
好的,谢谢,受教了,那还能恢复么?我 -m 后 又-a 加入都没变化呢。
@zzcat
mdadm -f 之后可以修复吗?我-f掉了我自己的一个raid
感谢解答,已按你说的进行设定。
但这个rrshare,会重复的自动下载。这个是bug吗?
换成Mac可破,访达不会出现这种情况