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 なし) に従います。