Linuxの時間を合わせる

実験する環境

[root@localhost root]# cat /etc/redhat-release
CentOS release 3.8 (Final)

現状把握

  • 自分の時計

14:15分。

[root@localhost root]# date
2008ǯ  5 30  14:34:41 JST

[root@localhost root]# cat /etc/adjtime
21.181536 1212120034 0.000000
1212120034
LOCAL

タイムゾーンは日本であっているのですが・・・。
ものごっついずれてますね。ここは東京ですから><
東京に合わせて頂きます。

Linuxの時間はどのように時間を計っているのか

こちらに良い記事がありました。
http://www.linux.or.jp/JF/JFdocs/Clock/time-tracking.html

Linux時計を知る

Linuxシステムには2種類の時計があります。
  • バッテリー駆動のリアルタイムクロック (RTC や CMOS クロックもしくは ハードウェアクロックとも呼ばれています)

これはシステム電源がOFFの時に動いているが、システムの稼働中は使われない。

  • システムクロック

システム稼働中に存在する。起動時にRTCによって初期化される必要がある。
ntpd の付属文書で「クロック」を参照するという場合、RTC ではなくシステムクロックの参照を意味しています。


RTC - Wikipedia

ズレはどうやって直す?
  • RTC

RTC はシステムの稼働していない時だけ使用されるもの なので、RTC の修正は、起動時に時刻を読み込む際に clock(8) か hwclock(8) を使って行います。

つまり、起動時にシステムクロックに時間を合わせるわけですが、長期間起動していない場合は、起動時にズレてしまうという事ですよね・・・・。

  • システムクロック

システムクロックの 修正は、タイマ割り込みによりシステム時間が進む際に adjtimex(8) を使ってズレを修正することにより実施します。
他にも ntpd というプログラムを 使ってネットワークタイムサーバや電波時計から定期的に時間を読み込んで 継続的にシステムクロックの誤差を調整することで、システムクロックの時刻の大幅な 「ジャンプ」を避ける方法もあります。


ようするにシステムはいろいろと動いているので、時間を合わせることばかりに気を取られないので、時間は少しずつズレていってしまうということかな?


http://www.linux.or.jp/JM/html/LDP_man-pages/man2/adjtimex.2.html

とりあえず、手動で時間を合わせてみる

  • システムクロック

117を聞きながら、dateコマンドで合わせる。

[root@localhost root]# date
2008ǯ  5 30  14:58:23 JST
[root@localhost root]# date 05301445
2008ǯ  5 30  14:45:00 JST
[root@localhost root]# date
2008ǯ  5 30  14:45:43 JST
  • RTC

システムクロックに同期

[root@localhost root]# hwclock --systohc

これでおk。

時間をずっと合わせる方法

今回のLinuxマシンは、24時間365日稼働しているのが前提なので、

「ntpdというプログラムを使いシステムクロックを定期的に調整する。RTCはシステムクロックに同期させる」

という方法を取ろうと思います。

ntpdプログラムはインストールされているか?

こちらに、
NTPDの設定

RedHat には、デフォルトでntpdがインストールされています

と書いてあります。今回実験するCentOSRedHatのクローンですので、入っているはずです。

ntpdの状態

[root@localhost root]# /etc/init.d/ntpd status
ntpd (pid 6835) ...

動いてるっぽい。

ntpd再起動してみた

[root@localhost root]# /etc/init.d/ntpd restart
ntpd:127.127.1.0 123                                       [  OK  ]
ntpd:130.34.11.117 123                                     [  OK  ]
ntpd:130.34.48.32 123                                      [  OK  ]
ntpd:130.69.251.23 123                                     [  OK  ]
ntpd:133.31.180.6 123                                      [  OK  ]
ntpd:                                                      [  OK  ]
ntpd:127.127.1.0123                                        [  OK  ]
ntpd:130.34.11.117123                                      [  OK  ]
ntpd:130.34.48.32123                                       [  OK  ]
ntpd:130.69.251.23123                                      [  OK  ]
ntpd:133.31.180.6123                                       [  OK  ]
ntpdư:                                                    [  OK  ]

大丈夫っぽいが、
すでに色々と設定されているような感じはしますが、時間ズレているんですね・・。

再起動後もntpdが立ち上がるように設定

[root@localhost root]# /sbin/chkconfig ntpd on

ntpq -p で確認

[root@localhost root]# /usr/sbin/ntpq -p
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
LOCAL(0)        LOCAL(0)        10 l    -   64    0    0.000    0.000 4000.00
ntp.nc.u-tokyo. 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00
tusntp.tus.ac.j 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00
zao.net.tohoku. 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00
130.34.48.32    0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00

うーん。複数のNTPサーバーが設定されているように見えますが・・・。動いてなかったのでしょうか?

2.時刻同期(第7章その他の環境設定:基本管理コースI)

こちらに、

st(stratum)の値は15までなので、16ということはまだ同期されていないことを示します。

(;゚д゚)
どこのNTPサーバーとも同期してない・・・。

通常はしばらくすると下記のようにstが実際に使用できる数値へ変わり、徐々に同期が行われてきます。

「しばらく」ってどのくらいよ・・・。


/etc/ntp.confの設定確認

  • 現状把握
[root@localhost root]# cat /etc/ntp.conf
# Prohibit general access to this service.
restrict default ignore

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1


# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service.  Do not permit those systems to modify the
# configuration of this service.  Also, do not use those
# systems as peers for synchronization.
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap


# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.

# restrict mytrustedtimeserverip mask 255.255.255.255 nomodify notrap noquery
# server mytrustedtimeserverip



# --- NTP MULTICASTCLIENT ---
#multicastclient                        # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap



# --- GENERAL CONFIGURATION ---
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
server  127.127.1.0     # local clock
server 130.69.251.23    # ntp.nc.u-tokyo.ac.jp
server 133.31.180.6     # sutntp.sut.ac.jp / ntp.sut.ac.jp
server 130.34.11.117    # ntp1.tohoku.ac.jp
server 130.34.48.32     # ntp2.tohoku.ac.jp
fudge   127.127.1.0 stratum 10  

#
# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /var/lib/ntp/drift
broadcastdelay  0.008

#
# Authentication delay.  If you use, or plan to use someday, the
# authentication facility you should make the programs in the auth_stuff
# directory and figure out what this number should be on your machine.
#
authenticate yes

#
# Keys file.  If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
keys            /etc/ntp/keys

http://www.turbolinux.co.jp/products/server/11s/user_guide/ntpdconf.html
コチラを見て設定を見てみると、いろいろと不具合がありますね。。。
見ていきましょう。

ドリフトファイルは最初存在しないので、touchコマンドで空のファイルを用意

コチラを見ると、
http://www.turbolinux.co.jp/products/server/11s/user_guide/ntpdconf.html
http://www.turbolinux.co.jp/products/server/11s/user_guide/x5846.html

/etc/ntp.confの設定で、ドリフトファイルの設定が必要のようです。現在は、

driftfile /var/lib/ntp/drift

上記のように設定されているので、

driftfile /etc/ntp.drift

のように書いて、ファイルを作成します。

touch /etc/ntp.drift

restrict default ignore

> 標準のフラグに、ignore を指定していますので、server オプションで指定した NTP サーバーを使用することはできません。

(;゚ Д゚)...だめじゃん・・・

> NTP サーバーへのアクセスが可能になるように、restrict オプションを追記して、default エントリの設定を上書きしなければなりません。

ふむふむ。では、

restrict 127.0.0.1

#restrict 127.0.0.1
restrict 130.69.251.23

こうする。


これで、リスタートする。

[root@localhost root]# /etc/init.d/ntpd restart
ntpd:127.127.1.0 123                                       [  OK  ]
ntpd:130.34.11.117 123                                     [  OK  ]
ntpd:130.34.48.32 123                                      [  OK  ]
ntpd:130.69.251.23 123                                     [  OK  ]
ntpd:133.31.180.6 123                                      [  OK  ]
ntpd:                                                      [  OK  ]
ntpd:127.127.1.0123                                        [  OK  ]
ntpd:130.34.11.117123                                      [  OK  ]
ntpd:130.34.48.32123                                       [  OK  ]
ntpd:130.69.251.23123                                      [  OK  ]
ntpd:133.31.180.6123                                       [  OK  ]
ntpdư:                                                    [  OK  ]


確認してみる。

[root@localhost root]# /usr/sbin/ntpq -p
127.0.0.1: timed out, nothing received
***Request timed out

あれ?nothing receivedだって。。。


130.69.251.23がだめなのかな・・・?

NTPサーバーにアクセスできるかをntpdコマンドを利用して確認してみる

[root@localhost root]# ntpq -p 130.69.251.23
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*GPS_NMEA(1)     .GPS.            0 l   62   64  377    0.000   -0.132   0.011
+gate.keisu.t.u- .GPS.            1 u   26   64  377    0.567   -0.145   0.048
+clk.notemachi.w ntp.nc.u-tokyo.  2 u   56   64  377   15.290   -0.199   0.064

うーん。成功してるぽいですね。

NTPサーバーに時間を合わせてみる

[root@localhost root]# ntpdate 130.69.251.23
30 May 15:20:15 ntpdate[6956]: the NTP socket is in use, exiting

成功しましたね。

/etc/ntp.confのrestrict設定を修正

おもむろに、
/etc/ntp.confの

#restrict 127.0.0.1
restrict 130.69.251.23

restrict 127.0.0.1
restrict 130.69.251.23

こうしてみる。

[root@localhost root]# /etc/init.d/ntpd restart

でリスタートしたのち、

確認。

[root@localhost root]# /usr/sbin/ntpq -p
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
LOCAL(0)        LOCAL(0)        10 l    -   64    0    0.000    0.000 4000.00
ntp.nc.u-tokyo. .GPS.            1 u    1   64    1    2.499  -27.713   0.015
tusntp.tus.ac.j 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00
zao.net.tohoku. 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00
130.34.48.32    0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00

おおおぉ「ntp.nc.u-tokyo.」のstが1になった!

これでしばらく様子を見てみようと思います。

最終的な/etc/ntp.conf

[root@localhost root]# cat /etc/ntp.conf
# Prohibit general access to this service.
restrict default ignore

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict 130.69.251.23

# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service.  Do not permit those systems to modify the
# configuration of this service.  Also, do not use those
# systems as peers for synchronization.
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap


# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.

# restrict mytrustedtimeserverip mask 255.255.255.255 nomodify notrap noquery
# server mytrustedtimeserverip



# --- NTP MULTICASTCLIENT ---
#multicastclient                        # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap



# --- GENERAL CONFIGURATION ---
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
server  127.127.1.0     # local clock
server 130.69.251.23    # ntp.nc.u-tokyo.ac.jp
server 133.31.180.6     # sutntp.sut.ac.jp / ntp.sut.ac.jp
server 130.34.11.117    # ntp1.tohoku.ac.jp
server 130.34.48.32     # ntp2.tohoku.ac.jp
fudge   127.127.1.0 stratum 10  

#
# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp.drift
#driftfile /var/lib/ntp/drift
broadcastdelay  0.008

#
# Authentication delay.  If you use, or plan to use someday, the
# authentication facility you should make the programs in the auth_stuff
# directory and figure out what this number should be on your machine.
#
authenticate yes

#
# Keys file.  If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
keys            /etc/ntp/keys

同期の確認

数分後同期の確認が取れた。

[root@localhost root]# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        LOCAL(0)        10 l   24   64  377    0.000    0.000   0.015
*ntp.nc.u-tokyo. .GPS.            1 u   24   64  377    5.382   -2.620   1.090
 tusntp.tus.ac.j 0.0.0.0         16 u    -  128    0    0.000    0.000 4000.00
 zao.net.tohoku. 0.0.0.0         16 u    -  128    0    0.000    0.000 4000.00
 130.34.48.32    0.0.0.0         16 u    -  128    0    0.000    0.000 400