レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
Managing Accurate Date and Time

Avi Alkalay

IBM Linux Impact Team :: ibm.com/linux 
Linux, Open Standards consultant :: Senior IT and Software Architect

avi at unix.sh
avi at br.ibm.com

Brad Knowles - pool.ntp.org と NTP stratum 2 公開タイムサーバの利用に関
する示唆

Kent Borg - ntpdc の代わりに ntpq を利用せよとの示唆

Yura Moron - ntpq と ntpdc の情報に関する良い例

中野武雄 - 日本語訳

nakano at apm.seikei.ac.jp
 

SHAKI - ロシア語訳

sha-ki at narod.ru

Copyright (C) 2002,2003 by Avi Alkalay

1.0.6 :: 2004-02-25

Revision History                                                       
Revision 1.0.6           25 Feb 2004         Revised by: avi           
Included credits and link to russian translation.                      
Revision 1.0.5           05 Jul 2003         Revised by: avi           
Changed public time servers list URL. Added pool.ntp.org.              
Revision 1.0.4           21 Dec 2002         Revised by: avi           
Added japanese translation link and credits.                           
Revision 1.0.3           24 Aug 2002         Revised by: avi           
Fixed wrong screen and programlisting widths.                          
Revision 1.0.2           04 Aug 2002         Revised by: avi           
Link to public time servers page.                                      
Revision 1.0.1           07 May 2002         Revised by: avi           
Final XML conversion. Files reorganization.                            
Revision 1.0             28 Apr 2002         Revised by: avi           
Finalized image.                                                       
Revision 0.8             27 Apr 2002         Revised by: avi           
Switched from ntpdc example to ntpq, based on contributions.           
Revision 0.8.1           20 Apr 2002         Revised by: avi           
Improved graphic. Links to other doc locations.                        
Revision 0.8             14 Apr 2002         Revised by: avi           
Beter tunning of NTP graphic.                                          
Revision 0.76            13 Apr 2002         Revised by: avi           
Inclusion of architecture graphic.                                     
Revision 0.75            10 Apr 2002         Revised by: avi           
Spell checked. Using DocBook XSLT 1.50.                                
Revision 0.65            31 Mar 2002         Revised by: avi           
Upgraded to XML 4.1.2 DocBook format                                   
Revision 0.6             29 Mar 2002         Revised by: avi           
Finished timezone mechanism on Linux. Created appendix. Now only       
drawings are needed.                                                   
Revision 0.4             24 Mar 2002         Revised by: avi           
All skeleton defined. All command examples written.                    
Revision 0.2             19 Mar 2002         Revised by: avi           
First DocBook version                                                  

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table of Contents
1. コンピュータにおける地球上での日付・時間の扱い
2. タイムゾーンとは
   
    2.1. サマータイム (Daylight Savings Time, DST)
    2.2. タイムゾーンの例
    2.3. Linux におけるタイムゾーンの仕組み
   
3. Linux マシンを正しく設定する
   
    3.1. タイムゾーン設定
    3.2. ハードウェアクロックを設定する
   
4. 正確な世界時に同期する
   
    4.1. NTP: ネットワークタイムプロトコル
    4.2. 簡単な時刻同期構造を構築する
    4.3. NTP の設定
    4.4. 時刻同期の確認
    4.5. NTP がブート時に自動起動するよう設定する
   
A. この文書について

1. コンピュータにおける地球上での日付・時間の扱い

  地球上のある地域に置かれたコンピュータが現在時刻を決定するには、次の
二つの情報を正確に知る必要があります。

 1. 正しい UTC 時刻 (グリニッジにおける世界時。ただし GMT ではない)
   
 2. その地域の現在のタイムゾーン
   
  コンピュータにはハードウェアクロックも付属しており、 OS は自分の時刻
を設定するときにこれを基準として用います。

  OS の日付と時刻 (以降では日付/時刻のいずれかのみを書きます) は起動時
に設定されます。何らかのスクリプトがハードウェアクロックを読み、またタ
イムゾーンを計算して OS に設定します (BIOS にはタイムゾーンのデータは保
存されていません)。この同期がなされて以降は、BIOS の時刻と OS の時刻と
は完全に独立したものとなります。ですからしばらく経った後では、両者が数
秒異なることもあるかもしれません。どちらが正しいのでしょうか?何らかの
設定をしていない限り、どちらも正しくはありません。

  ここでは、この両者を地球上のあらゆる場所で 100% 正確にする方法につい
て議論していきます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2. タイムゾーンとは

  タイムゾーンとは、地球を地理学的に、イギリスのグリニッジを起点として
15o ごとに分割したものです。世界の別の場所では今何時なのか、ということ
をわかりやすくするために作られました。

  近年ではタイムゾーンは、地理学的というよりは、ずっと政治的なものにな
っています。人々は「近くの人たち」と時刻を共有したい場合があるからです
。また省エネルギーの面から、今日ではサマータイム (Daylight Savings
Time) が利用されており、これもタイムゾーンを変化させます。

  タイムゾーンは通常各国の政府や天文機関によって定義され、 3 文字または
4 文字で表記されます。例は Section 2.2 を見てください。

  世界の別の地域で今何時なのかを知りたい場合には、 
timezoneconverter.com  の web サイト
を使うとわかります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.1. サマータイム (Daylight Savings Time, DST)

  エネルギー節約のため、各国の政府はサマータイムを設けることがあります
。私たちの時計は 1 時間進められ、これによって昼間が長くなったように感じ
られます。実際に起きているのは、単にタイムゾーンの変更にすぎません。基
準となる時刻 (UTC) は不変で、常に同じです。

  Linux でサマータイムを自動的に有効・無効にする方法については、後ほど
見ていくことにします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.2. タイムゾーンの例

  例をお見せする以上にわかりやすい説明はないでしょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table 1. ブラジルのタイムゾーンと UTC に対する時差

┌────┬─────┬──────────────────────┐
│名前と時│DST の名前│場所                                        │
│差      │と時差    │                                            │
├────┼─────┼──────────────────────┤
│BREST   │BREDT -1: │Fernando de Noronha                         │
│-2:00   │00        │                                            │
├────┼─────┼──────────────────────┤
│BRST -3:│BRDT -2:00│So Paulo, Rio, Brasilia, Minas Gerais, North│
│00      │          │East Region, South Region,etc               │
├────┼─────┼──────────────────────┤
│BRWST   │BRWDT -3: │West Region                                 │
│-4:00   │00        │                                            │
├────┼─────┼──────────────────────┤
│BRAST   │BRADT -4: │Acre                                        │
│-5:00   │00        │                                            │
└────┴─────┴──────────────────────┘
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

  US のタイムゾーンについて、このような表をどなたか送っていただけません
か。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.3. Linux におけるタイムゾーンの仕組み

  Linux システムは GLIBC の動的なタイムゾーンを用いており、これは /etc/
localtime で決まります。このファイルは、あるゾーン情報ファイルへのリン
ク (またはそのコピー) です。ゾーン情報ファイルは通常 /usr/share/
zoneinfo ディレクトリ以下に置かれています。

  地理学的な観点からいうと、世界には 360o/15o=24 のタイムゾーンだけあれ
ば良いはずです。しかし物事をわかりやすくするため、また政治的な変更 (サ
マータイムなど) にあわせやすくするため、 /usr/share/zoneinfo には数百も
の zoneinfo ファイルが置かれています。それぞれは世界中のあらゆる都市・
国などに対応していますが、完全なものではありません (それは無理でしょう)
。

  国によっては (ブラジルもそうですが)、サマータイムの開始する日付が決ま
っていないこともあります。ブラジルではサマータイムは年ごとに決定され、
夏の 2〜3 か月前に始まります。この状況をうまく扱うには、zoneinfo ファイ
ルを自分で変更しなければなりません。 zoneinfo ファイルは、以下のような
テキストファイルを zic コマンドでコンパイルすることによって生成されます
。

Example 1. ブラジルのゾーン情報のテキストファイル

# Brazil Time Zones                                                           
#                                                                             
# Brazilian Time Zones are:                                                   
# BREST: East of Brasilia. Fernando de Noronha.                               
# BRST:  Brasilia, So Paulo, Rio, Northeast, South etc                        
# BRWST: West of Brasilia. Mato Grosso, Manaus                                
# BRAST: Acre.                                                                
#                                                                             
# In daylight saving time, letter 'S' changes to 'D'.                         
#                                                                             
# To install, make:                                                           
#                                                                             
# # zic Brazil.txt                                                            
#                                                                             
# Zone files will be installed in /usr/share/zoneinfo (depends on your        
# distribution). Then, make a symbolic link from your zone to /etc/localtime: 
#                                                                             
# # ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime                 
#                                                                             
#                                                                             
# If you have updates and new standards to this file please send to           
#                                                                             
# Avi Alkalay                                                  
#                                                                             
# Last update: 18 Nov 2000                                                    
# This file is available at http://avi.alkalay.net/linux/zoneinfo/            
#                                                                             
                                                                              
# Rule  NAME    FROM  TO    TYPE  IN    ON   AT    SAVE   LETTER/S            
Rule    Brazil  1931  1932  -     Oct   3    0:00  1:00   D                   
Rule    Brazil  1932  1933  -     Mar   31   0:00  0      S                   
Rule    Brazil  1949  only  -     Dec   1    0:00  1:00   D                   
Rule    Brazil  1950  only  -     Apr   30   0:00  0      S                   
Rule    Brazil  1950  1952  -     Dec   1    0:00  1:00   D                   
Rule    Brazil  1951  only  -     Apr   16   0:00  0      S                   
Rule    Brazil  1952  only  -     Mar   31   0:00  0      S                   
Rule    Brazil  1953  only  -     Feb   28   0:00  0      S                   
Rule    Brazil  1963  only  -     Oct   23   0:00  1:00   D                   
Rule    Brazil  1964  only  -     Mar   1    0:00  0      S                   
Rule    Brazil  1965  only  -     Jan   31   0:00  1:00   D                   
Rule    Brazil  1965  only  -     Mar   31   0:00  0      S                   
Rule    Brazil  1965  only  -     Dec   1    0:00  1:00   D                   
Rule    Brazil  1966  1968  -     Mar   1    0:00  0      S                   
Rule    Brazil  1966  1967  -     Nov   1    0:00  1:00   D                   
Rule    Brazil  1984  only  -     Nov   2    0:00  1:00   D                   
Rule    Brazil  1985  only  -     Mar   15   0:00  0      S                   
Rule    Brazil  1985  only  -     Nov   2    0:00  1:00   D                   
Rule    Brazil  1986  only  -     Mar   15   0:00  0      S                   
Rule    Brazil  1986  only  -     Oct   25   0:00  1:00   D                   
Rule    Brazil  1987  only  -     Feb   14   0:00  0      S                   
Rule    Brazil  1987  only  -     Oct   25   0:00  1:00   D                   
Rule    Brazil  1988  only  -     Feb   7    0:00  0      S                   
Rule    Brazil  1988  only  -     Oct   16   0:00  1:00   D                   
Rule    Brazil  1989  only  -     Jan   29   0:00  0      S                   
Rule    Brazil  1989  only  -     Oct   15   0:00  1:00   D                   
Rule    Brazil  1990  only  -     Feb   11   0:00  0      S                   
Rule    Brazil  1990  only  -     Oct   21   0:00  1:00   D                   
Rule    Brazil  1991  only  -     Feb   17   0:00  0      S                   
Rule    Brazil  1991  only  -     Oct   20   0:00  1:00   D                   
Rule    Brazil  1992  only  -     Feb   9    0:00  0      S                   
Rule    Brazil  1992  only  -     Oct   25   0:00  1:00   D                   
Rule    Brazil  1993  only  -     Jan   31   0:00  0      S                   
Rule    Brazil  1993  only  -     Oct   17   0:00  1:00   D                   
Rule    Brazil  1994  only  -     Feb   20   0:00  0      S                   
Rule    Brazil  1994  only  -     Oct   16   0:00  1:00   D                   
Rule    Brazil  1995  only  -     Feb   19   0:00  0      S                   
Rule    Brazil  1995  only  -     Oct   15   0:00  1:00   D                   
Rule    Brazil  1996  only  -     Feb   11   0:00  0      S                   
Rule    Brazil  1996  only  -     Oct   06   0:00  1:00   D                   
Rule    Brazil  1997  only  -     Feb   16   0:00  0      S                   
Rule    Brazil  1997  only  -     Oct   06   0:00  1:00   D                   
Rule    Brazil  1998  only  -     Mar   01   0:00  0      S                   
Rule    Brazil  1998  only  -     Oct   11   0:00  1:00   D                   
Rule    Brazil  1999  only  -     Feb   21   0:00  0      S                   
Rule    Brazil  1999  only  -     Oct   03   0:00  1:00   D                   
Rule    Brazil  2000  only  -     Feb   27   0:00  0      S                   
Rule    Brazil  2000  only  -     Oct   8    0:00  1:00   D                   
Rule    Brazil  2001  only  -     Feb   18   0:00  0      S                   
                                                                              
                                                                              
# Zone  NAME                          GMTOFF  RULES/SAVE    FORMAT  [UNTIL]   
Zone    Brazil/DeNoronha              -2:00   Brazil        BRE%sT            
Zone    posix/Brazil/DeNoronha        -2:00   Brazil        BRE%sT            
Zone    right/Brazil/DeNoronha        -2:00   Brazil        BRE%sT            
Zone    Brazil/East                   -2:00   Brazil        BRE%sT            
Zone    posix/Brazil/East             -2:00   Brazil        BRE%sT            
Zone    right/Brazil/East             -2:00   Brazil        BRE%sT            
                                                                              
Zone    America/Sao_Paulo             -3:00   Brazil        BR%sT             
Zone    America/Rio_de_Janeiro        -3:00   Brazil        BR%sT             
Zone    America/Brasilia              -3:00   Brazil        BR%sT             
Zone    posix/America/Sao_Paulo       -3:00   Brazil        BR%sT             
Zone    posix/America/Rio_de_Janeiro  -3:00   Brazil        BR%sT             
Zone    posix/America/Salvador        -3:00   Brazil        BR%sT             
Zone    posix/America/Brasilia        -3:00   Brazil        BR%sT             
Zone    posix/Brazil/Central          -3:00   Brazil        BR%sT             
Zone    posix/Brazil/Brasilia         -3:00   Brazil        BR%sT             
Zone    posix/Brazil/Sao_Paulo        -3:00   Brazil        BR%sT             
Zone    posix/Brazil/Salvador         -3:00   Brazil        BR%sT             
Zone    posix/Brazil/Rio_de_Janeiro   -3:00   Brazil        BR%sT             
Zone    right/America/Sao_Paulo       -3:00   Brazil        BR%sT             
Zone    right/America/Rio_de_Janeiro  -3:00   Brazil        BR%sT             
Zone    right/America/Salvador        -3:00   Brazil        BR%sT             
Zone    right/America/Brasilia        -3:00   Brazil        BR%sT             
Zone    right/Brazil/Central          -3:00   Brazil        BR%sT             
Zone    right/Brazil/Brasilia         -3:00   Brazil        BR%sT             
Zone    right/Brazil/Sao_Paulo        -3:00   Brazil        BR%sT             
Zone    right/Brazil/Salvador         -3:00   Brazil        BR%sT             
Zone    right/Brazil/Rio_de_Janeiro   -3:00   Brazil        BR%sT             
Zone    Brazil/Central                -3:00   Brazil        BR%sT             
Zone    Brazil/Brasilia               -3:00   Brazil        BR%sT             
Zone    Brazil/Sao_Paulo              -3:00   Brazil        BR%sT             
Zone    Brazil/Rio_de_Janeiro         -3:00   Brazil        BR%sT             
Zone    Brazil/Salvador               -3:00   Brazil        BR%sT             
                                                                              
Zone    Brazil/West                   -4:00   Brazil        BRW%sT            
Zone    Brazil/Manaus                 -4:00   Brazil        BRW%sT            
Zone    Brazil/Rondonia               -4:00   Brazil        BRW%sT            
Zone    Brazil/Roraima                -4:00   Brazil        BRW%sT            
Zone    Brazil/Mato_Grosso            -4:00   Brazil        BRW%sT            
Zone    posix/Brazil/Manaus           -4:00   Brazil        BRW%sT            
Zone    posix/Brazil/Mato_Grosso      -4:00   Brazil        BRW%sT            
Zone    right/Brazil/Manaus           -4:00   Brazil        BRW%sT            
Zone    right/Brazil/Mato_Grosso      -4:00   Brazil        BRW%sT            
Zone    posix/America/Manaus          -4:00   Brazil        BRW%sT            
Zone    right/America/Manaus          -4:00   Brazil        BRW%sT            
                                                                              
Zone    Brazil/Acre                   -5:00   Brazil        BRA%sT            
                                                                              

  Rule ブロックはタイムゾーンを変更する日付と時刻を定義しています。一方
Zone ブロックでは、そのゾーンを管理する Rule を参照しています。

  このファイルのコメントでは、ゾーン情報コンパイラである zic を使ってこ
れらのタイムゾーンをインストールする方法が説明されています (既にインス
トール済みになっていると思いますが)。インストールしたものを有効にするに
は、そのゾーン情報ファイルを /etc/localtime ファイルからリンク (あるい
はコピー) するだけで OK です。ディストリビューションによっては、より高
度な (そしておそらくより望ましい) タイムゾーンの設定方法が存在します。
これらは Section 3.1 で説明します。

  /etc/localtime が正しい zoneinfo ファイルを指すようにしたら、既にあな
たのコンピュータはそのゾーンの規則に従っており、サマータイムの変更も自
動的に行われます。時刻を手動で変更する必要はありません。

  次に示す一連のコマンドは、 Linux のタイムゾーンに関するメカニズムの動
作を示すものです。これらはすべて 1 分以内に実行されたものです。

bash$ ls -al /etc/localtime                                                                   
lrwxrwxrwx  1 root root 35 May 22  2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia 
bash$ date                                                                                    
Fri Mar 29 20:13:38 BRST 2002                                                                 
bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime                                           
bash$ date                                                                                    
Fri Mar 29 23:13:47 GMT 2002                                                                  
bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime                               
bash$ date                                                                                    
Fri Mar 29 20:14:03 BRST 2002                                                                 

  20:13 に、私は自分のデフォルトであるブラジルのタイムゾーン (BRST) に
いました。ここで私は自分のシステムを GMT に変更し、すると私のシステム時
刻は 23:13 になりました! あなたも、自分のいるタイムゾーンがサマータイム
に変わったときに、同様の現象を見ることになります [訳注: 日本国内では無
理ですが :-)]。ただしその規則はすべてタイムゾーンの内部にあるものです
(/etc/localtime のリンクがこの例のように変わるわけではありません)。

  このマシンで動作しているアプリケーション (アクセスログを生成する web
サーバなど) は、この変更を認識します。したがって Section 1 で述べたとお
り、完全な意味での時刻とは現在の時刻プラス現在のタイムゾーンである、と
いう事実を理解することは、開発者にとって非常に重要です。

  最後に私は、自分の正しいタイムゾーンに戻しました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3. Linux マシンを正しく設定する

  どんな OS をインストールするにせよ、現在のタイムゾーンに関する情報は
必須です。これは都市・州・国などで表現されます。 BIOS 時刻をどう設定す
るかも決めておかなければなりませんが、これには次の方針に従うのがいいで
しょう。

Linux だけのマシン
   
      この場合は BIOS 時刻は UTC にしておくのがいいでしょう。サマータイ
    ムの変更もタイムゾーン設定によって動的に管理されます。
   
Linux と MS Windows のデュアルブートマシン
   
      Windows は、Linux に比べ、時刻を原始的に扱います。 Windows では
    BIOS 時刻が常に地方時 (localtime) に等しく、したがってサマータイム
    においては、ハードウェアクロックが直接変更されるという、より大きな
    変化が生じることになります。 Linux も Windows もブート時にはハード
    ウェアから時刻を取得して設定するので、両者を共存させるときには
    Linux でも同じやり方で時刻を扱わなければなりません。したがって BIOS
    時刻を自分の地方時に合わせなければなりません。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.1. タイムゾーン設定

  Red Hat Linux およびその派生システムでは、ハードウェアクロックの設定
方針とタイムゾーンとは timeconfig コマンドで設定できます。このコマンド
はユーザーフレンドリーなダイアログを表示してくれます。また非対話的に使
うこともできます。

Example 2. 時刻設定ツール

bash# timeconfig "Brasil/East"   # set HC to localtime, and TZ to "Brazil/East" 
bash# timeconfig --utc "Brasil/East"   # set HC to UTC, and TZ to "Brazil/East" 

  いずれの方法でも、timeconfig は起動時に読み込まれる /etc/sysconfig/
clock ファイルを変更します。このファイルを手で編集することもできます。
次のような内容になっているはずです。

Example 3. /etc/sysconfig/clock ファイル

ZONE="Brazil/East"                                                     
UTC=true                                                               
ARC=false                                                              

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2. ハードウェアクロックを設定する

  ハードウェアクロックの設定を行うのは、正しい時刻の取得方法を理解して
からにすることをおすすめしておきます。このやり方は Section 4 で説明しま
す。

  hwclock はハードウェアクロック (HC) を読み書きするコマンドで、いくつ
か存在するオプションに応じて動作します (オプションについては man ページ
に記述されています)。しかし最近の Linux ディストリビューションを使って
いるならば、 hwclock を使う必要はありません。 HC とタイムゾーンの方針を
決めたら、より高レベルのコマンドである setclock を使って HC を正しく設
定できます。 setclock にはパラメータを渡す必要はなく、このコマンドはイ
ンテリジェントに hwclock を呼び、現在の OS の日付・時刻に基づいて BIOS
を設定します。したがって、常に setclock を使うようにしましょう。

  しかしハードワークが好きなミニマリストの人向けに、いくつか hwclock の
例もここに挙げておきましょう。

Example 4. setclock と hwclock の使い方

bash# setclock                                  # The easy way to set HC                                 
bash# hwclock                                   # reads HC                                               
bash# hwclock --systohc --utc                   # set HC with UTC time based on OS current time          
bash# hwclock --systohc                         # set HC with local time based on OS current time        
bash# hwclock --set --date "22 Mar 2002 13:17"  # set HC with time specified on string                   

  OS の時刻はハードウェアクロックとは独立しているため、 BIOS を変更して
も、次にブートするまでその変更は反映されません。

  もう一つの HC の設定方法としては、再起動してコンピュータの BIOS 画面
に入るやり方もあります。 IBM e-server zSeries  では、これは z/VM レベルで行う必要があります
。 Linux はここでは z/VM 上に作られた仮想マシン上で動作しているからです
。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4. 正確な世界時に同期する

  管理しているすべてのマシンの時刻を正確に保つことは、しっかりしたネッ
トワークセキュリティの方針を立てる (「ファイアウォールを置くだけ」より
ずっと先のレベル) のと同じくらい重要なことです。システムを機能的かつ安
全に、正しく管理していく上で、時刻の同期は主要な要素のひとつと言えます
。特に分散型のアプリケーションや web サービス、あるいは分散型のセキュリ
ティ監視ツールを管理する場合には、正確な時刻は必要不可欠です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.1. NTP: ネットワークタイムプロトコル

  ここではプロトコルについては触れませんが、このすばらしい発明とインタ
ーネットの普及とが、私たちにどのように役立ってくれるかは説明しましょう
。 NTP に関するより詳しい情報は www.ntp.org  から
得られるでしょう。

  一度システムを設定すると、 NTP は (動作しているアプリケーションには影
響を及ぼさないような) 非常に小さな修正を行いながら、その正確な時刻を保
持しようとし続けます。

  原子に含まれる電子の振動数やサイクロトロンを利用したハードウェアを用
いると、非常に正確な時刻が取得できます。また GPS (Global Positioning
System) を用いる方法もあります。前者のほうがより正確ですが、後者も充分
優れています。両者とも特殊で高価な装置を必要としますが、これらの装置の
所有者 (たいてい大学か研究所) は、その装置をコンピュータに接続し、その
コンピュータで NTP デーモンを走らせ、インターネットにつなぎ、我々が無料
でアクセスすることを許可してくれているのです。そして我々は、これを使っ
て自分のシステムの時刻同期をしようというわけです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.2. 簡単な時刻同期構造を構築する

  必要なものは:

 1.   直接または間接 (ファイアウォール経由) のインターネット接続。
   
 2.   NTP サーバを選択します。公開サーバである pool.ntp.org  を利用することもできますし、 NTP の web サイ
    トにある stratum 2 公開タイムサーバ  から選ぶこともできます。インターネットへ接
    続されていない場合は、あなたの WAN の管理者が適切な内部アドレスを教
    えてくれるでしょう (腕のいい管理者なら、ですけど)。
   
 3.   同期させたいシステムすべてに NTP パッケージをインストールすること
    。自分の使っている Linux ディストリビューションの CD に RPM がある
    でしょうし、なければ rpmfind.net  で検索
     してみまし
    ょう。
   
  良い構成の例を次に示します。

Figure 1. NTP のローカルリレーサーバ

[ntp]

  同期させたいマシンが複数ある場合、それらすべてを選択したリモートの
NTP サーバに接続してはいけません。自分の管理しているサーバたちから 2 台
だけを選び、リモートの NTP サーバへアクセスするマシンはこの 2 台に限る
のです。そして他のマシンは、この 2 台に対して同期させるのです。この 2
台のことを、これ以降ではリレーサーバと呼ぶことにしましょう。

  リレーサーバはネットワークにつながっているマシンのどれでもかまいませ
ん。 NTP の使うメモリや CPU はわずかですから、専用のマシンを用意する必
要はありません。

    Tip: これらのローカルなリレーサーバには、ntp1.my.com や ntp2.my.com
    のように、ホスト名のエイリアスをつけておくといいでしょう。こうして
    おけば、 NTP の機能を (IP アドレスとホスト名の違う) 別のリレーサー
    バに移動しても、クライアントでは変更を行わずにすみます。 DNS の管理
    者に、これらのエイリアスを作成するよう頼んでみましょう。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.3. NTP の設定

リレーサーバでは
   
      /etc/ntp.conf を編集して、選択したリモートサーバを追加します。
   
    Example 5. リレーサーバの /etc/ntp.conf
   
    .                                                                     
    .                                                                     
    server  otherntp.server.org     # A stratum 1 server at server.org    
    server  ntp.research.gov        # A stratum 2 server at research.gov  
    .                                                                     
    .                                                                     
   
      前にも述べましたが、公開サーバ pool.ntp.org  も使えますし、 NTP の web サイトから公開タイ
    ムサーバ  のリス
    トを取り寄せることもできます。
   
クライアントでは
   
      /etc/ntp.conf を編集して、リレーサーバの (NTP サーバであることを
    意味する方の) ホスト名を追加します。
   
    Example 6. クライアントマシンの /etc/ntp.conf
   
    .                                                                  
    .                                                                  
    server  ntp1.my.com             # My first local relay             
    server  ntp2.my.com             # My second local relay            
    .                                                                  
    .                                                                  
   
  もしマシンの UTC 時刻が NTP サーバに対して数分以上ずれていると、 NTP
は動作しません。従って最初に完全同期 (full sync) を行わなければなりませ
ん (システムで仕事が行われていない時間帯を選びましょう)。この作業は NTP
の初期設定を行う時だけ必要とされます。それ以降は全く不要です。

Example 7. 最初の同期

bash# ntpdate otherntp.research.gov     (1)                                          
24 Mar 18:16:36 ntpdate[10254]: step time server 200.100.20.10 offset -15.266188 sec 
bash# ntpdate otherntp.research.gov     (2)                                          
24 Mar 18:16:43 ntpdate[10255]: adjust time server 200.100.20.10 offset -0.000267 sec

(1)   最初の完全同期では、我々のシステムが 15 秒遅れていました。
(2)   二度目の完全同期は、単に確認のために行いました。ほとんどずれはゼ
    ロで、これで OK です。

  最終段階は、各マシンでの NTP デーモンの起動 (または再起動) です。

bash# service ntpd restart                                             

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.4. 時刻同期の確認

  以上で設定はすべて終わりです。 NTP はそっとあなたのマシンの時刻を同期
し続けてくれているはずです。この様子は、NTP Query コマンド (ntpq) で見
ることができます。

Example 8. 時刻同期の状態

bash# ntpq -p                                                                  
     remote           refid      st t when poll reach   delay   offset  jitter 
============================================================================== 
-jj.cs.umb.edu   gandalf.sigmaso  3 u   95 1024  377   31.681  -18.549   1.572 
 milo.mcs.anl.go ntp0.mcs.anl.go  2 u  818 1024  125   41.993  -15.264   1.392 
-mailer1.psc.edu ntp1.usno.navy.  2 u  972 1024  377   38.206   19.589  28.028 
-dr-zaius.cs.wis ben.cs.wisc.edu  2 u  502 1024  357   55.098    3.979   0.333 
+taylor.cs.wisc. ben.cs.wisc.edu  2 u  454 1024  347   54.127    3.379   0.047 
-ntp0.cis.strath harris.cc.strat  3 u  507 1024  377  115.274   -5.025   1.642 
*clock.via.net   .GPS.            1 u  426 1024  377  107.424   -3.018   2.534 
 ntp1.conectiv.c 0.0.0.0         16 u    - 1024    0    0.000    0.000 4000.00 
+bonehed.lcs.mit .GPS.            1 u  984 1024  377   25.126    0.131  30.939 
-world.std.com   204.34.198.40    2 u  119 1024  377   24.229   -6.884   0.421 

各列の意味

remote
   
      リモートの NTP サーバの名前です。 -n スイッチを用いると、ホスト名
    の代わりに IP アドレスが表示されます。
   
refid
   
      各サーバが現在どこから時刻を取得しているかを示します。サーバのホ
    スト名や .GPS. のようなものが表示されます。後者は Global
    Positioning System から時刻を取得していることを示します。
   
st
   
      Stratum は 1 から 16 までの数値で、リモートサーバの正確さ
    (precision) を示しています。 1 は最も正確で、16 はサーバに接続でき
    ないことを意味します。あなたのマシンの Stratum は、最も正確なリモー
    トサーバの Stratum に 1 を加えたものになります。 [訳注: GPS 時計な
    どの時刻基準を備えたマシンに対する「接続段数」と考えるとよいと思い
    ます。]
   
poll
   
      ポーリングを行う時間間隔を秒単位で表したものです。値は許されてい
    る最小値・最大値の間になります。当初は高速に同期ができるよう、この
    値は小さくなっています。時計が同期状態になったら、ポーリング値はだ
    んだん長くなっていき、ネットワークの通信量や、人気のある time サー
    バの負荷を減らすようになっています。
   
reach
   
      8 ビット分のビット列を 8 進数で表現したもので、ローカルのマシンが
    サーバへの接続を試みた、最後の 8 回分の結果を示しています。サーバに
    到達した場合はビットが立ちます。 [訳注: 従って全部成功していれば
    377 となります。]
   
delay
   
      「いま何時?」要求に対する返答が返されるまでに必要とされた時間 (秒
    単位) です。
   
offset
   
      最も重要な値です。ローカルマシンとリモートサーバの時刻の違いです
    。同期している最中は、offset は小さくなっていきます。つまりローカル
    のマシンの時刻がだんだん正確になっていくわけです。
   
jitter
   
      分散 (dispersion) とか揺らぎ (jitter) と呼ばれるものは、何回か要
    求・応答を行った際の、オフセット値の統計的な揺らぎを与えるものです
    。この値は低い方が好ましいです。値が低い方が、正確な時刻同期が可能
    になります。
   
サーバのホスト名の前に置かれる符号の意味

-
   
      ローカルの NTP サービスはこのサーバをあまり好んでいない
   
+
   
      ローカルの NTP サービスはこのサーバを好んで利用している
   
x
   
      不良ホスト
   
*
   
      現在利用している
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.5. NTP がブート時に自動起動するよう設定する

  NTP はずっと動作させておきたいことが多いでしょう。マシンを再起動した
場合でもそうですね。各マシンで以下の作業を行いましょう。

bash# chkconfig --level 2345 ntpd on                                   

  これで自動起動が確実になります。

  マシンを再起動しないまま長いこと (何ヶ月も何年も) 動かし続けると、本
来正確でないハードウェアクロックと、(今や非常に正確となった) システム時
刻との間には、大きなずれが生じるでしょう。最近の Linux ディストリビュー
ションでは、システムをシャットダウンする際に、 setclock コマンドに似た
仕組みを使って OS 時刻を HC 時刻にコピーします。このようにして、次に OS
を起動する際にも、シャットダウンの時とだいたい同じくらい、ほぼ正確な日
付と時刻が得られるようになっているのです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

A. この文書について

Copyright 2002, Avi Alkalay.

This document must be distributed under the terms of GNU Free
Documentation License .

  参考訳: この文書の再配布にあたっては、 GNU Free Documentation License
 に従わなければなりません。

  この文書は以下で配布されています。

 ・ Official site  [
    XML (DocBook) ソース ]
   
 ・ LinuxDoc の HOWTO 文書として登録  [1 ページ形式 ] [PDF ]
   
 ・ 中野武雄  による日本語訳  [テキスト版 ]
   
 ・ SHAKI  によるロシア語訳 
   
  翻訳は中野武雄が行いました。同じく再配布は GFDL (Invariant Section な
し、Front-Cover Text なし、Back-Cover Text なし) に従います。

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/