ATAPI CD-R ドライブの使い方

手元のファイルを整理していたら,だいぶ前に書いた ATAPI CD-R の使い方という文書が見つかったので Web に載せておきます.書いたのが 2000 年の夏ごろとかなり古いので,現在では多少状況が変っている可能性もあります.
・Plamo Linux での ATAPI CD-R ドライブの使い方

最近は ATAPI 接続の安価な CD-R ドライブが普及していますが、Linux の標
準的な CD-R 書き込みソフトである cdrecord は SCSI 接続の CD-R ドライブ
を利用するように設計されており、そのままでは ATAPI 接続の CD-R ドライ
ブを利用することはできません。Linux では、この種の問題を解決するために、
カーネルに「IDE-SCSI エミュレーション」という機能が用意されており、
ATAPI 接続のCD-R ドライブを、アプリケーション(cdrecord)には SCSI デバ
イスのように見せかけることが可能になっています。カーネルのこの機能を利
用することで ATAPI 接続の CD-R ドライブも cdrecord 等から利用するこ
とが可能になります。

  実際のところ、ATAPI は SCSI を参考にして作られた規格なので、コマンド
  体系はよく似ているそうです。また、SCSI 接続の CD-R ドライブでは機種
  ごとのコマンドがあり、cdrecord が対応している機種しか利用できません
  でしたが、ATAPI の場合は比較的最近の(4 倍速以上くらいかな?)の CD-R 
  ドライブは機種を問わず利用できるようです。

  CD から WAV データを取り出す cdda2wav も、ATAPI 接続の CD ドライブの
  場合は SCSI エミュレーション経由で利用します。

この文書では、手元で使っている Panasonic LK-RW7585T という CD-R/RW ド
ライブ(CD-R 8 倍速/CD-RW 4 倍速)を例に、Linux から ATAPI CD-R ドライブ
を使う方法について説明します。

・カーネルの再構築

Linux 2.2 系では SCSI エミュレーション機能はカーネルに組み込むか 
ide-scsi.o というモジュールドライバとして用意されています。また、
cdrecord は CD-R ドライブを generic SCSI(sg.o) デバイスとしてアクセス
しますので、"SCSI generic" 機能も組み込んでおく必要があります。

Plamo 2.0 では必要なドライバはあらかじめ用意していますが、カーネルを再
構築する必要がある場合などは、make menuconfig で

Block devices => SCSI emulation 
SCSI support => SCSI generic support

の 2 点について、カーネルに組み込む("*")か、モジュールドライバにする
("M") という指定でカーネルを再構築してください。

カーネルの再構築が終了すれば、make bzlilo 等を実行して新しく作成したカー
ネルが利用されるように設定してください。モジュールドライバを利用する場
合は make modules_install を実行してモジュールドライバをインストールす
ることをお忘れなく。

・起動時パラメータの設定

SCSI エミュレーション機能を使う際は、どのデバイスを SCSI エミュレーショ
ン経由で利用するかをあらかじめ指定しておく必要があります。具体的には、
カーネルの起動時パラメータで hd=ide-scsi と指定します(は実際に 
CD-R デバイスが接続しているデバイス名になります)。lilo を使っている場
合は、/etc/lilo.conf の append 行に

  append="hdc=ide-scsi"

のように指定します。このように指定すると /dev/hdc はハードウェア的には
検出されるものの、通常の IDE デバイスとしては認識されなくなります。

手元のマシンでは /dev/hda が HDD(primary master)、/dev/hdc(secondary
master)が CD-R ドライブ、/dev/hdd(secondary slave) にはノーブランドの 
CD ドライブが接続されており、上記パラメータを指定した場合、起動時のメッ
セージは以下のようになります。

1: hda: Maxtor 92049U4, ATA DISK drive
2: hdc: MATSHITA CD-RW CW-7585, ATAPI CDROM drive
3: hdd: 44X CD-ROM, ATAPI CDROM drive
4: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
5: ide1 at 0x170-0x177,0x376 on irq 15
6: hda: Maxtor 92049U4, 19541MB w/2048kB Cache, CHS=2491/255/63
7: hdd: ATAPI 40X CD-ROM drive, 128kB Cache
8: Uniform CDROM driver Revision: 2.56
9: scsi : 0 hosts.
10: scsi : detected total.

2 行目で hdc として認識されている CW-7585 が ide デバイス上では認識さ
れていない(6 行目と 7 行目)に注意してください。

なお、この例では SCSI エミュレーション機能はモジュール(ide-scsi.o)とし
て利用しているため、起動時には SCSI デバイスが認識されていません(9,10 
行目)

SCSI エミュレーション機能(と SCSI CD-ROM 機能)をモジュールではなくカー
ネル組み込みにすると、起動時に以下のようなメッセージが出力されます。

# この例では /etc/lilo.conf の append 行に "hdc=ide-scsi hdd=ide-scsi" 
# と設定し、/dev/hdc, /dev/hdd の双方を SCSI エミュレーション経由で利
# 用するようにしています。

ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: Maxtor 92049U4, 19541MB w/2048kB Cache, CHS=2491/255/63
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
scsi : 1 host.
  Vendor: MATSHITA  Model: CD-RW  CW-7585    Rev: 1.01
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0
  Vendor: MATSHITA  Model: CD-RW  CW-7585    Rev: 1.01
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr1 at scsi0, channel 0, id 0, lun 1
  Vendor: MATSHITA  Model: CD-RW  CW-7585    Rev: 1.01
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr2 at scsi0, channel 0, id 0, lun 2
  Vendor: MATSHITA  Model: CD-RW  CW-7585    Rev: 1.01
  Type:   CD-ROM                             ANSI SCSI revision: 02
...(snip)...

Detected scsi CD-ROM sr7 at scsi0, channel 0, id 0, lun 7
  Vendor:           Model: 44X CD-ROM        Rev: 5.3A
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr8 at scsi0, channel 0, id 1, lun 0
  Vendor:           Model: 44X CD-ROM        Rev: 5.3A
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr9 at scsi0, channel 0, id 1, lun 1
  Vendor:           Model: 44X CD-ROM        Rev: 5.3A
  Type:   CD-ROM                             ANSI SCSI revision: 02
...(snip)....

Detected scsi CD-ROM sr15 at scsi0, channel 0, id 1, lun 7
scsi : detected 16 SCSI cdroms total.
sr0: scsi3-mmc drive: 8x/32x writer cd/rw xa/form2 cdda tray
Uniform CDROM driver Revision: 2.56
sr1: scsi3-mmc drive: 8x/32x writer cd/rw xa/form2 cdda tray
sr2: scsi3-mmc drive: 8x/32x writer cd/rw xa/form2 cdda tray
...(snip)...
sr7: scsi3-mmc drive: 8x/32x writer cd/rw xa/form2 cdda tray
sr8: scsi3-mmc drive: 4x/40x cd/rw xa/form2 cdda tray
sr9: scsi3-mmc drive: 4x/40x cd/rw xa/form2 cdda tray
...(snip)..
sr15: scsi3-mmc drive: 4x/40x cd/rw xa/form2 cdda tray

この例ではカーネル構築時に "Probe all LUNs on each SCSI device" を指定
しているため、一つの IDE デバイスが LUN に対する問い合わせの全てに反応
するようになっています。そのため /dev/hdc のドライブが /dev/scd[0-7],
/dev/hdd のドライブが /dev/scd[8-15] に割りあてられることになります。
複数の IDE デバイスを SCSI エミュレーション経由で利用する場合は、デバ
イス番号に注意してください。

・cdrecord でデバイスの確認

cdrecord は CD-R ライタを generic SCSI(/dev/sgN)デバイス経由で利用しま
す(N はデバイス番号)。generic SCSI 機能はカーネルの再構築メニューのう
ち SCSI support の中に独立して指定する項目として存在するので、忘れずに
組み込むようにしておいてください。

/dev/sgN が利用できる場合、cdrecord で -scanbus オプションを指定すると、
利用可能な generic SCSI デバイスが一覧表示されます。

bash# cdrecord -scanbus
Cdrecord 1.8.1a07 (i686-pc-linux-gnu) Copyright (C) 1995-2000 Jg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'MATSHITA' 'CD-RW  CW-7585  ' '1.01' Removable CD-ROM
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *

この例では "0,0,0" デバイスが CD-R デバイスとして認識されています。

ちなみに、cdrecord や cdda2wav では SCSI デバイスを /dev/sda や 
/dev/scd0 のようなデバイス名ではなく、0,0,0 のような 3 桁の数字で指定
します。この数字は (SCSI アダプタ番号、SCSI ID, LUN 番号) という指定に
なります。

cdrecord では、書き込み先のデバイスは dev= オプションで指定するので、
この例では、書き出したい CD イメージを CD.iso とすると、

# cdrecord -v dev=0,0 speed=8 CD.iso

という指定になります。

  CD.iso という CD イメージは mkhybrid 等のコマンドで作成します。

・参考 URL

cdrecord のページ
http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html

CD-R ドライブ動作機種リスト(ただし海外の情報)
http://www.fadden.com/cdrfaq/faq05.html

国内 CD-R ドライブの OEM 関係情報
http://www.cdr.ne.jp/hard-index.html