VirtualBoxのゲストOSとホストOSの時間を合わせる

以前(結構前ですが)VirtualBox上でCentOSを動作せていた際に、どうしてもホストPCの時刻とゲスト側のCentOSの時刻が合わないことがありました。一度CentOS側で設定しても再起動すると元に戻ってしまうという現象です。

時間自体は、起動すると必ず9時間ずれていたので、原因を解明するのには時間はそうかかりませんでした。

同じような現象で何度も設定を変更している方がいれば、参考になればと思い簡単に記載します。

まず、仮想マシンの情報を表示しTime offsetとRTCを確認。


>vboxmanage showvminfo "仮想マシン名"
・・・
Time offset: 0 ms
RTC: UTC
・・・

ここで、Time offsetが0msなのに対してRTCがUTCとなっていることが常に9時間の時差を生み出すことの原因となります。ゲストOS起動時にVirtualBoxでは時刻同期が行われるようですが、RTCがUTCになっているため、ホストPCの時間は日本時間にもかかわらず、ゲストPCの時刻と9時間の時差が生じるわけです。

この時間をホストPCの時間(JST)に合わせるには単純にTime offsetに9時間をミリ秒単位で設定すればとりあえず解決することが可能です。


>vboxmanage modifyvm "仮想マシン名" --biossystemtimeoffset 32400000

>vboxmanage showvminfo "仮想マシン名"
・・・
Time offset: 32400000 ms
RTC: UTC
・・・

仮想マシンの状態が上記のようになっていることを確認して、ゲストOSを起動すると時間がホストPCと一致していることが確認できると思います。

さて、この解決方法はかなり強引であまりきれいなものではありません。

そもそも仮想マシンUTCではなくローカルタイム(JST)で動作していれば良いだけなので、それならばRTCをUTCではなくローカルタイムで動作するように設定すればよいのです。(最初からその方法を示してもよかったのですが少し引っ張ってみました・・・。)

ではどうやるかですが、vboxmanage modifyvmコマンドには[--rtcuseutc on|off]というオプションがあり、offを選択するとRTCをローカルタイムに設定することが可能です。


>vboxmanage modifyvm "仮想マシン名" --rtcuseutc off

>vboxmanage showvminfo "仮想マシン名"
・・・
Time offset: 0 ms
RTC: local time
・・・

上記のように出力されればゲストOSを起動して時間を確認してください。ホストPCと同じであることが確認できると思います。

Time offsetを9時間進めた方は以下のコマンドで元に戻すのを忘れずに。


vboxmanage modifyvm "仮想マシン名" --biossystemtimeoffset 0