Armadilloフォーラム

ArmadilloのRTCの動作について

ikegami

2019年1月22日 14時58分

お世話になっております。

overlayfs中に下記の順で動作を行ったところ、
日時が大幅にずれておりました。

・RTCのバックアップ電池を装着
・date -sコマンドで日時設定(2019年を設定)
・Armadilloの通電OFF
・5分経過
・Armadilloの通電ON
・dateコマンドで日時が正しいことを確認
・Armadilloの通電OFF
・2,3日経過
・Armadilloの通電ON
・dateコマンドで日時が2016年と表示される

RTCのバックアップ電池は装着後一度も外しておりませんが、
日時が大幅にずれる可能性はあるのでしょうか?

コメント

中村です。

> overlayfs中に下記の順で動作を行ったところ、
> 日時が大幅にずれておりました。
...
> ・dateコマンドで日時が2016年と表示される

この表示になったとき、
ブート時のRTCのメッセージのはどうなっていますか?
次のようなものが表示されていると思います。
bmic_rtc 3-0011: setting system clock to 2019-01-22 09:34:43 UTC (1548149683)

G3のOSはDebian9(stretch)でしょうか?
Debian9(stretch)の場合、標準状態ならば、
/var/lib/systemd/clockというファイルがあると思います。
このファイルのoverlayfsの元の
/overlay/system/var/lib/systemd/clock
のタイムスタンプはどうなってますか?

--
なかむら

中村様、ご回答ありがとうございます。

> この表示になったとき、
> ブート時のRTCのメッセージのはどうなっていますか?
> 次のようなものが表示されていると思います。
> bmic_rtc 3-0011: setting system clock to 2019-01-22 09:34:43 UTC (1548149683)
一度発生後、何回か確認しましたが再現できておりません。
先ほど起動した場合は正しい日時がセットされておりました。
bmic_rtc 3-0011: setting system clock to 2019-01-23 00:45:31 UTC (1548204331)

> G3のOSはDebian9(stretch)でしょうか?
Debian9(stretch)を使用しております。

> Debian9(stretch)の場合、標準状態ならば、
> /var/lib/systemd/clockというファイルがあると思います。
> このファイルのoverlayfsの元の
> /overlay/system/var/lib/systemd/clock
> のタイムスタンプはどうなってますか?
-rw-r--r-- 1 systemd-timesync systemd-timesync 0 Nov 4 2016 /overlay/system/var/lib/systemd/clock
-rw-r--r-- 1 systemd-timesync systemd-timesync 0 Nov 4 2016 /var/lib/systemd/clock
となっております。

以上、よろしくお願いいたします。

中村です。

> 一度発生後、何回か確認しましたが再現できておりません。
> 先ほど起動した場合は正しい日時がセットされておりました。

なんでしょうかね。原因が気になりますよね。

> -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Nov 4 2016 /overlay/system/var/lib/systemd/clock
> -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Nov 4 2016 /var/lib/systemd/clock

最初の質問にあった
>> ・dateコマンドで日時が2016年と表示される
は、このファイルの時刻だと思います。

Debian9(stretch)のG3ではsystemd-timesyncdというのが動いていて
(Debian8/jessieのG3にもsystemd-timesyncdがインストールされて
いましたが、Enableされていませんでした)、
systemd-timesyncdが起動時に、現在時刻がこのファイルの
タイムスタンプよりも過去のとき(RTCがバックアップされてない
などのときです)、このファイルのタイムスタンをシステムに
設定しているようです。

systemd-timesyncdは定期的にNTPで時刻同期をしていて、
その最終時刻がこのファイルのタイムスタンプとして保存され、
(シャットダウンのときにもファイルのタイムスタンプを
更新しているのかもしれませんが、調べてません)
再起動時に上に書いたように使われるのですが、
overlayfsのときはファイルのタイムスタンプが再起動で戻ってしまいます。

この動作を確認は、RTCのバッテリを外して(ネットも非接続で)、
/overlay/system/var/lib/systemd/clockのタイムスタンプを
touchコマンドなどで変更して再起動すればいいと思います。

--
なかむら

中村様、ご回答ありがとうございます。

> なんでしょうかね。原因が気になりますよね。
今度は通電OFFの時間を長くして何回か実施し、再現するか確認してみます。

> systemd-timesyncdが起動時に、現在時刻がこのファイルの
> タイムスタンプよりも過去のとき(RTCがバックアップされてない
> などのときです)、このファイルのタイムスタンをシステムに
> 設定しているようです。
上記の仕様から、RTCの日時が2016年以降に戻ってしまったと考えられます。
dateコマンドでの古い日時のセットやRTCのバックアップ電池を外す以外に
RTCの日時が2016年よりも古くなることはあり得るのでしょうか?

以上、よろしくお願いいたします。

中村です。

> dateコマンドでの古い日時のセットやRTCのバックアップ電池を外す以外に
> RTCの日時が2016年よりも古くなることはあり得るのでしょうか?

2016年というのが/var/lib/systemd/clockのタイムスタンプだとして、
何かの誤動作や不具合でセットされてしまう以外では、
通常の動作では、そうなることはないように思います。

--
なかむら

中村様、ご回答ありがとうございます。

事象が発生したArmadilloを確認しておりましたところ、
Debian9(stretch)を使用しているのにもかかわらず、「hwclock-save.service」のファイルが存在しておりました。
(元々Debian8を使用しており、Debian9を展開したときに古いファイルが残ったままとなっておりました。)

Debian9にて「hwclock-save.service」を使用すると今回の事象が発生する可能性はあるのでしょうか?

中村です。

> 事象が発生したArmadilloを確認しておりましたところ、
> Debian9(stretch)を使用しているのにもかかわらず、「hwclock-save.service」のファイルが存在しておりました。
> (元々Debian8を使用しており、Debian9を展開したときに古いファイルが残ったままとなっておりました。)

私のG3(Debian9/stretch)で systemctl list-unit-files を見てみたところ、
hwclock.serviceは存在しています。
存在はしていますが、maskedになっています。

> Debian9にて「hwclock-save.service」を使用すると今回の事象が発生する可能性はあるのでしょうか?

存在していても動作していなければ影響はないと思いますが、
動作している場合にどうなるかは、知りません。

Debian8/jessieで起動して systemctl list-unit-files を見てみると、
hwclock関連は次の3つがありました。

hwclock-save.service                       enabled
hwclock.service                            masked
hwclockfirst.service                       masked

--
なかむら

中村様、ご回答ありがとうございます。

>
> Debian8/jessieで起動して systemctl list-unit-files を見てみると、
> hwclock関連は次の3つがありました。
>

> hwclock-save.service                       enabled
> hwclock.service                            masked
> hwclockfirst.service                       masked
> 

>
私の環境(Debian9/Stretch)で「systemctl list-unit-files」を実行したところ
hwclock-save.service enabled
hwclock.service masked
hwclockfirst.service masked
となっておりましたので、動作してしまっております。

Debian9で「hwclock-save.service」がなくなっており、
デフォルトのRTCへの保存方法が変更されております。
「Debian9」では何か問題があるので、デフォルトの保存方法が変更となったのでしょうか?

以上、よろしくお願いいたします。

中村です。

> Debian9で「hwclock-save.service」がなくなっており、
> デフォルトのRTCへの保存方法が変更されております。
> 「Debian9」では何か問題があるので、デフォルトの保存方法が変更となったのでしょうか?

その理由が何なのかは知りません。

--------------------------
1つ前の私の投稿で、hwclock-save.serviceとhwclock.serviceとが
ごっちゃになっていたところがありましたので、訂正しておきます。
(言いたかったことはご理解いただけているようですが)

>> 私のG3(Debian9/stretch)で systemctl list-unit-files を見てみたところ、
>> hwclock.serviceは存在しています。
>> 存在はしていますが、maskedになっています。
この最後の2行のところを次のように訂正します。
hwclock-save.serviceは存在しませんでした。
hwclock.serviceというものが存在していますが、maskedになっています。

--
なかむら