Linux&FreeBSD ハードウェア設定 |
YAMAMORI Takenori ●yamamori |
mkisofsでISO9660のファイルシステムイメージを作成する場合は, 環境変数TZ=UTCにすることをお奨めします.それを省略すると, ファイルシステム内の各ファイルのタイムスタンプが, 日本時間で記録されてしまいます.
タイムスタンプがUTC以外で記録されている場合, 各OSや,そのバージョンによって,CD-Rを読み出した時の タイムスタンプが異なってしまうという現象がおきます.
mkisofs実行時のTZ | TZ=UTC | TZ=JST-9 -------------------+--------+------------ Linux kernel 2.0.x | 正常 | 18時間進む -------------------+--------+------------ Linux kernel 2.2.x | 正常 | 正常 -------------------+--------+------------ FreeBSD 3.2 | 正常 | 正常 -------------------+--------+------------ Solaris 7 | 正常 | 正常 -------------------+--------+------------ SunOS 4.1.4 | 正常 | 9時間進む -------------------+--------+------------
本来,UNIXのファイルシステムでは,すべてUTCで時刻が記録されています. それを,たとえば "ls -l" のようなコマンドでタイムスタンプを表示させた 時に,日本時間の場合は9時間プラスして表示しているのです.
ところが,ISO9660ファイルシステムでは,UTC以外の, たとえば日本時間のままでもそのまま内部データとして記録できます. その際には,「これは日本時間での(9時間進んだ)時刻」という情報も 同時に記録しています.
日本時間で記録されたCD-ROMを読み出す際には,カーネルが タイムスタンプから一度9時間引き,(ここでUTCになる) それを"ls -l"コマンドなどが,また9時間足して時刻を表示しているのです.
ところが,Linuxのkernel 2.0.xでは,上記の「一度9時間引く」処理を, 逆に「一度9時間プラス」しているのです! このバグにより,結果として時刻は18時間進んで表示されてしまいます.
また,SunOS 4.1.4では,そもそもISO9660がUTC以外で記録されていることに 対応していないらしく,カーネルは「何も足さず何も引かず」となります. その結果,"ls -l"の表示は9時間進みます.
このような経緯や事情があるため,CD-ROMとして汎用性を持たせるためには, TZ=UTCにて,mkisofsを実行するべきだと思います.
なお,CD-ROMをDOS/Windows上から読むと,9時間遅れて表示されますが, これはDOSとUNIXのファイルシステム間において,もともと存在する問題のため, これはこれでよしとします.
ちなみに,ファイルのタイムスタンプを秒単位まで表示するには, LinuxではGNUのfileutilsのlsを採用しているため,
$ ls -l --full-time
とし,FreeBSDでは,
$ ls -lT
とします.
To「Linux&FreeBSD ハードウェア設定」index