2
1

More than 1 year has passed since last update.

スリープから復帰後WSL2の時刻がズレるのを何とかしたい

Posted at

タイトルの通りスリープから復帰すると、WSL側の時間がズレてしまいます。

PowerShell
↓ dateコマンドで両方を確認
PS C:\> date; wsl date
2022年10月月25日 火曜日 22:14:10
2022年 10月 25日 火曜日 17:22:37 JST

以前にもこの不具合はありましたけど、22H2が出る前には修正されていたはずなのですが…
22H2に上げると、WSLも同時にMicrosoft Store版のWSL Previewになるようで、こちらをアンインストールして以前に戻すと不具合は出ないみたいです。
(私は、wsl --updateができないため戻していません。といいますか、アップデートするとStore版になってしまうようです)
ということで、時刻合わせにchronyをインストールして、とりあえずの対策をしたいと思います。

環境

  • エディション: Windows 11 Home
  • バージョン: 22H2
  • WSL バージョン: 0.70.4.0
  • カーネル バージョン: 5.15.68.1
  • ディストリビューション: Debian GNU/Linux 11

chronyをインストール

WSL2+Debian 11での使用を前提としています。

WSL
$ sudo apt install chrony

NTPサーバーを追加

Windowsではntp.nict.jpを指定しているので併せました。

WSL
$ sudo vi /etc/chrony/chrony.conf
-----
↓ NTPサーバーを変更
#pool 2.debian.pool.ntp.org iburst  ← コメントアウト
pool ntp.nict.jp iburst  ← 追加

起動

PowerShell
PS C:\> wsl -u root -- service chrony start
Starting time daemon: chronyd.

スリープから復帰後

PowerShellから以下のコマンドを実行します。
WSLのシェルから実行でも良いのですが、sudoの際パスワードを求められる1アクションがあるのでPowerShellを利用しています。

PowerShell
PS C:\> wsl -u root -- service chrony restart
↓ 表示されてリスタート
Stopping time daemon: chronyd.
Starting time daemon: chronyd.

以下の場合はリスタートできていないようなので、もう一度実行

PowerShell
Stopping time daemon: chronyd.
chronyd is already running.
↑ この後、dateで確認しても反映されていない

どうしてchrony?

自分の環境だけかもしれませんが、sudo hwclock -sを実行して同期させても全く反映してくれないことが度々あったため、chronyを用いることにしました。
wsl --shutdownでWSL自体を再起動でも良いのですが、バッチ処理でvhdのmountとserviceを幾つか起動(ssh cron apache2 mariadb php-fpm smtp4dev etc.)してまして、それなりに起動に時間が掛かるため、もっと容易に時刻を反映させたいと思い導入しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1