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
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の状態
[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サーバーが設定されているように見えますが・・・。動いてなかったのでしょうか?
こちらに、
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