サーバーを再起動したら、時刻が数分ずれてた
時計って何個もあるん?
【疑問】再起動したら時計が数分ずれてた。システムクロックとハードウェアクロック、hwclock・date・timedatectl と NTP(chrony・ntpd)【LPICレベル1】
前提のおさらい。タイムゾーンは時刻をどの地域で表示するかの設定で、/etc/localtime や TZ で決まる。ここで話すのは、時計そのものが正しいかどうか
>>1
2つある
システムクロック:カーネルが持ってる時計。動いてる間はこっちを使う
ハードウェアクロック(RTC):マザーボードの電池で動く時計。電源を切っても進む
起動するときに RTC の値をシステムクロックに読み込むから、RTC がずれてると起動直後の時刻もずれる
>>3
RTC を見たり合わせたりするのは?
>>4
hwclock(root で使う)hwclock -r(--show):RTC の時刻を表示hwclock -w(--systohc):システムクロックを RTC に書くhwclock -s(--hctosys):RTC をシステムクロックに読み込む
>>5
systohc と hctosys、どっちがどっちか分からんようになる
>>6
sys が system clock、hc が hardware clock。「to」の後ろが書き込まれる側。systohc はシステムからハードウェアへ
>>5
RTC は UTC で持つのが普通で(--utc)、Windows と一緒に使うマシンは地方時(--localtime)にすることがある。どっちかは /etc/adjtime の3行目に UTC か LOCAL で書かれる
試したマシンはコンテナで /dev/rtc0 も /etc/adjtime もなくて、hwclock は --help しか使えんかった
>>2
date コマンドでもできる?
>>9
date はシステムクロックの表示と設定。date -u で UTC、date +%s で起点からの秒数、date -s で設定(root)
systemd のシステムなら timedatectl で、ローカル時刻・UTC・RTC の時刻・タイムゾーン・同期できてるか(System clock synchronized)・NTP が動いてるか(NTP service)がまとめて出る
手で合わせても、またずれていくやん
>>11
それで NTP(Network Time Protocol)を使う。UDP の123番ポートで、正確な時計を持ったサーバーに問い合わせて合わせ続ける
サーバーは階層になってて、原子時計や GPS などの基準の時計が stratum 0、それに直接つながったサーバーが stratum 1、そこから合わせたのが stratum 2…
>>12
水晶の時計は少しずつずれる。1 ppm(100万分の1)ずれると、1日で
>>12
どこのサーバーを使えばええん
>>14
公開されてるのが pool.ntp.org。ディストリビューションごとの名前もあって、Debian の chrony の設定は pool 2.debian.pool.ntp.org iburst、ntpsec(ntpd)の設定は 0〜3.debian.pool.ntp.org の4行やった(パッケージの中のファイルを確認)
iburst は、最初に何回か続けて問い合わせて早く合わせる指定
>>15
chrony と ntpd、どっちを使うん
>>16
今の Red Hat 系の既定は chrony。設定は /etc/chrony.conf(Debian は /etc/chrony/chrony.conf)、デーモンは chronyd、確認は chronyc sources や chronyc tracking
ntpd は昔からのもので、設定は /etc/ntp.conf(ntpsec は /etc/ntpsec/ntp.conf)、確認は ntpq -p。どっちも、行頭の * が今合わせてる相手
軽いクライアントだけでいいなら systemd-timesyncd もある
>>17
大きくずれてると、合わせ方が変わるって聞いた
>>18
少しのずれなら、時計の進み方を少しずつ変えて合わせる(時刻が飛ばないように)。大きいと一気に合わせる
Debian の chrony.conf にある makestep 1 3 は、最初の3回の更新までは1秒より大きいずれを一気に直す設定
起動のときに一度だけ合わせる昔の方法が ntpdate。今は chronyd -q や ntpd -gq で代わりになる
>>19
NTP で合わせた後、RTC にも書いとかんと、次に起動したときにまたずれるんちゃう?
>>20
chrony の rtcsync の設定(Debian の chrony.conf にも入ってる)で、カーネルが定期的に RTC を合わせる。なければ hwclock -w
>>3
時計はシステムと RTC の2つ、hwclock の systohc と hctosys、合わせ続けるのは UDP 123 の NTP、確認は chronyc sources か ntpq -p。数分のずれは RTC やったんやな
管理人のひとこと
- システムクロック(カーネル)とハードウェアクロック(RTC、電池で動く)がある。起動時に RTC からシステムクロックを設定する。
- hwclock:-r(--show)表示、-w(--systohc)システム→RTC、-s(--hctosys)RTC→システム、--utc・--localtime。RTC が UTC か地方時かは /etc/adjtime に記録される。date はシステムクロックの表示と設定(-u、-s)。timedatectl でまとめて確認できる(set-ntp で NTP の有効化)。
- NTP は UDP 123。stratum 0 が基準の時計、1 がそれにつながったサーバー。公開サーバーは pool.ntp.org(iburst で早く合わせる)。
- chrony(chronyd、/etc/chrony.conf、
chronyc sources・chronyc tracking)と ntpd(/etc/ntp.conf、ntpq -p)。* が同期中の相手。ntpdate は一度だけ合わせる昔のコマンド。systemd-timesyncd は軽いクライアント。