top page > PC unix > here

timezone


概要

FreeBSD と Linux とを multi boot で使う場合に,時刻を合わせる方法を提示します.

検討した環境は次のようなものです.

  1. FreeBSD は 8.4, 11.2, 12.0 です.
  2. Linux は Ubuntu Linux 16.04, 18.04 です.

目次

1. はじめに
2. RTC を local time (JST) にする
3. RTC を UTC にする
4. FreeBSD における timezone の変更

1. はじめに

うちの NP25S は,SATA HDD の FreeBSD と USB HD の Ubuntu Linux とを切り換えて使っております. FreeBSD の方には FLASH を入れていないので,これが必要な場合には Linux を使います.

この場合,両者の時刻を合わせるために調査も含めて少々手間がかかりましたので,ここにその結果を記します.

問題なのは,OS によって RTC の扱い (この時刻が何を指すか) に差異があることです. default では Linux は UTC,Windows は local time です. FreeBSD はどちらが default かは定まっておりません.[1][2]

したがって,1 台の PC に複数の OS を共存させる場合,RTC の扱い方を変更できるか否かが問題になります.
(Windows は使っていないので,以下に提示するのは FreeBSD と Linux だけの例です.)

[1] local time として何を使うのかは別途設定します. 日本ならば JST を選びます.

[2] 略称されている用語の呼称.
  RTC (real time clock) 「PCのハードウェア時計」「BIOS 時刻」
  UTC (Coordinated Universal Time) 協定世界時
  JST (Japan Standard Time) 日本標準時 (UTC + 9:00)

2. RTC を local time (JST) にする

FreeBSD は,OS の install の際に「タイムゾーンの選択」のところで,次のように聞いてきます.

Is this machine's CMOS clock set to UTC? If it is set to local time,
 or you don't know please choose No here!

No ならば local time に設定されます.

Linux は,標準である UTC から local time に変更します.

Ubuntu Linux 16.04 では,/etc/default/rcS

UTC=no

と記すことにより RTC を local time とするように設定できました. 一方,18.04 ではこのファイルはなくなり,変更には timedatectl コマンドを使います.

% sudo timedatectl set-local-rtc 1

この操作の結果,設定は次のようになります.

$ timedatectl
                      Local time: Wed 2019-04-24 14:53:01 JST
                  Universal time: Wed 2019-04-24 05:53:01 UTC
                        RTC time: Wed 2019-04-24 05:53:01
                       Time zone: Asia/Tokyo (JST, +0900)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: yes    ← ここが no から yes に変わる.

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

Warning が気味悪いですね.「変えないでくれ」ということでしょう.

残念ながら,こう設定しても FreeBSD を起動した際に時刻が 9 時間遅れるのは直りません.[1] この原因は分かりません. したがって,この設定は選択できません.

[1] /etc/default/rcS で設定していた頃は,Warning も出ないし,FreeBSD の時刻も合っていました.

3. RTC を UTC にする

この場合,FreeBSD は「タイムゾーンの選択」のところで Yes を選びます. Linux はそのままで良いです.

この設定でうまく行くので,うちではこうしております.

4. FreeBSD における timezone の変更

FreeBSD には Linux の timedatectl に相当するコマンドはありません. RTC は,ファイル /etc/wall_cmos_clock が存在しなければ UTC,存在すれば local time です.

従って,RTC を local time から UTC に変えるには次のようにします.

# cd /etc
# mv wall_cmos_clock wall_cmos_clock.bak

もちろん rm しても良いのですが,元に戻す際にファイル名を調べるのが面倒でしょう.

また,UTC から local time に変えるには次のようにします.

# cd /etc
# mv wall_cmos_clock.bak wall_cmos_clock
または
# touch wall_cmos_clock