VirtualBox/Linuxの時刻がずれる の変更点

更新


[[公開メモ]]

* VirtualBox にインストールした Debian の時刻がしょっちゅうずれてしまいます [#pe78bb84]

ntp をインストールしてあるにもかかわらず、数十分とか数時間とかずれたままになってしまい、困りました。

** ntp はインストール済み [#q4541873]

Linux では ntp デーモンが外部サーバーと日付を同期することで、
常にサーバーの時刻を正しく保つことができます。

** ntp は「無理なく」時刻を調整する [#ycb36502]

正しく動いている場合、ntp による時刻の調整は「徐々に」行われるのだそうです。

なぜなら、時刻を後戻りさせてしまうと様々なプログラムで重大な不具合が発生しかねません。

逆に勧める場合にも、他のプログラムが5分後に何かをしようと待っているのに、
いきなり10分時計を進めてしまうとおかしなことになりかねません。

** ntp は時刻が大きくずれていると自動調整してくれない [#qe6d2e70]

時刻が少しずれた状態であれば、そのように少しずつ調整して正しい時刻に合わせてくれますが、
大きくずれている場合には重大な不具合を生じかねないため時刻の調整が自動では行われなくなってしまうのだそうです。

起動していない時間の長い VirtualBox の場合、ntp が動いていない間に時刻が大きくずれてしまい、
次回起動した際に時間あわせが行われなくなることが頻繁に生じます。

そのような状況では、ntpq の結果が次のようになってしまいます。

 LANG:console
 $ ntpq -p
       remote           refid      st t when poll reach   delay   offset  jitter
  ==============================================================================
   sv1.localdomain 133.243.238.163  2 u   36 1024  377    5.737  7607316 740244.
   v157-7-152-213. 10.84.87.146     2 u 1050 1024  376    9.904  7607316 1046855
   y.ns.gin.ntt.ne 249.224.99.213   2 u  631 1024  377    5.458  7607317 1046862
   x.ns.gin.ntt.ne 249.224.99.213   2 u    8 1024  377    5.567  7607316 740243.

ちなみに、うまくいっているときは、

 LANG:console
 $ ntpq -p
       remote           refid      st t when poll reach   delay   offset  jitter
  ==============================================================================
  +chobi.paina.jp  131.112.181.48   2 u    9   64   37    5.712   -0.525   5.722
  *108.61.223.189. 103.1.106.69     2 u    9   64   37    5.648   -0.131   2.304
  -122x215x240x51. 223.255.185.2    2 u    5   64   37    4.469   -6.662   2.750
  +sv1.localdomain 133.243.238.163  2 u    3   64   37    5.088   -1.242   1.349

こんなふうに先頭に + * - などが付き、offset もまともな値になっています。

** 無理矢理合わせる方法 [#n8086657]

ntpdate を使うと合わせられます。

使い方は、'sudo ntpdate (サーバー名...)' となっていて、適当なサーバー名を指定する必要があります。

 LANG:console
 $ sudo ntpdate -d 2.debian.pool.ntp.org
 $ sudo ntpdate 2.debian.pool.ntp.org

などとすればOKです。

* 起動時に強制的に時刻を合わせたい [#o261bcd5]

もっと良い方法がありそうではあるのですが、
他に思いつかなかったため /etc/init.d/ntp の start に、

 /usr/sbin/ntpdate `grep -E '^server ' /etc/ntp.conf | sed -E 's/server ([^ ]*)( .*)?/\1/g'`
 /usr/sbin/ntpdate 2.debian.pool.ntp.org

を追加してしまいました。

毎回起動時に十数秒くらい余計な時間が掛かることになってしまいますが、
毎回起動時に十秒くらい余計な時間が掛かることになってしまいますが、
確実に正しい時刻が設定されるはずです。

もっと良い方法があったら教えて下さい。。。

* 質問・コメント [#eb5b73c0]

#article_kcaptcha

Counter: 8481 (from 2010/06/03), today: 3, yesterday: 0