「Oracle Linux」でOS起動時に時刻がずれる場合の解決方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

EC2インスタンス(Oracle Linux)を利用する際のNTPによる時刻同期について、注意すべき部分がありましたので備忘録として掲載します。

今回の事象を確認したのはAmazon MarketplaceからEC2インスタンスとして起動した「Oracle Linux 6.6」です。
なお、システム時刻は日本時間に設定して確認しています。

Amazon Marketplace上にある「Oracle Linux 6.6」についての詳しい情報は下記せーのさんの記事をご参照ください。

「Amazon Marketplaceに新たに「Oracle Linux 6.6」が加わりました

確認した事象:OS起動直後に時刻が9時間遅れる

多くの場合、EC2インスタンスの運用において、システム起動時にNTPによるシステムクロックの同期が行われるよう設定されているかと思います。

今回確認した事象はEC2インスタンスを再起動した際、起動直後は時刻が9時間ずれてしまい、その後NTPによる時刻補正が行われるといった状況でした。

25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17459
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17460
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17461
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17462
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c016 06 restart
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c011 01 freq_not_set
25 Apr 10:35:18 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:19 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:20 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:21 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:24 ntpd[861]: XXX.XXX.XXX.XXX 903a 8a sys_peer
25 Apr 10:35:24 ntpd[861]: 0.0.0.0 c61c 0c clock_step +32400.690375 s
25 Apr 19:35:24 ntpd[861]: 0.0.0.0 c614 04 freq_mode

インスタンス起動後には正確な時刻になりますが、システム起動時のNTPによる時刻補正はサービスの起動順により前後する可能性もあり、よからぬ影響が出るかもしれません。
(接続しているDBの時刻がずれてしまう等)

解決方法:/etc/adjtime の設定を見直す

今回確認したのは「/etc/adjtime」の設定です。

「/etc/adjtime」はハードウェアクロックの時刻を補正するためのデータが入っています。
詳しい情報は下記をご参照ください。

パソコンの時計 ハードウェア クロックとシステム クロック

「/etc/adjtime」は下記のように記述されています。

$ cat /etc/adjtime
0.000000 1429958061 0.000000
1429958061
UTC

上記の「UTC」の部分が「LOCAL」の場合、UTCに変更すれば再起動後に時刻ずれが解消される可能性があります。
※EC2インスタンス(Oracle Linux 6.6)Launch時のデフォルト設定は「UTC」になっています。

以下、/etc/adjtimeの設定が「UTC」と「LOCAL」のシステム起動時のNTPログです。
「LOCAL」の場合、時刻ずれが発生していることが確認できます。

/etc/adjtime が「 LOCAL」の場合(先に載せているログと同様のものです)

25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17459
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17460
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17461
25 Apr 10:35:17 ntpd[861]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 17462
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c016 06 restart
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
25 Apr 10:35:17 ntpd[861]: 0.0.0.0 c011 01 freq_not_set
25 Apr 10:35:18 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:19 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:20 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:21 ntpd[861]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 10:35:24 ntpd[861]: XXX.XXX.XXX.XXX 903a 8a sys_peer
25 Apr 10:35:24 ntpd[861]: 0.0.0.0 c61c 0c clock_step +32400.690375 s
25 Apr 19:35:24 ntpd[861]: 0.0.0.0 c614 04 freq_mode

「UTC」の場合、システム起動時の時刻ずれがないことが確認できます。

/etc/adjtime が「UTC」の場合

25 Apr 19:57:28 ntpd[863]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 964
25 Apr 19:57:28 ntpd[863]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 965
25 Apr 19:57:28 ntpd[863]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 966
25 Apr 19:57:28 ntpd[863]: XXX.XXX.XXX.XXX 8011 81 mobilize assoc 967
25 Apr 19:57:28 ntpd[863]: 0.0.0.0 c016 06 restart
25 Apr 19:57:28 ntpd[863]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
25 Apr 19:57:28 ntpd[863]: 0.0.0.0 c011 01 freq_not_set
25 Apr 19:57:29 ntpd[863]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 19:57:30 ntpd[863]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 19:57:31 ntpd[863]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 19:57:32 ntpd[863]: XXX.XXX.XXX.XXX 8024 84 reachable
25 Apr 19:57:35 ntpd[863]: XXX.XXX.XXX.XXX 903a 8a sys_peer
25 Apr 19:57:35 ntpd[863]: 0.0.0.0 c61c 0c clock_step +0.696284 s
25 Apr 19:57:35 ntpd[863]: 0.0.0.0 c614 04 freq_mode

まとめ

今回の事象は「Oracle Linux 6.6」で確認したものであり、「Amazon Linux 2015.03」でも「/etc/adjtime」の設定を変更してみましたが同事象は発生しませんでした。

NTPによる時刻同期の動作がおかしい時、様々な要因が考えられますが、本記事が原因解消の一助になりましたら幸いです。