Amazon EC2 で時刻の挙動がおかしいときは /etc/adjtime に UTC と記述してみる。
Amazon EC2 に CentOS 6.x を VMインポートで持ち込んでみると、/var/log/messages に記録されるタイムスタンプがどうにもおかしいことに気が付きました。この機材はタイムゾーンを Asia/Tokyo で設定しており、実際の設定内容も以下のように特に問題がないハズです。
$ cat /etc/sysconfig/clock ZONE="Asia/Tokyo" $ ls -l /etc/localtime -rw-r--r--. 1 root root 333 Jan 21 08:30 /etc/localtime $ md5sum /etc/localtime /usr/share/zoneinfo/Asia/Tokyo 9e165b3822e5923e4905ee1653a2f358 /etc/localtime 9e165b3822e5923e4905ee1653a2f358 /usr/share/zoneinfo/Asia/Tokyo
しかし実際には以下で赤に着色した箇所を境に日時が9時間ずれます。
Feb 13 07:58:31 snapcache-base kernel: imklog 5.8.10, log source = /proc/kmsg started.
(略)
Feb 13 07:58:32 some-instance automount[1233]: lookup_read_master: lookup(nisplus): couldn't locate nis+ table auto.master
Feb 13 07:58:32 some-instance ntpd[1266]: peers refreshed
Feb 13 07:58:32 some-instance ntpd[1266]: Listening on routing socket on fd #22 for interface updates
Feb 13 07:58:33 some-instance ntpd[1266]: 0.0.0.0 c016 06 restart
Feb 13 07:58:33 some-instance ntpd[1266]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Feb 13 07:58:33 some-instance ntpd[1266]: 0.0.0.0 c011 01 freq_not_set
Feb 13 07:58:33 some-instance avahi-daemon[1126]: Service "some-instance" (/services/ssh.service) successfully established.
Feb 13 07:58:36 some-instance /usr/sbin/gpm[1628]: *** info [daemon/startup.c(136)]:
Feb 13 07:58:36 some-instance /usr/sbin/gpm[1628]: Started gpm successfully. Entered daemon mode.
Feb 13 07:58:37 some-instance ec2: -----CREDENTIALS RETRIEVAL-----
Feb 13 07:58:37 some-instance ec2: Attempting to retrieve public key from /169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
Feb 13 07:58:37 some-instance ec2: Already have your key
Feb 13 07:58:37 some-instance ec2: Setting permissions on /xxxxxxx/.ssh/authorized_keys to 0600
Feb 13 16:58:40 some-instance ntpd[1266]: 0.0.0.0 c61c 0c clock_step +32400.656259 s
Feb 13 16:58:40 some-instance ntpd[1266]: 0.0.0.0 c614 04 freq_mode
Feb 13 16:58:41 some-instance ntpd[1266]: 0.0.0.0 c618 08 no_sys_peer
正確にいうと、赤色に着色した行からは正しい時刻を刻むのですが、それより前は9時間前の時刻です。この事象に対して「ntp が動いて正しい時刻に補正されたからそれでよいのでは」という考え方もあるかもしれません。しかしこれはどちらかというと「OS起動時のタイムゾーンとntp稼働時のタイムゾーンがミスマッチしている」と認識すべきと思うんです。
そこで他の設定を調べてみると、以下のようにハードウェアクロックが LOCAL で設定されていました。
$ cat /etc/adjtime
4965.671568 1454914426 0.000000
1454914426
LOCAL
これを s/LOCAL/UTC/g のように書き換えたのち、インスタンスを再起動してみると……
Feb 13 17:03:31 some-instance kernel: imklog 5.8.10, log source = /proc/kmsg started.
(略)
Feb 13 17:03:33 some-instance automount[1234]: lookup_read_master: lookup(nisplus): couldn't locate nis+ table auto.master
Feb 13 17:03:33 some-instance ntpd[1267]: peers refreshed
Feb 13 17:03:33 some-instance ntpd[1267]: Listening on routing socket on fd #22 for interface updates
Feb 13 17:03:33 some-instance ntpd[1267]: 0.0.0.0 c016 06 restart
Feb 13 17:03:33 some-instance ntpd[1267]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Feb 13 17:03:33 some-instance ntpd[1267]: 0.0.0.0 c011 01 freq_not_set
Feb 13 17:03:33 some-instance avahi-daemon[1126]: Service "some-instance" (/services/ssh.service) successfully established.
Feb 13 17:03:37 some-instance /usr/sbin/gpm[1634]: *** info [daemon/startup.c(136)]:
Feb 13 17:03:37 some-instance /usr/sbin/gpm[1634]: Started gpm successfully. Entered daemon mode.
Feb 13 17:03:38 some-instance ec2: -----CREDENTIALS RETRIEVAL-----
Feb 13 17:03:38 some-instance ec2: Attempting to retrieve public key from /169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
Feb 13 17:03:38 some-instance ec2: Already have your key
Feb 13 17:03:38 some-instance ec2: Setting permissions on /xxxxxxx/.ssh/authorized_keys to 0600
Feb 13 17:03:41 some-instance ntpd[1267]: 0.0.0.0 c61c 0c clock_step +0.599864 s
Feb 13 17:03:41 some-instance ntpd[1267]: 0.0.0.0 c614 04 freq_mode
Feb 13 17:03:42 some-instance ntpd[1267]: 0.0.0.0 c618 08 no_sys_peer
……と、上記のように時刻は ntp が動く前から日付時刻が一貫して正しい時刻を刻むようになりました。
ちなみに上記のログをみて「gpmいらんやろ!」とツッコミ入れる方がいらっしゃるかもしれませんが、ハイそのとおりです。これはVMインポートの前に消しておくべきでした。。。