Linux&FreeBSD ハードウェア設定

YAMAMORI Takenori ●yamamori

■コラム■ cdrecordの -pad オプションについて

cdrecordを使う場合は,-pad オプションを付けた方がいいでしょう. -pad を付けると,15セクタ(=15*2048byte)のゼロのデータが, ファイルシステムイメージのあとにさらに追加して書き込まれます.

実は,cdrecordで焼いたCD-Rを,/dev 以下のデバイスから ddコマンドなどで直接読み出すと,データの終了付近で デバイスドライバレベルのI/Oエラーが出て, その結果,データの最後の数セクタが読めないまま, ddコマンドが終了してしまいます. (ブロックサイズをいろいろ変えて試してもダメでした)

このため,-padオプションでCD-Rの後ろに余分なデータを追加しておき, その部分が読めなくても困らないようにしているわけです.

cdrecordのオンラインマニュアルには, "Linux system with the ISO-9660 filesystem read ahead bug" のような記述がありますが,筆者が試したところ, cdrecord以外で焼かれたCD-Rや,一般のCD-ROMについては, それをLinux上でddで直接読み出しても「先読みオーバーラン」はせず, 最後のセクタまでちゃんと読むことができました. 逆にLinuxやFreeBSD上でcdrecordで焼いたCD-Rは, それをLinuxやFreeBSDやSolaris/SunOSなどで読み出すと, 最後の部分でリードエラーが出ました. ただし,FreeBSDやSolaris 7では, エラーが出つつも最後のセクタまで読むことは読めました.

このことから,原因はcdrecordが物理的なデータの終了を CD-Rにちゃんと記録していないためではないかと考えています.

しかしながら,ddで読み出すのではなく, 普通にiso9660ファイルシステムとしてマウントして使う分には 問題ありません.念のため,焼き上がったCD-Rをマウントして, そのマウントポイントで,たとえば,

# tar cvf - . | wc

として,全ファイルを読み出してみて, 何もエラーが起きないことを確認できます.


To「Linux&FreeBSD ハードウェア設定」index


このページは、技術評論社 Linux×BSD HYPER PRESS Vol.2秋号、『もう困らない!Linux&FreeBSD ハードウェア設定テクニック』 の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 Home
yamamori