38 NTPによる時刻の同期 #
NTP (network time protocol)メカニズムは、システムの時刻をネットワーク上で同期させるためのプロトコルです。最初に、マシンは信頼できる時刻を持つサーバに時刻を照会できます。次に、ネットワーク上の他のコンピュータがこのマシン自体に対し、時刻を照会できます。目的は2つあり、絶対的な時間を維持することと、ネットワーク内のすべてのマシンのシステム時刻を同期させることです。
正確なシステム時刻を維持することはさまざまな場で重要です。ハードウェア組み込み型クロックがデータベースやクラスタなどのアプリケーション要件に合致しないことがよくあります。システムタイムを手動で修正することは時に問題を発生させる可能性があります。たとえば、時間を逆廻りに戻すことで重要なアプリケーションの誤動作を誘発することもあります。ネットワーク内では、すべてのマシンのシステムタイムを同期させることが通常必要とされますが、手動での時刻調整はよい方法ではありません。NTPには、これらの問題を解決するメカニズムがあります。NTPサービスは、ネットワーク内の信頼できるタイムサーバを使用して、システム時間を継続的に調整します。さらに、電波時計のようなローカルリファレンスクロックを管理する機能があります。
SUSE Linux Enterprise Server 15以降、chrony
は、NTPでデフォルトで実装されるようになりました。chrony
は2つの部分で構成されています。chronyd
は、ブート時に起動可能なデーモンであり、chronyc
は、chronyd
のパフォーマンスを監視し、実行時に動作パラメータを変更するためのコマンドラインインタフェースプログラムです。
SUSE Linux Enterprise Server 15.2以降、NTPクライアント設定用のYaSTモジュールは、デーモンとして実行するように設定されていない場合に、cronデーモンではなくsystemd-timerを設定し、chrony
を実行します。
38.1 YaSTでのNTPクライアントの設定 #
chrony
パッケージ付属のNTPデーモン(chronyd
)は、ローカルコンピュータハードウェアクロックを時間の参照に使用するように事前設定されています。ハードウェアクロックの精度は、その時間ソースに大きく依存します。たとえば、原子時計やGPS受信機は正確な時間ソースですが、一般的なRTCチップは信頼できる時間ソースではありません。YaSTを利用すれば、NTPクライアントを簡単に設定することができます。
YaST NTPクライアント設定(
› )ウィンドウでは、NTPデーモンの開始時期や設定ソースの種類を指定したり、カスタムタイムサーバを追加することができます。38.1.1 NTPデーモン開始 #
NTPデーモンを開始する時期は、次の3つのオプションから選択できます。
chrony
デーモンが手動で起動します。chrony
を使用せずに、定期的にシステム時間を設定します。 を設定できます。システムのブート時に自動的に
chronyd
を起動するには、 を選択します。この設定をお勧めします。
38.1.2 設定元のタイプ #
ドロップダウンボックスで、 または のいずれかを選択します。お使いのサーバが(パブリック) NTPサーバの固定セットのみを使用している場合は、 を設定し、内部ネットワークがDHCP経由でNTPサーバを提供している場合は、 が適しています。
38.1.3 タイムサーバの設定 #
クライアントが問い合わせるタイムサーバは、
ウィンドウの下部に表示されます。必要に応じて、 、 、および を使用してこのリストを変更します。をクリックして、新しいタイムサーバを追加します。
chronyd
デーモンの開始時により多くの要求を送信することによって時刻同期を高速化するには、 を有効にします。ブート時に
chronyd
デーモンを自動的に開始しインターネットに接続されていない可能性のあるシステムでブート時間を短縮するには、 を有効にします。このオプションは、ネットワーク接続がNetworkManagerによって管理されるラップトップの場合などに役立ちます。
38.2 ネットワークでのNTPの手動設定 #
chrony
は、その設定を/etc/chrony.conf
ファイルから読み込みます。コンピュータのクロックを同期させるには、使用するタイムサーバをchrony
に指示する必要があります。特定のサーバ名またはIPアドレスを使用できます。以下に例を示します。
0.suse.pool.ntp.org 1.suse.pool.ntp.org 2.suse.pool.ntp.org 3.suse.pool.ntp.org
プール名を指定することもできます。プール名は複数のIPアドレスに解決されます。
pool pool.ntp.org
同じネットワーク上の複数のコンピュータで時刻を同期させる場合、それらのコンピュータをすべて外部サーバと同期させることはお勧めしません。1つのコンピュータを、外部のタイムサーバと同期させるタイムサーバとし、他のコンピュータを、クライアントとして機能させることをお勧めします。信頼性のあるタイムサーバと区別するには、サーバの/etc/chrony.conf
にlocal
ディレクティブを追加します。
local stratum 10
chrony
を起動するには、次のコマンドを実行します。
systemctl start chronyd.service
chronyd
を初期化した後、時間が安定するまでにある程度時間がかかり、ローカルコンピュータクロックを修正するためのドリフトファイルが作成されます。ドリフトファイルを用いることで、ハードウェアクロックの定誤差はコンピュータの電源が入った時点で算出されます。修正はすぐに反映されるため、システム時刻がより安定します。
ブート時にchrony
が自動的に起動するようにサービスを有効にするには、次のコマンドを実行します。
systemctl enable chronyd.service
yast-timesync.service
サービスの競合
chronyd.service
サービスのほかに、SLESには、yast-timesync.service
が含まれています。yast-timesync.service
は、5分ごとにタイマーによってトリガされ、-q
オプションを指定してchronyd
を実行し、システム時刻を設定して終了します。任意の時点で実行できるchronyd
のインスタンスは1つのみであるため、chronyd
関連のサービスを両方同時に有効化または起動しないでください。
38.3 chronyc
を使用した実行時のchronyd
の設定 #
実行時にchronyc
を使用してchronyd
の動作を変更することができます。chronyd
の操作に関するステータスレポートも生成します。
chronyc
は、対話的または非対話的モードで実行できます。chronyc
を対話形式で実行するには、コマンドラインでchronyc
を入力します。プロンプトを表示し、コマンド入力を待ちます。たとえば、オンラインまたはオフラインのNTPソースの数を確認するには、次のコマンドを実行します。
#
chronyc
chronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
chronyc
のプロンプトを終了するには、quit
またはexit
を入力します。
対話型プロンプトを使用する必要がない場合は、次のようにコマンドを直接入力します。
#
chronyc
activity
chronyc
を使用して行われた変更は、永続的ではありません。変更内容は、次のchronyd
の再起動後に失われます。永続的な変更を行う場合は、/etc/chrony.conf
を変更してください。
chronyc
コマンドの完全なリストについては、そのマニュアルページ(man
1 chronyc
)を参照してください。
38.4 ランタイム時の動的時刻同期 #
chronyd
は、ネットワーク接続なしでブートするシステムでは正常に起動しますが、ツールは設定ファイルで指定されたタイムサーバのDNS名を解決できません。
chronyd
は、server
、pool
、およびpeer
ディレクティブによって指定されたタイムサーバ名を、時間間隔を増やして成功するまで解決しようとします。
chronyd
の起動時にタイムサーバにアクセスできない場合は、offline
オプションを指定することができます。
server server_address offline
この場合、chronyd
は、次のコマンドを使用して有効にするまで、サーバをポーリングしようとしません。
#
chronyc online server_address
auto_offline
オプションが設定されている場合、タイムサーバに2つの要求を送信して応答を受信しなかったときに、chronyd
はそのタイムサーバがオフラインになったとみなします。このオプションを使用することで、ネットワークリンクを切断するときにchronyc
からoffline
コマンドを実行する必要がなくなります。
38.5 ローカルリファレンスクロックの設定 #
ソフトウェアパッケージchrony
は、SHMまたはSOCKドライバを介してタイミングデータにアクセスするために、他のプログラム(gpsd
など)を利用しています。/etc/chrony.conf
のrefclock
ディレクティブを使用して、時間ソースとして使用するハードウェア基準クロックを指定します。これには、2つの必須パラメータ(ドライバ名とドライバ固有のパラメータ)があります。2つのパラメータの後には、ゼロ以上のrefclock
オプションが続きます。chronyd
には、次のドライバが含まれています。
PPS - カーネル
pulse per second
APIのドライバ。例:refclock PPS /dev/pps0 lock NMEA refid GPS
SHM - NTP共有メモリドライバ。例:
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
SOCK - Unixドメインソケットドライバ。例:
refclock SOCK /var/run/chrony.ttyS0.sock
PHC - PTPハードウェアクロックドライバ。次に例を示します。
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
個々のドライバのオプションの詳細については、man 8
chrony.conf
を参照してください。
38.6 ETR (External Time Reference)とのクロックの同期 #
ETR(External Time Reference)とのクロック同期のサポートを利用できます。ETRは、2**20(2の20乗)マイクロ秒ごとに、発振器信号と同期信号を送信して、すべての接続先サーバのTODクロックの同期を保ちます。
可用性のため、2ユニットのETRをコンピュータに接続できます。クロックが同期チェックの許容値を超えた場合は、すべてのCPUがマシンをチェックし、クロックが同期していないことを示します。この事態が発生した場合は、XRC対応デバイスへのすべてのDASD I/Oがクロックの再同期まで停止します。
ETRサポートは2つのsysfs
属性を介して有効化されます。root
として次のコマンドを実行します。
echo 1 > /sys/devices/system/etr/etr0/online echo 1 > /sys/devices/system/etr/etr1/online