Solaris/Linux/FreeBSDでCD-Rを焼こう

YAMAMORI Takenori ●yamamori
■コラム■「厄介なタイムゾーン」

UNIXのファイルシステムでは,ファイルのタイムスタンプはUTCで記録されます. 一方,DOS/Windowsなどでは,ローカルタイム(日本では日本時間)で記録されます. では,ISO9660ではどうかというと,フォーマット上はどのタイムゾーンの タイムスタンプででも記録できます.そして,どのタイムゾーンで記録したかを示す, 15分単位のオフセットデータも同時に記録されます.

ここで,このオフセットデータの扱いに問題があるのです. 具体的には,Linuxのkernel-2.0.xで,このオフセットを引き算しなければ ならないところを間違えて足し算しているのです.

●Linux kernel-2.0.x ソースの問題箇所
/usr/src/linux/fs/isofs/util.c より
/* timezone offset is unreliable on some disks */
if (-48 <= tz && tz <= 52)
  crtime += tz * 15 * 60;
         --
         ここは += ではなく -= でなければならない

このため,日本時間(JST)で記録されたCD-ROMをLinux kernel-2.0.xで読むと, タイムスタンプが18時間進んで表示されます.(UTCとJSTの差の9時間の2倍)

また,SunOS 4.xでは,タイムゾーンのオフセット自体に対応しておらず, タイムスタンプが9時間進んで見えます.

もちろん,Linuxならkernel-2.2.x以降を使えばよいのですが, 問題は,タイムゾーンオフセットを正常に扱えないOSも すでに普及してしまっていることです. 「あらゆるOSで同じように読めるようにしたい」という考えから, タイムゾーンはUTCで記録するのが適当であると思います.


関連ページ:
コラム「CD-Rはタイムゾーンに注意

To 『Solaris/Linux/FreeBSDでCD-Rを焼こう』index


このページは、技術評論社 SoftwareDesign 2000年6月号、『CD-R/CD-ROM完全ガイド』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 Home
yamamori