device は CD レコーダの scsibus/target/lun を指す。 SunOS での通信は汎用 SCSI ドライバ scg を用いて行われる。 他の OS では、このドライバをシミュレートするライブラリを使う。 使用可能な書式は、 dev= scsibus,target,lun または dev= target,lun である。 後者の場合、CD-R はマシンのデフォルトの SCSI バスに 接続されていなければならない。 scsibus, target, lun は整数である。 OS や SCSI 転送の実装のなかには、これに加えてデバイスファイル名を 指定しなければならないものもある。 この場合の正しい書式は、 dev= devicename:scsibus,target,lun または dev= devicename:target,lun である。 このようなシステムでは、指定されたデバイスノード名が 1 つの SCSI デバイスのみを参照している場合、 dev= devicename:scsibus,target,lun の代わりに、省略形の dev= devicename:@ または dev= devicename:@,lun を使うことができる。
リモートの SCSI デバイスにアクセスするためには、 リモートのデバイスであることを示すインジケータを SCSI デバイス名の前に付ける必要がある。 リモートデバイスのインジケータは REMOTE:user@host: または REMOTE:host: という形式である。
指定可能なリモート SCSI デバイス名は、 REMOTE:user@host: または REMOTE:user@host:1,0,0 という形式である。 1 つ目の形式では、リモートで SCSI デバイスのスキャンを行わせる。 2 つ目の形式では、 host の SCSI bus # 1,target 0 lun 0 に接続されている SCSI デバイスにアクセスする。
cdrecord を全ての UNIX 系プラットフォームで汎用的にするためには、 dev= devicename:scsibus,target,lun という書式が好ましい。 これによりデバイスについての各 OS 特有の知識を ユーザーに対して隠蔽することができる。 またこれにより、実際のデバイスファイル名や scsibus,target,lun を指定する方法を、特定の OS 上でサポートする必要がなくなる。
scsibus 0 はマシンのデフォルトの SCSI バスである。 マシンの SCSI 設定についてのより詳細な情報は、 ブート時のメッセージや /var/adm/messages を参照すること。 scsibus,target,lun にどのような値を指定してよいか分らない場合は、 以下に記述されている cdrecord の -scanbus オプションを使ってみること。
ファイル /etc/default/cdrecord が存在する場合、 dev= のパラメータはこのファイル中のドライブ名ラベルにもなる (「ファイル」セクションを参照)。
SVr4 互換のシステムでは、 cdrecord はリアルタイムクラスを使い、 可能な限りスケジューリング優先度を高くする (全てのカーネルプロセスより優先度を高くする)。 POSIX リアルタイムスケジューリング を備えたシステムでも、 cdrecord はリアルタイムスケジューリングを使う。 ただし、カーネルプロセスより高い優先度は得られない。
Track At Once モードでは、 各 track はそのトラックのデータが書かれた個別のファイルに対応する。 引き数が `-' の場合は標準入力がトラックとして使われる。 この場合は stdin (標準入力) から 1 つのトラックだけが読み込まれる。
一般オプションはトラックファイル名や トラックオプションより前に指定しなければならない。
このオプションは、少なくとも 1 つの閉じたセッションがあり、 セッションを追加できる (まだ閉じられていない) CD のみで動作する。 この操作に適さないディスクからマルチセッション情報を取得しようとした場合、 エラーメッセージを出すドライブもある。
cdrecord が最初のセッションの lead-in start time を取得できる場合、 メディアにかかれた製造者情報をデコードして表示しようとする。
fs= 引き数で指定されたサイズには、管理に必要な共有メモリの分も含まれている。 このメモリの大きさは、少なくとも 1 ページである。 fs= オプションが指定されていない場合、 cdrecord は fifo のサイズを環境変数 CDR_FIFOSIZE から取得する。 デフォルトの fifo サイズは、現在のところ 4 MB である。
fifo はリアルタイム書き込みプロセスのバッファを増やすために使われる。 これによって、 mkisofs と cdrecord をパイプで直接つないで動作させることができる。 fifo がアクティブで、かつ CD を作成するために mkisofs から cdrecord へのパイプを使った場合、 cdrecord が書き込みをする前に mkisofs が落ちると、 cdrecord はディスクの何も変更せずに終了する。 推奨される fifo サイズは 4 〜 32 MB である。 経験則として、fifo サイズは少なくとも CD レコーダの内部バッファのサイズと同じなければならない。 また、マシンで使用されている RAM の物理サイズの半分以下でなければならない。 fifo サイズが充分大きい場合、 fifo empty count が 0 で、fifo min fill が 20% 以上であるという fifo の統計情報が表示される。 fifo のためにあまり多くのメモリ量を使わない方がよい。 他に何もしていないマシンで、 CD を書き込むのに 8 MB 以上のメモリが必要になるのは、 マシンパワーが足りないか、ハードウェアに問題があるか、 設定が間違っている場合である。 (Sparcstation-2 などの) sun4c アーキテクチャでは、 1 プロセス当たりの MMU ページテーブルエントリは 16MB しかない。 sun4c では fifo に 14 MB 以上を使うと、 OS が MMU テーブルを絶えず再読み込みするために非常に時間がかかる。 Sun の新しいマシンでは、このような MMU のハードウェア問題はない。 PC ハードウェアがこの問題に影響されるかについての情報はない。
バッファアンダーランやそれと同様な問題があり、かつ fifo empty count が 0 であるという表示がされる場合は、 ハードウェア上の問題がある。 この場合、fifo のサイズは充分である。
Linux では、パラレルポートアダプタに接続されたデバイスは、 仮想 SCSI bus に対応付けされる。 別のパラレルポートアダプタは、 この仮想 SCSI bus の別の target に対応付けされる。
dev オプションが指定されていない場合、 cdrecord は環境変数 CDR_DEVICE からデバイスを取得しようとする。
dev= オプションの引き数に文字 ',', '/', '@', ':' がない場合、 ファイル /etc/default/cdrecord に書かれたラベル名として扱われる (「ファイル」セクションを参照すること)。
リストには cdr_simul と dvd_simul という 2 つの特別なドライバエントリがある。 これらのドライバエントリは、いろいろなスピードでのタイミングテストや、 -dummy オプションに対応していないドライバでのタイミングテストを 行うために作られている。 シミュレーションドライバは、バッファサイズが 1MB のドライブを実装している。 また、このバッファサイズは環境変数 CDR_SIMUL_BUFSIZE で変更できる。 シミュレーションドライバはバッファアンダーランも正しくシミュレートする。 -dummy オプションを指定すると、バッファアンダーランの場合でも終了しない。
トラックオプションはトラックファイル名と合わせて指定する。
ファイル名が .au または .wav で終る場合、ファイルは構造化オーディオファイルデータファイルとして扱われる。 この場合 cdrecord は、ファイルを Sun オーディオファイルまたは Microsoft .WAV ファイルと仮定して、 オーディオヘッダ情報以外をスキップしてオーディオデータを抽出する。 それ以外の場合は、オーディオデータストリームに ヘッダが含まれていないときにしか cdrecord は正常に動作しない。 多くの構造化オーディオファイルは 長さが (1/75 秒の) ブロックの倍数でないので、 -pad オプションも指定しなければならないことが多い。 cdrecord は .WAV ファイルのオーディオデータが Intel (リトルエンディアン) バイトオーダーで書かれていると認識して、 CD レコーダがビッグエンディアンのデータを必要としているときには、 データのバイト交換を行う。 cdrecord は、(1 秒あたり 44100 回の 16 ビットステレオサンプリングを行い PCM コーディングする) Red Book の必要条件を満たさない オーディオファイルの使用を拒否する。
他の構造化オーディオデータ形式を cdrecord の入力に使う場合は、 データの構造が上記の (ビッグエンディアンバイトオーダー) 構造であれば、 通常は動作する。 しかし、データ形式にヘッダが含まれている場合は、 トラックの開始時にクリック音が聞こえてしまうだろう。
cdrecord の詳細な出力には、入力データをレコーダが必要とする バイトオーダーに合わせるのために入れ換える必要があるかが表示される。 cdrecord は -swab フラグが実際にトラックに指定されているかどうかは表示しない。
-pad は -nopad によって無効にされるまで有効であり続ける。
以下の例では、CD レコーダがマシンのプライマリ SCSI バスに 接続されていると仮定している。 SCSI ターゲット ID は 2 に設定されている。
ファイル cdimage.raw にあるデータを使って単純な CD-ROM を 2 倍速で記録する:
cdrecord -v speed=2 dev=2,0 cdimage.raw
Rock Ridge 拡張された ISO 9660 ファイルシステムのイメージを作成する:
mkisofs -R -o cdimage.raw /home/joerg/master/tree
Solaris で CD を書き込む前に上の結果のファイルを検査する:
mount -r -F fbk -o type=hsfs /dev/fbk0:cdimage.raw /mnt
Linux では:
mount cdimage.raw -r -t iso9660 -o loop /mnt
以下のように続ける:
ls -lR /mnt
umount /mnt
システム全体のスピードが充分で、 ファイルシステムの構造がそれほど複雑でない場合、 cdrecord は ISO 9660 ファイルシステムのイメージを作成せずに実行できる。 単純にパイプラインで実行すればよい:
mkisofs -R /master/tree | cdrecord -v fs=6m speed=2 dev=2,0 -
このパイプラインを実行するために推奨される最小の fifo サイズは 4 MB である。 デフォルトの fifo サイズは 4 MB であるので、 別の fifo サイズを指定したい場合以外は fs= オプションを指定する必要はない。 システムに負荷がかかっている場合は、 mkisofs もリアルタイムクラスで実行すべきである。 mkisofs の優先度を上げるためには、コマンド
mkisofs -R /master/tree
を Solaris では
priocntl -e -c RT -p 59 mkisofs -R /master/tree
に、 UNIX International 互換のリアルタイムスケジューリングのないシステムでは
nice --18 mkisofs -R /master/tree
に変更する。
Solaris では cdrecord は優先度 59 で実行されるので、 mkisofs は優先度 58 以下で実行すべきである。 他のシステムでは nice -18 以上で mkisofs で実行すべきである。
Sparcstation-2 で Yamaha CDR-400 を使って ディスク上にファイルシステムイメージを置かずに CD-ROM を作成するテストを行ってみたが、 マシンに負荷がかかっていない場合でも 4 倍速では動作しなかった。 より高速なマシンでは、負荷がかかった場合でも 4 倍速で動作できるだろう。
track01.cdaudio, track02.cdaudio, ... というファイルに各トラックのデータがある場合に、 単純な CD-DA (オーディオ) を等速で記録するには:
cdrecord -v speed=1 dev=2,0 -audio track*.cdaudio
上の例が 2 倍速でできるかをチェックするためには、 dummy 書き込みオプションを使うこと:
cdrecord -v -dummy speed=2 dev=2,0 -audio track*.cdaudio
最初のトラックは ISO 9660 ファイルシステム cdimage.raw、 それ以外は track01.cdaudio, track02.cdaudio, ... というオーディオトラック、というようなミックスモード CD を記録するには:
cdrecord -v -dummy dev=2,0 cdimage.raw -audio track*.cdaudio
書き込みを始める前にトラックのサイズを知らせる必要がある ドライブを操作するには、最初に
mkisofs -R -q -print-size /master/tree
を実行し、次に
mkisofs -R /master/tree | cdrecord speed=2 dev=2,0 tsize=XXXs -
を実行する。 ここで XXX は先に実行した mkisofs の出力で置き換える。
オーディオ CD を最も正確な方法で複製するには、 最初に
cdda2wav -v255 -D2,0 -B -Owav
を実行し、次に
cdrecord -v dev=2,0 -dao -useinfo *.wav
を実行する。
ラベルに続く行には、タブで区切られたアイテムのリストが書かれる。 今のところ、ドライブの SCSI ID・ドライブのデフォルトの速度・ デフォルトの FIFO サイズ、という3 つのアイテムが認識される。 speed と fifosize の値を -1 に設定すると、cdrecord はグローバルのデフォルト値を使う。 典型的な例としては以下のようものである:
teac1= 0,5,0 4 8m
yamaha= 1,6,0 -1 -1
これは cdrecord に対して、 teac1 という名前のドライブが scsibus 0, target 5, lun 0 にあり、 速度を 4 倍速、FIFO サイズを 8 MB にすることを指示する。 2 番目のドライブは scsibus 1, target 6, lun 0 にあり、 デフォルトの速度とデフォルトの FIFO サイズを使う。
Solaris において USCSI フォールバック SCSI 転送コードを使いたい場合は、 ボリューム管理を停止する必要がある。 ボリューム管理が動作していると、 cdrecord -scanbus すらも動作しない。
Track At Once モードで作られたディスクは、CD 製造業者によって 大量生産される製品のマスタには向いていない。 このようなディスクを記録するには disk at once オプションを指定する必要がある。 Track At Once で作られたディスクは、通常はどの CD プレーヤでも読めるが、 古いオーディオ CD プレーヤのなかには オーディオトラックの間に 2 秒間のクリック音を出してしまうものもある。
トラックの最小サイズは 4 秒または 300 セクタである。 これよりも小さいトラックを書き込んだ場合、 CD レコーダがダミーブロックを追加する。 これが SCSI エラーメッセージに現れたとしてもエラーではない。
cdrecord は、SparcStation 20/502 上のアップグレードされた Philips CDD-521 レコーダで 等速と 2 倍速でテストして問題がなかった。 もっと遅いコンピュータシステムでも動作するだろう。 Philips/HP/Plasmon/Grundig の新しいドライブでも、 Yamaha の CDR-100 と CDR-102 でも動作する。 Plasmon RF-4100 でも動作するが、マルチセッションについてはテストしていない。 アップグレードされていない Philips CDD-521 では動作しない。 Sony CDU-924 をテストしたが、ハードウェアが XA-mode2 に対応していない。 よって Sony 製ドライブでは適合した マルチセッションディスクを作成することはできない。 Ricoh RO-1420C でも動作するが、 speed=2 で使うと問題が発生することがあるようなので、 このような場合には speed=0 を試してみること。
Yamaha CDR-400 や SCSI-3/mmc に適合した全ての新しいドライブは、 シングルセッションとマルチセッションに対応している。
不明なシステム上で cdrecord を使う場合は、 -dummy オプションをオンにして、ドライブでサポートされている 全ての速度について何回かテストすべきである。 CD の書き込みはリアルタイムプロセスである。 NFS は必要とされるデータ転送率を絶えず提供するわけではない。 NFS でマウントされたファイルシステム上にある CD イメージを cdrecord で使いたい場合は、fifo サイズが充分大きいこと確認すること。 cdrecord を SS20/502 において中間的な負荷状態で使用したことや、 Sparcstation-2 においてかなりの負荷状態で 4 倍速で使用したこともあるが、 CD を書き込むときはシステムの負荷を出来る限り軽くしておくことを勧める。 読み込み元のディスクが原因でバッファアンダーランが起こっていないことを 確認したいなら、コマンド
cdrecord -dummy dev=2,0 padsize=600m /dev/null
を実行して、全てをダミーデータから作ったディスクを作成すればよい。 cdrecord は、 /dev/scg? デバイスノードにアクセスして、 プログラム自身をメモリ内にロックできるように、 root で実行する必要がある。
システム上でユーザーが root になるのを許可したくない場合は、 cdrecord を root に suid することで安全にインストールできる。 これにより、root 権限を持たない全てのユーザーやユーザーのグループが cdrecord を使うことができる。 この場合 cdrecord は、実際のユーザーが特定のファイルを読めるかを調べる。 全てのユーザーに cdrecord を使う権限を与えたいならば以下を実行する:
chown root /usr/local/bin/cdrecord
chmod 4711 /usr/local/bin/cdrecord
特定のユーザーのグループに cdrecord を使う権限を与えたいならば以下を実行する:
chown root /usr/local/bin/cdrecord
chgrp cdburners /usr/local/bin/cdrecord
chmod 4710 /usr/local/bin/cdrecord
そして、システムの cdburners グループに追加する。
ディスクの読み込み・書き出し・フォーマットを 全てのユーザーに許可したい場合を除き、 root 以外のユーザーに /dev/scg? への書き込みを許可してはならない。
CD レコーダや読み込み元のディスクが接続された SCSI バスに、 切断や再接続に対応していない昔のディスクを接続するべきではない。
CD には 99 トラック以上は入らない。
オーディオトラックとデータトラックが両方入ったディスクを作成する場合は、 データをトラック 1 に入れるべきである。 そうでなければ CDplus ディスクを作成するべきである。 CDplus は、最初のセッションがオーディオトラックで、 以降のセッションがデータトラックになったマルチセッションディスクである。
多くの OS ではデータトラックが 1 つしか読み出せない。 また読むためには特別のソフトが必要である。
HP 製 CD レコーダの SCSI コマンドセットについての 詳しい情報は以下で入手できる。
http://www.hp.com/isgsupport/cdr/index.html
もっと詳しい情報や、現在対応していないCD レコーダの SCSI コマンドマニュアルがあったら、著者に連絡してください。
Philips CDD 521 にはファームウェアのバグがある。 (アップグレードされたものにもある)。 これらうちのいくつかは、デバイスの電気の周波数を ある固定のものにしなければならず、 そうしない場合にはマシンをリブートしなければならない。
壊れた Linux SCSI generic driver で cdrecord を使う場合、 cdrecord は scg ドライバの機能をエミュレートを試みるという対処療法を使う。 不幸なことに、 Linux の sg ドライバには以下のような酷いバグがある:
fifo 率の表示は、CD レコーダにデータブロックが書き込まれた直後に計算される。 このため、fifo がストリーミングモードであるにもかかわらず、 100% fifo fill になることはない。
以下のようなメッセージが表示されてから、 9 秒間の間に ^C で cdrecord を中止できる。
Starting to write CD at speed %d in %s mode for %s session.
SCSI コマンドの典型的なエラーメッセージは以下のようなものである:
cdrecord: I/O error. test unit ready: scsi sendcmd: no error CDB: 00 20 00 00 00 00 status: 0x2 (CHECK CONDITION) Sense Bytes: 70 00 05 00 00 00 00 0A 00 00 00 00 25 00 00 00 00 00 Sense Key: 0x5 Illegal Request, Segment 0 Sense Code: 0x25 Qual 0x00 (logical unit not supported) Fru 0x0 Sense flags: Blk 0 (not valid) cmd finished after 0.002s timeout 40s
2 行目には失敗したコマンドの SCSI コマンドの ディスクリプターブロックが表示される。
3 行目には、コマンドの転送が成功した場合に、 コマンドによって返される SCSI status コードについての情報が表示される。 これは SCSI デバイスからのエラー情報である。
4 行目はコマンドの auto request sense 情報の 16 進ダンプである。
5 行目は (もし存在すれば) sense key のエラー文字列である。 コマンドが copy の場合にのみ、セグメント番号が続く。 エラーメッセージが現在のコマンドに直接関係していない場合、 deferred error という文字列が表示される。
6 行目は sense code のエラー文字列である。 存在する場合には sense qualifier も表示される。 デバイスのタイプが既知の場合、 sense data は scsierrs.c にあるテーブルを用いてデコードされる。 その文字列の後には field replaceable unit についてのエラー値が続く。
7 行目には、失敗したコマンドに関連したブロック番号と エラーフラグ文字列が表示される。 ブロック番号は有効ではないかも知れない。
8 行目は、そのコマンドについて設定されたタイムアウトと、 実際にコマンドが完了するまでにかかった時間が表示される。
以下のメッセージはエラーではない:
Track 01: Total bytes read/written: 2048/2048 (1 sectors). cdrecord: I/O error. flush cache: scsi sendcmd: no error CDB: 35 00 00 00 00 00 00 00 00 00 status: 0x2 (CHECK CONDITION) Sense Bytes: F0 00 05 80 00 00 27 0A 00 00 00 00 B5 00 00 00 00 00 Sense Key: 0x5 Illegal Request, Segment 0 Sense Code: 0xB5 Qual 0x00 (dummy data blocks added) Fru 0x0 Sense flags: Blk -2147483609 (valid) cmd finished after 0.002s timeout 40s
cdrecord には ls よりも多くのオプションがある。
現在のところ、 cdrecord は入力データがディスクに合わない場合に警告しか出さない。 コマンドを中止しないと、予想できない結果になる。
オーディオトラックのインデックス番号を 書き込むオプションが存在するべきである。
パワー不足の時に書き込まれたディスクを 修復して使えるようにするオプションが存在するべきである。
other-cdwrite-request@lists.debian.orgへ送って、cdwriting メーリングリストに入ることができる。
other-cdwrite@lists.debian.orgがメーリングリストのアドレスである。
Joerg Schilling Seestr. 110 D-13353 Berlin Germany
その他の情報は以下で入手できる。
http://www.fokus.gmd.de/usr/schilling/cdrecord.html
サポートに関する質問は、
cdrecord-support@berlios.de
または other-cdwrite@lists.debian.org
にメールを送ってください。
明らかなバグを見付けた場合は、
cdrecord-developers@berlios.de
または schilling@fokus.gmd.de
にメールを送ってください。
メーリングリストを購読するには、
http://lists.berlios.de/mailman/listinfo/cdrecord-developers
または http://lists.berlios.de/mailman/listinfo/cdrecord-support
を参照すること。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]