CDRecord/2の使い方

(2001.01.09/2006.08.16upd)

CDRecord/2の使い方

CDRecord/2はGNUのCDRecordをOS/2に移植したもので、非常に素直なツールだが、インストール法も使用法も決して簡単ではない。特に、ドキュメンテーションは(多くのGNUツールがそうであるように)非常にわかりにくい。プレーン・テキストで一人の手によって編集された総括的なドキュメントがないので、情報へのアクセスに苦労する。

●対応機種

今ひとつはっきりしない(対応機種一覧がどこに書いてあるのかわからなかった)。基本的にSCSIドライブ用のツールだが、ATAPIに関しても一種のエミュレーションで対応しているようだ。一般的なSCSIやATAPIのドライブならばほとんど対応可能ではないかと思う。少なくとも、PanasonicのSCSIドライブ(型番失念)とRICOH RW7060A(ATAPI)で動作を確認している。また、Warp 3.5上での動作も確認している。

●インストールに必要なもの

CDRecord/2本体
CDRecord/2のほか、各種のツールが付属している。Hobbes(http://hobbes.nmsu.edu/)などから入手可能。バージョンは2.0が最終安定版みたい。

ASPIROUT.SYS
ASPI router(SCSIのドライバみたいなもの)。これをCONFIG.SYSに組み込まないとCDRecordがSCSI用CD-R/RWを認識しない。Hobbes(http://hobbes.nmsu.edu/)などから入手可能。

DANIATAPI.FLT
ATAPI用のドライバ。ATAPIのCD-R/RWを使用するときには必須。SCSIドライブならば不要。Hobbes(http://hobbes.nmsu.edu/)などから入手可能。

OS2ASPI.DMD
これはOS/2 Warpの\OS2\BOOTの中にあるので、特別に用意する必要はない。

EMX 0.9d Fix2以降
Unixのツールを実行するためのDLL。\OS2\DLLなどに入れる。Hobbes(http://hobbes.nmsu.edu/)などから入手可能。

●インストール手順

基本的に、入手したZIPファイルを適当なディレクトリに解凍するだけでよい。むしろ問題は、ASPIドライバのインストール。SCSIドライブの場合は、CONFIG.SYSに以下ような2行を追加して再起動を掛ける(ASPIROUT.SYSをD:\OS2\BOOT\に入れてある場合)。
 BASEDEV=OS2ASPI.DMD /ALL
 DEVICE=D:\OS2\BOOT\ASPIROUT.SYS
また、ATAPIの場合は次のようにする。
 REM BASEDEV=CMDATAPI.FLT
 ...
 BASEDEV=DANIATAP.FLT   ←本来はDANIATAPI.FLTだが8文字に切り詰め
 BASEDEV=OS2ASPI.DMD /ALL
 DEVICE=D:\OS2\BOOT\ASPIROUT.SYS
ここで、重要なポイントが二点ある。一つは、OS/2の標準ドライバであるCMDATAPI.FLTを必ず無効にして、DANIATAPI.FLTを組み込むこと。もう一つは、「DANIATAPI.FLT」はファイル名が9文字あるため、FAT上では「DANIATAP.FLT」などように切り詰めて使うこと。このとき、CONFIG.SYS内でファイル名を間違うとドツボにはまるので注意。

なお、ドライバの組み込みが成功すれば、CDRecord/2がCD-R/RWドライブを認識できるようになる。

 cdrecord -scanbus
を実行して、接続したドライブが認識されているかどうかを確認する。このとき、SCSI-IDなどが表示されるが、この情報は後で必要になる。

●焼き込み手順の概要

CD-Rを焼く手順は大きく分けて、二つのステップを踏む。
 (1)焼き込むファイルのイメージを作成する → mkisofs.exeを使う
 (2)イメージファイルをCD-Rに焼きこむ   → cdrecord.exeを使う
通常のGUI版のCD-R書き込みツールは、この二つのステップを自動的に実行してくれるが、コマンドライン版のCDRecordではそれぞれを手作業で実行する必要がある。しかも、オプションが非常に多いのでかなり面倒だ。焼き込む設定が決まったら、REXXスクリプトで自動化すると便利だろう。

なお、こうした手間を省くためのGUIインターフェース(GUI for CDRecord/2など)も発表されているので、試してみるとよいかもしれない。もっとも、ユーザーインターフェースが直感的でなく、安定性にもかなりの疑問がある。私はやはりREXXで自動化する方が便利だと思う。

以下では例として、マルチセッションのロングファイル名対応のCD-Rを焼く手順を説明する。なお、マルチセッションのCD-Rを焼くというのは、ユーザーにとっては当然のことだが、CDRecordでは決して既定のことではなく、各種のオプションを必要とするので覚悟のこと。

●mkisofsでイメージファイルを作成する

▼ドライブの識別番号の取得
まず初めに、ドライブの識別番号を入手する。CDRecord/2では、ドライブをドライブレターで指定するのではなく、「SCSIバスの番号,SCSI-ID,LUN」で指定する。この情報はさきほどの、
 cdrecord -scanbus
で入手できる。たとえば、一般的なSCSIカードを使って、SCSI-ID=6にCD-Rが接続されていれば、識別子は「0,6,0」になる。また、ATAPの場合は「0,1,0」となる。この情報がないと、cdrecordによる焼き込みができないのはもちろん、mkisofsによるマルチセッション用のイメージファイルの作成もできない。

▼最も基本的なイメージ作成
次に、焼き込むファイルのイメージを作成する。たとえば、E:\CDIMAGEというディレクトリの中に焼きたいファイルやディレクトリがあり、ここからcdimage.rawというファイルを作成する場合には、次のようにする。なお、この場合、E:\CDIMAGEがCD-Rのルートディレクトリに相等する。末尾の/に注意。
 mkisofs -o cdimage.raw e:/cdimage/
なお、CDRecord/2はデフォルトでロングファイル名に対応していない。そのため、8.3を越えるファイル名は適宜リネームされてしまう。また、この使い方では追記も不可能。

また、イメージファイルの作成時にはディレクトリ構造に関する制限にも注意のこと。よく憶えてないが、ディレクトリの階層数にも、ディレクトリ内のファイル数にも制限があったはず。ファイルが450あるディレクトリを焼こうとしたら、エラーが出てしまったことがある。そこで、250ファイル以内の2つのディレクトリに分割したら問題なく書き込めた。

▼ロングファイル名への対応
8.3ルールを越えるロングファイル名に関しては、いくつかの対応方法がある。一つはWindowsのjoliet形式で、多分、これが一番汎用性が高いと思われる。これは、ISO 9660上位互換の規格で、8.3名とロングファイル名の両方を書き込むため、8.3システムでも読めるのが特長。ただし、ウチのWarp 3.5では8.3名しか読めない(同じファイルがWindows 98SEできちんとロングファイル名表示される)。一応、joliet対応のドライバを使用しているはずなのだが…というので、OS/2メインのユーザーにはお薦めしにくい。joilet用のオプションは-J(128バイトまで)または-joliet-long(206バイトまで)。
 mkisofs -o cdimage.raw -J e:/cdimage/        unicode 64文字まで
 mkisofs -o cdimage.raw -joliet-long e:/cdimage/   unicode 103文字まで

もう一つは、ISO 9660に則った拡張。そもそも、ISO 9660はDOSにあわせて8.3ルールを採用していただけで、規格としては31文字までのファイル名が使用可能だった。そこで、規格本来の機能を使用するのが-l(小文字のエル)オプション。これはOS/2でも問題なくロングファイル名表示をできるのだが、jolietに比べると文字数の制限がきついのと、互換性に関する保証がない。一応、OS/2でもWindowsでもロングファイル名が表示できることは確認しているが、多分、DOSでは無理だろう。

 mkisofs -o cdimage.raw -l e:/cdimage/        半角31文字まで
また、-allow-lowercaseオプションを併用すると、大文字・小文字センシティブにもできる。hpfsのファイルを保存するときにはこちらが便利。ただし、小文字表記が可能になるだけでなく、大文字とは別物として扱われる。そのため、OS側で判別できずに混乱することもある。両刃の剣。
 mkisofs -o cdimage.raw -l -allow-lowercase e:/cdimage/  大文字・小文字を区別
なお、ロングファイル名に関しては、セッション毎に異なる指定が混在していてもよいようだ。たとえば、track1が8.3、track2がjoliet、track3が拡張iso9660なども可能らしい。

  このほか、Mac(HFS)やLinux(RockRidge)のファイルシステムに対応したオプションもあるようだが、当面私には無関係なので省略。なお、古いCDrecord/2にはHPFS対応の-hpfsnamesというオプションがあったはずだが、少なくともver 2.0では見当たらないようだ。

▼マルチセッションの追記
既に情報が書き込まれているCD-Rに、新たな情報を追記する場合は、少々面倒なことになる。というのは、追記がcdrecord(焼き込み)ではなく、mkisofs(イメージ作成)側の責任で行う作業だからだ。イメージ作成時に、CD-Rがどこに接続されているか、またCD-R上のどの位置から書き込むかを指定してやらなければならない。模擬的に書くと、次のような構文になる。
 【構文】mkisofs -o cdimage.raw -C (先頭位置) -M (デバイス識別子) e:/cdimage/
 【用例】mkisofs -o cdimage.raw -C 1,17885 -M 0,1,0 e:/cdimage/
このうち、デバイス識別子は前述のcdrecord -scanbusで取得できる。また、先頭位置の方は、使用するCD-Rをドライブにセットして、次のようなコマンドを実行すれば入手できる(デバイス識別子が0,1,0の場合)。
 cdrecord -msinfo dev=0,1,0
このコマンドで入手できるのは「,」で区切られた二つの整数で、「(前回セッションの先頭),(次回セッションの先頭)」を意味する。デバイス識別子は滅多に変更されないだろうが、この先頭位置情報は、追記のたびに変わる。したがって、追記の度にコマンドを実行して先頭位置情報を取得し、その情報をパラメータとして指定しなければならない。これはかなり面倒だ。そこで、こいつをREXXに任せると…
/* mkisofs                          */
/* デバイス識別子は0,1,0            */
/* 拡張ISO 9660ロングファイル名対応 */

'cdrecord -msinfo dev=0,1,0 > nt.dat'
nt=linein(nt.dat);
rc=stream('nt.dat','C','C');
say 'next track =' nt

IF nt=''
THEN
  'mkisofs -o cdimage.raw -l e:/cdimage/'
ELSE
  'mkisofs -o cdimage.raw -l -C' nt '-M 0,1,0 e:/cdimage/'
exit
てな具合になる(ファイルにパラメータを書き出すのはちょっと見苦しいけど)。この方法ならば1回目の書き込みと2回目以降が自動的に判別できて便利。また、イメージファイルは元ファイルとほぼ同じ大きさになるので、HDDに十分な空き領域を確保しておくこと。
▼mkisofsのパラメータのまとめ
-o 作成するイメージファイルの名前
-l 拡張ISO 9660ロングファイル名(半角31文字まで)
-allow-lowercase  大文字と小文字を区別する
-J joliet形式(unicode 64文字まで)
-joliet-long  joliet形式(unicode 103文字まで)
-C マルチセッションで追記する場合、書き始め位置を指定
-M マルチセッションで追記する場合、CD-Rのデバイス識別子を指定

※注意

●CDRecordによる焼き込み

焼き込み作業自体は、実はイメージ作成作業よりもずっと単純だ。面倒なパラメータ設定はイメージ作成時にすべて済んでいる。なお、注意すべき点は、マルチセッション指定(-multi)と、イジェクト指定(-eject)を忘れないこと。-eject指定はドライブによっては必須で、いったんメディアを排出しないと、書き込んだファイルが読めない場合がある。
【構文】cdrecord -v speed=(書込速度) dev=(デバイス識別子) -multi -eject -data (イメージファイル)
【用例】cdrecord -v speed=2 dev=0,1,0 -multi -eject -data cdimage.raw
これで数分〜数十分後に焼き上がる。

-v 画面にメッセージを表示する
speed= 書き込み速度(倍速指定)。当面は「2」くらいで。
dev= デバイス識別子。ATAPIなら「0,1,0」のことが多い。SCSIの場合は「0,(SCSI-ID),0」となる。
-multi マルチセッションで焼く(必須)
-eject 書き込み終了後にディスクをイジェクト(必須)
-data データCDを焼く(オーディオCDではない)

●REXXスクリプトのサンプル

/* CDRecord REXX script             */
/* デバイス識別子は0,1,0            */
/* ソースディレクトリはg:\cdimage   */
/* 拡張ISO 9660ロングファイル名対応 */
/* 大文字・小文字を区別する         */

'DEL nt.dat'
'DEL cdimage.raw'
'cdrecord -msinfo dev=0,1,0 > nt.dat'
nt=linein(nt.dat)
rc=stream('nt.dat','C','C');
say 'next track =' nt

IF nt=''
THEN
  'mkisofs -o cdimage.raw -l -allow-lowercase g:/cdimage/'
ELSE
  'mkisofs -o cdimage.raw -l -allow-lowercase -C' nt '-M 0,1,0 g:/cdimage/'

cdrecord -v speed=2 dev=0,1,0 -multi -eject -data cdimage.raw
exit

【逆襲のOS/2目次】 【ホーム】