39 NTPによる時刻の同期 #
NTP (network time protocol)メカニズムは、システムの時刻をネットワーク上で同期させるためのプロトコルです。最初に、マシンは信頼できる時刻を持つサーバに時刻を照会できます。次に、ネットワーク上の他のコンピュータがこのマシン自体に対し、時刻を照会できます。目的は2つあり、絶対的な時間を維持することと、ネットワーク内のすべてのマシンのシステム時刻を同期させることです。
正確なシステム時刻を維持することはさまざまな場で重要です。ハードウェア組み込み型クロックがデータベースやクラスタなどのアプリケーション要件に合致しないことがよくあります。システムタイムを手動で修正することは時に問題を発生させる可能性があります。たとえば、時間を逆廻りに戻すことで重要なアプリケーションの誤動作を誘発することもあります。ネットワーク内では、すべてのマシンのシステムタイムを同期させることが通常必要とされますが、手動での時刻調整はよい方法ではありません。NTPには、これらの問題を解決するメカニズムがあります。NTPサービスは、ネットワーク内の信頼できるタイムサーバを使用して、システム時間を継続的に調整します。さらに、電波時計のようなローカルリファレンスクロックを管理する機能があります。
SUSE Linux Enterprise Desktop 15以降、chronyは、NTPでデフォルトで実装されるようになりました。chronyは2つの部分で構成されています。chronydは、ブート時に起動可能なデーモンであり、chronycは、chronydのパフォーマンスを監視し、実行時に動作パラメータを変更するためのコマンドラインインタフェースプログラムです。
SUSE Linux Enterprise Desktop 15.2以降、NTPクライアント設定用のYaSTモジュールは、デーモンとして実行するように設定されていない場合に、cronデーモンではなくsystemd-timerを設定し、chronyを実行します。
39.1 YaSTでのNTPクライアントの設定 #
chronyパッケージ付属のNTPデーモン(chronyd)は、ローカルコンピュータハードウェアクロックを時間の参照に使用するように事前設定されています。ハードウェアクロックの精度は、その時間ソースに大きく依存します。たとえば、原子時計やGPS受信機は正確な時間ソースですが、一般的なRTCチップは信頼できる時間ソースではありません。YaSTを利用すれば、NTPクライアントを簡単に設定することができます。
YaST NTPクライアント設定( › )ウィンドウでは、NTPデーモンの開始時期や設定ソースの種類を指定したり、カスタムタイムサーバを追加することができます。
39.1.1 NTPデーモン開始 #
NTPデーモンを開始する時期は、次の3つのオプションから選択できます。
を選択すると、
chronyデーモンが手動で起動します。を選択すると、永続的に動作する
chronyを使用せずに、定期的にシステム時間を設定します。を設定できます。システムのブート時に自動的に
chronydを起動するには、を選択します。この設定をお勧めします。
39.1.2 設定元のタイプ #
ドロップダウンボックスで、またはのいずれかを選択します。お使いのサーバが(パブリック) NTPサーバの固定セットのみを使用している場合は、を設定し、内部ネットワークがDHCP経由でNTPサーバを提供している場合は、が適しています。
39.1.3 タイムサーバの設定 #
クライアントが問い合わせるタイムサーバは、ウィンドウの下部に表示されます。必要に応じて、、、およびを使用してこのリストを変更します。
をクリックして、新しいタイムサーバを追加します。
フィールドに、マシン時刻を同期させるタイムサーバまたはタイムサーバのプールのURLを入力します。URLを入力したら、をクリックして、有効な時間ソースを指していることを確認します。
chronydデーモンの開始時により多くの要求を送信することによって時刻同期を高速化するには、を有効にします。ブート時に
chronydデーモンを自動的に開始しインターネットに接続されていない可能性のあるシステムでブート時間を短縮するには、を有効にします。このオプションは、ネットワーク接続がNetworkManagerによって管理されるラップトップの場合などに役立ちます。をクリックして、確定します。
39.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サービスのほかに、SLEDには、yast-timesync.serviceが含まれています。yast-timesync.serviceは、5分ごとにタイマーによってトリガされ、-qオプションを指定してchronydを実行し、システム時刻を設定して終了します。任意の時点で実行できるchronydのインスタンスは1つのみであるため、chronyd関連のサービスを両方同時に有効化または起動しないでください。
39.3 chronycを使用した実行時のchronydの設定 #
実行時にchronycを使用してchronydの動作を変更することができます。chronydの操作に関するステータスレポートも生成します。
chronycは、対話的または非対話的モードで実行できます。chronycを対話形式で実行するには、コマンドラインでchronycを入力します。プロンプトを表示し、コマンド入力を待ちます。たとえば、オンラインまたはオフラインのNTPソースの数を確認するには、次のコマンドを実行します。
#chronycchronyc> 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を入力します。
対話型プロンプトを使用する必要がない場合は、次のようにコマンドを直接入力します。
#chronycactivity
chronycを使用して行われた変更は、永続的ではありません。変更内容は、次のchronydの再起動後に失われます。永続的な変更を行う場合は、/etc/chrony.confを変更してください。
chronycコマンドの完全なリストについては、そのマニュアルページ(man
1 chronyc)を参照してください。
39.4 ランタイム時の動的時刻同期 #
chronydは、ネットワーク接続なしでブートするシステムでは正常に起動しますが、ツールは設定ファイルで指定されたタイムサーバのDNS名を解決できません。
chronydは、server、pool、およびpeerディレクティブによって指定されたタイムサーバ名を、時間間隔を増やして成功するまで解決しようとします。
chronydの起動時にタイムサーバにアクセスできない場合は、offlineオプションを指定することができます。
server server_address offline
この場合、chronydは、次のコマンドを使用して有効にするまで、サーバをポーリングしようとしません。
# chronyc online server_address
auto_offlineオプションが設定されている場合、タイムサーバに2つの要求を送信して応答を受信しなかったときに、chronydはそのタイムサーバがオフラインになったとみなします。このオプションを使用することで、ネットワークリンクを切断するときにchronycからofflineコマンドを実行する必要がなくなります。
39.5 ローカルリファレンスクロックの設定 #
ソフトウェアパッケージchronyは、SHMまたはSOCKドライバを介してタイミングデータにアクセスするために、他のプログラム(gpsdなど)を利用しています。/etc/chrony.confのrefclockディレクティブを使用して、時間ソースとして使用するハードウェア基準クロックを指定します。これには、2つの必須パラメータ(ドライバ名とドライバ固有のパラメータ)があります。2つのパラメータの後には、ゼロ以上のrefclockオプションが続きます。chronydには、次のドライバが含まれています。
PPS - カーネル
pulse per secondAPIのドライバ。例: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を参照してください。
39.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
![[NTP設定]ウィンドウ [NTP設定]ウィンドウ](images/ntp_client.png)
