2017/11/20(月) [n年前の日記]
#3 [linux] 自宅サーバの時計がおかしくて悩んだり
自宅サーバが、2017/11/20 01:30頃に何故か勝手に再起動していて首を捻ったのだけど、それはさておき。
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
時刻を確認。
ntpの状態は以下のような感じ。
ハードウェアクロックに、現在時刻を設定してみる。
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
# cat /etc/vine-release Vine Linux 6.5 (Poupille)
時刻を確認。
# date 2017年 11月 20日 月曜日 07:55:46 JST # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511128259 秒時点で行なわれました 直前の調整は 1969 年以降 1511128259 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 22:55:52 ハードウェア時計時刻 : 2017/11/19 22:55:52 = 1969 年以来 1511099752 秒 2017年11月19日 22時55分52秒 -0.203008 秒ハードウェアクロックが、ちょうど9時間ずれてる。おかしい。UTC絡みなのだろうか…?
ntpの状態は以下のような感じ。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -ntp1.plala.or.j 202.234.233.109 4 u 140 256 377 19.093 -4.844 0.514 -ntp2.plala.or.j 202.234.233.109 4 u 203 256 377 12.973 -3.774 0.957 +ntp1.jst.mfeed. 133.243.236.17 2 u 204 256 377 20.810 -1.036 0.505 *ntp2.jst.mfeed. 133.243.236.17 2 u 196 256 377 21.901 -0.961 0.599 +ntp3.jst.mfeed. 133.243.236.17 2 u 91 256 377 18.489 -0.653 0.717 LOCAL(0) .LOCL. 10 l 59m 64 0 0.000 0.000 0.000
ハードウェアクロックに、現在時刻を設定してみる。
# date 2017年 11月 20日 月曜日 08:28:08 JST # hwclock --systohc --localtime --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511132257 秒時点で行なわれました 直前の調整は 1969 年以降 1511132257 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 23:28:23 ハードウェア時計時刻 : 2017/11/19 23:28:23 = 1969 年以来 1511101703 秒 Time elapsed since reference time has been 0.004853 seconds. Delaying further to reach the new time. ハードウェア時計を 08:28:23 に設定 = 1969 年以来 1511134103 秒 ioctl(RTC_SET_TIME) に成功しました。 前回の調整以来、少なくとも一日経過しないと、ずれを修正できません。 # hwclock --show ; date 2017年11月20日 08時29分18秒 -0.351335 秒 2017年 11月 20日 月曜日 08:29:18 JST設定できたように見えるけど、しばらくするとまた時間がずれる。何故。
◎ 関係ありそうなファイルを確認。 :
# strings /etc/localtime TZif2 JCST TZif2 JCST JST-9
# cat /etc/sysconfig/clock ZONE="Asia/Tokyo" UTC=false ARC=false
# cat /etc/adjtime 0.018596 1511134103 0.000000 1511134103 LOCAL
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
◎ 「11分モード」なるものがあるらしい。 :
以下のページを眺めてたら、「11 minute mode(11分モード)」なるものがあると知った。11分毎にハードウェアクロックを再設定してしまう機能がカーネルにあるらしく、ソレを利用してntpサーバがハードウェアクロックを設定してしまう時があるそうで。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
# ntptime | grep status status 0x2001 (PLL,NANO),UNSYNC の表記が無いので、11 minute mode(11分モード)が有効になっているらしい。つまりウチの自宅サーバは、ntpd だかカーネルだか分からんけど、11分毎にハードウェアクロックが上書きされてしまう模様。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
vi /etc/adjtime 3行目をUTCに
vi /etc/sysconfig/clock UTC=true に
hwclock --systohc --utc --debug # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511139353 秒時点で行なわれました 直前の調整は 1969 年以降 1511139353 秒時点で行なわれました ハードウェア時計はUTC時刻です ハードウェア時計UTC時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/20 00:59:18 ハードウェア時計時刻 : 2017/11/20 00:59:18 = 1969 年以来 1511139558 秒 2017年11月20日 09時59分18秒 -0.768737 秒
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
◎ hwclockについて。 :
- hwclock -w と hwclock --systohc は同じ。ハードウェアクロックを設定する。
- hwclock -r と hwclock --show は同じ。ハードウェアクロックを読み出す。
- --debug をつけると、詳細を表示してくれる。
- --utc をつけると UTC として扱い、--localtime をつけるとローカルタイムとして扱う。
[ ツッコむ ]
以上です。