UTCにするかJSTにするか、それが問題だ

システムクロックをUTCにするかJSTにするか。ほとんどの場合は気にしない。特にWindowsオンリーユーザの場合は気にしたこともないと思う。
悩ましいのはLinuxと混在した環境の場合だ。私の場合はWindowsLinuxは別々で使っていたので余り気にしていなかったが、いつも使うWindowsマシンを“たまに”Linuxで使う場合に適宜補正していたくらいだ(“Linuxで日本標準時(JST)を協定世界時(UTC)として設定する”参照)。
ところが、iSCSIでブートできる環境を整えてしまったので、LANにつながったマシンであれば、任意のマシンをiSCSIに対応した任意のOSでブートできるようになった(“Windows 7をディスクレスで使う”参照)。そうなるとイチイチ時計の設定を変える訳にもいかず、UTCJSTかに統一する必要が出てきた。特に同じ“マシン”を物理的なPCで動かしたり仮想マシンで動かしたりするとどちらかに統一しないといけない。
で、調べて見るとWindowsLinuxも設定でシステムクロックをUTCと見るかJSTと見るか選択出来るようになっていた。もっともWindowsの場合は設定画面はなく、レジストリをいじらないと設定はできないが、それでも以前のWindowsに比べれば格段の違いだと思う(し、設計思想的には実はUTCを標準としている感じられる節がある。)
WindowsLinuxもどちらでも設定できるとなると、UTCJSTのどちらを“我が家の標準”として採用するのか、それが問題だ。結論から言えばどちらもで構わないわけで、あとは好みの問題だろう。
私は世界中で動いているPCのシステムクロックは本来、同じ“時刻”であるべきだと“思う”。マシンの気持ちとしては“どこで”動いているかは気にならない。気にするのはそのPCを使っている人間だけの問題だ。従って、システムクロックはUTCとして、その時刻を表示する時に、そのPCが現在動作している場所に合わせて表示すべきだと考える(もちろん、別の考え方の人もいっぱいいると思う)。
で、私の環境ではUTCに統一することにした。

WindowsUTCに設定する方法

参考:http://coreblog.atikoro.net/iyoda/128 (現在のところGoogle検索のトップ)
このページに書いてある通り。レジストリ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
に値 DWORD で“RealTimeIsUniversal”を作成する。値が“1”の場合にシステムクロックをUTCと見る。設定後、リブートすればUTCとして動作する。
今のところ1台のマシンで試しているが、特に問題は無さそうだ(OSは問題なくてもアプリケーションで何か弊害が出てこないか、暫く様子見の状態)。

Linuxの設定

Linuxでは以前からインストール時にUTCJST(ローカルタイム)かを選択できるようになっている。では、インストール後に変更するにはどうすればよいのか。
参考:http://blog.goo.ne.jp/tabitom2002/e/d3e109e62da68f7f29694174a8a03eeb
Google検索でトップというわけではないが、一番分かりやすかった。)
このページにある通り、/etc/default/rcS にある環境変数UTCを“yes”に変更する。(あと、/etc/localtimeがもしJSTでなければ、変更しなければならない。インストール時に地域は日本(=JST)であれば変更する必要はない。/etc/default/rcSUTC変数を変更するだけでOK。ただし、インストール時の地域が日本以外であれば、日本(もしくはPCを使っている場所)に変更する必要がある。このページではシンボリックリンクを張るように書いてあるが、私としてはシンボリックリンクを張るよりは/usr/share/zoneinfo/Japanを/etc/localtimeへコピーした方がベターだと思う。オリジナルの/etc/localtime自身がシンボリックファイルではなく独立したファイルだからだ。(Ubuntu 10.04の場合))
/etc/default/rcSを変更したら、

# ntpdate ntp.nict.jp
# hwclock -w

を実行してからリブートでOK。