システムクロックとハードウェアクロック
ハードウェアクロック: ハードウェアとして内臓された時計
システムクロック: Linux のカーネル内に存在する時計
システムクロックは Linux 起動時にハードウェアクロックを参照して設定されるが、その後は別々に動き続ける。そのため、起動してからの時間が経過するにつれ、ハードウェアクロックとシステムクロックの差が生じてくる。
date コマンドはシステムクロックが参照する。
$ date
Wed Jun 6 15:22:22 JST 2018
また、「date [MMDDhhmm[[CC]YY][.ss]]」の書式でシステムクロックを変更できる。
date コマンドで設定したシステムクロックをハードウェアクロックにセットするには hwclock コマンドを使用する。
オプション | 説明 |
---|---|
-r | ハードウェアクロックを表示する |
-w (—systohc) | システムクロックの時刻をハードウェアクロックに設定する |
-s (—hctosys) | ハードウェアクロックの時刻をシステムクロックに設定する |
$ sudo hwclock
2018年06月06日 15時27分25秒 .249848 seconds
$ sudo hwclock --hctosys
NTP による時刻設定
ハードウェアクロックもシステムクロックも、残念ながらあまり正確ではない。正確な時刻を設定するには、ネットワーク経由でクロックを同期する NTP (Network Time Protocol) を使い、インターネット上にある NTP サーバから正確な時刻を取得する。
NTP ネットワークは階層構造になっており、最上位には原子時計や GPS など、極めて正確な時刻情報提供元が存在する。
その直下にある NTP サーバを Stratum1 その下を Stratum2 … と呼ぶ。NTP サーバは上位の複数の NTP サーバから正確な時刻を取得する。
Linux では ntpdate コマンドにより NTP サーバから正確な時刻を取得できる。
$ ntpdate 196.254.196.123
また、NTP サーバは自前で運用することもできる。
$ sudo /etc/init.d/ntpd start
Starting ntpd: [ OK ]
ntpq コマンドで NTP サーバの状態を照会することが可能。
以下の例では localhost で稼働している NTP サーバから問い合わせされている NTP サーバのリストを表示している。
$ ntpq -p localhost
remote refid st t when poll reach delay offset jitter
==============================================================================
*169.254.169.123 10.66.1.94 3 u 1 8 377 0.106 -0.879 0.256
2.amazon.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
+mail.moe.cat 103.1.106.69 2 u 4 64 7 5.748 -0.710 0.647
-ec2-54-64-6-78. 133.243.238.164 2 u 7 64 7 0.368 -0.692 0.689
-108.61.223.189 133.243.238.163 2 u 8 64 7 5.321 -1.774 0.707
+122x215x240x52. 103.1.106.69 2 u 2 64 7 4.258 -0.109 0.819
NTP サーバの設定は /etc/ntp.conf で行う。問い合わせ先 NTP サーバは server パラメータで指定する。
$ cat /etc/ntp.conf | grep server | grep -v ^#
server 169.254.169.123 prefer iburst minpoll 3