---主板定时唤醒功能之unraid硬件时间同步---
unraid吧
全部回复
仅看楼主
level 9
LUCENE◎
楼主
之前翻bios的时候发现我这板子支持定时唤醒还有网络唤醒,就想着试试,能用就不用愁远程开机的问题了。
昨晚给bios设好了时间,设置了定时唤醒今早六点。
可今早发现没启动,我进bios一看时间又变了= =晚了八小时。又是linux系统时间和硬件时间同步的问题了(这里又要表扬一下windows)
经过一番折腾,已成功解决。
(话说手动设置定时唤醒时间晚八小时也完全没问题
?)
2020年03月25日 02点03分
1
level 9
LUCENE◎
楼主
先占个坑
2020年03月25日 02点03分
2
LUCENE◎
解决方法直接见4楼
2020年03月25日 05点03分
level 9
LUCENE◎
楼主
前提要求:安装 CA User scripts 插件
由于我装好了,找的网图截图
(一开始我是直接改启动和关机脚本的,但发现unraid整个系统是挂载在内存里的
一旦关机任何修改都不会存储,只好借这个插件运行脚本了)
2020年03月25日 03点03分
3
level 9
LUCENE◎
楼主
先直接说最终方法吧:
新建脚本,内容很简单,加一条“timeconfig”即可
设定计划时间,推荐仅第一次序列启动时。
重启进bios查看时间,已经是实际本地时间了(图就不放了,还要重启连显示器)。
接下来具体说说我解决这个问题的整体过程。
2020年03月25日 05点03分
4
LUCENE◎
这里说错了,要这脚本执行一次,然后进bios就能看到效果了
2020年03月25日 08点03分
level 9
LUCENE◎
楼主
这个问题的本质和平常双系统时间不同步的问题是一样的。
这里有三个时间概念,主板上的RTC时钟,linux的系统时间(以下记为systime),显示中的UTC时间。
1.linux启动时,一般会根据RTC作为UTC来计算本地时间,以此调整一次linux系统时间systime。
2.然后若安装了ntp服务,则会不断根据ntp服务器获取现实中实际UTC来得到你所在地区实际本地时间(比如UTC+8,以下记为本地时间)同步到systime。
3.linux关机时,会根据systime计算UTC写入硬件时间即同步到RTC。
那么问题也看出来了,RTC实际上就相当于同步到了UTC。
linux管理硬件时间的指令是 hwclock ,常用参数:
--utc
将RTC时间作为UTC时间,显示转换后的本地时间(默认)
--localtime
将RTC时间作为本地时间,显示本地时间(即显示RTC时间)
--systohc
将systime同步到RTC。配合--utc,将systime作为本地时间,将转换后得到的UTC写入RTC(默认为--utc)。配合--localtime,将systime作为UTC直接写入RTC(这就是我们想要的效果)。
--hctosys
将RTC同步到systime。配合--utc,将RTC作为UTC,计算得到本地时间同步systime(默认)。配合--localtime,将RTC作为本地时间直接同步到systime。
2020年03月25日 05点03分
5
level 9
LUCENE◎
楼主
上面忘了说了,第三条参数 --systohc 使用后会自动创建/etc/adjtime文件
注意第三行的“UTC”,这是timescale,也就这是你最后一次调用hwclock时指定的是--utc还是--localtime。
同时,这决定了hwclock的默认timescale选项。上一层楼说的那些 默认--utc 都是在adjtime文件不存在的情况下,有了adjtime,默认选项都会与这个文件中指定的相一致。
2020年03月25日 05点03分
6
level 9
LUCENE◎
楼主
有了以上的基础,我们直接来看unraid 6.8.1的关机脚本,打开终端输入 vi /etc/rc.d/rc.0
在44-72行我们可以看到将systime写入到RTC时间的部份,其中关键是52行开始,我们看到这里提到了两个文件,/etc/adjtime和/etc/hardwareclock。/etc/adjtime上面已经说过了,那这个/etc/hardwareclock是什么,后面再说,先捋一下流程。
可以看到,默认我们不手动调用hwclock --systohc 写入RTC时间的话,关机时直接进入 /etc/hardwareclock 相关的判断。看一下 /etc/harwareclock 里面是什么:
到这里局势很明朗了。可以直接编辑将UTC改为localtime。
这里说是推荐使用timeconfig进行编辑,但是很坑爹,unraid连man都没有,timeconfig也没有提供任何帮助信息
不过我发现执行一次 timeconfig 后“UTC”就变成了“localtime”
2020年03月25日 07点03分
7
level 9
LUCENE◎
楼主
到这里其实已经都解决了。
脚本里写一条 timeconfig,或是直接调用一次 hwclock --localtime --systohc 也行。
2020年03月25日 07点03分
8
level 9
LUCENE◎
楼主
再来看看程序启动脚本,也能看到根据RTC设置systime的部份。逻辑和关机脚本一致。
2020年03月25日 07点03分
9
level 9
LUCENE◎
楼主
http://www.slackware.com/config/init.php
既然unraid基于slackware,从slackware官方文档能看到各启动脚本的作用。还有installpkg等一些包管理指令。
2020年03月25日 11点03分
10
level 7
simon_2019
谢谢分享,我说怎么唤醒时间不对……
2020年03月25日 15点03分
11
level 12
42423f
楼主有没有研究过定时休眠,我现在定时开启休眠可以但是无法唤醒,要手动按一下,安装你的设置了还是没用,能不能帮忙解答一下。
https://tieba.baidu.com/p/6567278856
2020年03月28日 04点03分
12
LUCENE◎
网络唤醒吗?
2020年03月28日 12点03分
42423f
@LUCENE◎
唤醒原理我也不清楚,它就是设置成一段时间是工作时间其余就休眠,但是每次休眠后都醒不过来,不知道什么原因
2020年03月29日 02点03分
LUCENE◎
没必要用插件睡眠吧,硬盘休眠足够了。至于你说的群晖挂载问题,我没弄过黑裙,不过你如果要开机自动挂载,要在脚本里加循环判断和延时,等容器启动后再挂载才行
2020年03月29日 05点03分
42423f
@LUCENE◎
好的谢谢
2020年03月29日 10点03分
level 1
787653816
大佬,这个问题能否通过脚本设置跳过这个line 236的检测加快开机速度?
https://tieba.baidu.com/p/7151884487
2020年12月31日 14点12分
13
1