WSL2 时钟与 Windows 不同步

Posted

技术标签:

【中文标题】WSL2 时钟与 Windows 不同步【英文标题】:WSL2 Clock is out of sync with Windows 【发布时间】:2021-03-13 03:49:33 【问题描述】:

从睡眠/休眠状态恢复后,WSL2 时钟不同步。

GitHubsudo hwclock -s 上分享了一种解决方法,以重新同步 WSL 中的时钟,但每次从睡眠/休眠状态恢复时都必须这样做。

【问题讨论】:

【参考方案1】:

更新:正如drkvogel 所述,Clock Sync fix 是在WSL2 kernel version 5.10.16.3 中发布的


已过时

在撰写本文时,此 GitHub Issue 已针对该错误开放。

我针对我的情况(WSL2 中的单一发行版)选择的解决方法是在 Windows 重新同步硬件时钟时使用 Windows 任务计划程序在 WSL 中运行 hwclock

Windows:以管理员身份打开 PowerShell

schtasks /create /tn WSLClockSync /tr "wsl.exe sudo hwclock -s" /sc onevent /ec system /mo "*[System[Provider[@Name='Microsoft-Windows-Kernel-General'] and (EventID=1)]]"
Set-ScheduledTask WSLClockSync -Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries)

WSL2:运行 sudo visudo 并将 hwclock 添加到 sudoers 以跳过密码提示

# bottom of my file looks like this
...
...
#includedir /etc/sudoers.d
<username> ALL=(ALL) NOPASSWD:/usr/sbin/hwclock, /usr/bin/apt update, /usr/bin/apt upgrade

结果

查看图片了解如何从 Windows 事件过滤中获取 Event XPath。按照提供的方式使用,让任务计划程序自动显示计划的触发器。

【讨论】:

如果您运行的是 WSL 常见的 ubuntu,则此方法将静默失败,因为为 hwclock 列出的路径不正确。在 ubuntu 上,正确的路径是 /sbin/hwclock【参考方案2】:

重启wsl,对我来说很好用

wsl --shutdown

然后

wsl

在 PowerShell 中

【讨论】:

但是每次问题再次出现时您都必须重新启动..? @piouson 完全正确 我的解决方案消除了每次重新启动的需要,通过使用 Windows 任务计划程序进行自动重新运行.. 我给那些懒得做你的解决方案的人提供选择。由他们来选择哪一个 我试图将我的 WSL 和 Windows 日期更改为将来的某个时间以进行一些测试,这对我有用。人们回答错误的是sudo hwclock -s 将同步到 Windows,但这是错误的。它实际上将日期同步到您的硬件时钟。重新启动 WSL(这是这个答案所建议的)会同步到 Windows,因此您可以轻松地将 Windows 和 WSL 更改为某个假日期。谢谢:)【参考方案3】:

如果有人通过搜索找到此问题并且没有注意到问题中实际上列出了解决方案,您可以通过修复 WSL 时钟漂移。

sudo hwclock -s

如果您只是偶尔需要这样做,这是一个很好的解决方案。如果您需要更频繁地执行此操作,请考虑@piouson 的解决方案

【讨论】:

我希望这也适用于 WSL 1,但我收到错误 hwclock: Cannot access the Hardware Clock via any known method.【参考方案4】:

sudo hwclock -s 让你知道了,但由于某种原因没有得到确切的时间 - 我经常发现它在未来一分钟左右!

sudo ntpdate pool.ntp.org 应该会为您提供正确的时间。

但这都是因为bug in the Linux kernel 应该在某个时候包含在 Windows 更新中...

根据我的经验,the GitHub issue 中提到了许多可以解决此问题的技巧,但并非总是如此……

更新:修复现已推出!在 Windows Insiders 版本中,至少:https://devblogs.microsoft.com/commandline/servicing-the-windows-subsystem-for-linux-wsl-2-linux-kernel/

【讨论】:

我调试脚本 2 天后才意识到这是时钟问题。 hwclock -s 对我不起作用。 ntpdate 做到了。谢谢!!!!!!【参考方案5】:

您可以按照以下注释中的方法手动将 WSL2 内核更新到 5.10.16:#5650 (comment)。我已经通过这种方法解决了这个问题。

【讨论】:

以上是关于WSL2 时钟与 Windows 不同步的主要内容,如果未能解决你的问题,请参考以下文章

Windows Azure上的时钟同步质量?

Windows和Ubuntu双系统时钟同步的方法。

经验体会:解决Ubuntu 18.04+Windows双系统时间不同步的问题

两台都不能上公网的Ubuntu如何进行时钟同步

LINUX时间同步

Linux 修正时间并与网络时间同步