CD-ROM と DVD ドライブ(と WORM デバイス)は、高レベルのデバイスドライバで ある sr 経由でアクセスできます。 デバイスドライバの名前は「sr」ですが、モジュール名は「sr_mod」です。 デバイスファイル名は /dev/sr<n> もしくは /dev/scd<n> です。
下記の図表は、sr を含む CD-ROM サブシステムの説明です。
この図表では、プロトコルスタック間の違いは隠れています。CD-ROM デバイス名 は CD-ROM レイヤが統一して面倒を見ているわけではなく、 むしろ個々のプロトコルスタックが面倒を見ています。 IDE サブシステムでは、中心にある「ide」ドライバがデバイス名の面倒を見ている (つまり、ide-cd ドライバではない)のに対し、SCSI サブシステムでは sr ドライバ が行っています。USB や IEEE1394 の cd デバイス名は、 おのおののスタックが面倒を見ています。これは、/dev/cdrom が適切なサブシステムのデバイス名へのシンボリック・リンクになっている理由の 一部と言えるかもしれません。
sr ドライバ経由でアクセスできる SCSI デバイスには、2 つのタイプがあります。
CD-ROM デバイス(DVD プレイヤーを含む) (SCSI 周辺機器コードは 5)
WORM と呼ばれる「追記型」デバイス (SCSI 周辺機器コードは 4)
sr ドライバは、カーネルのブート時、もしくはモジュールとしてブート後にロード された時に、256 個の CD-ROM もしくは DVD を認識できます。しかし、一度ロード されると、増設分のドライブは一定個数のみ認識します。この増設ドライブの個数は、 カーネル設定パラメタである CONFIG_SR_EXTRA_DEVS で設定します。デフォルトの値 は 2 です。
ありません。
CD-ROM ドライブが XA モード(モード 2)をサポートしているかどうかを調べる テストを行うと、ドライブによってはファームウェアのバグを招く場合があります。 そのため XA モードのサポートのチェックは、デフォルトで無効になっています。 次のようなモジュールパラメタがあります。
xa_test=<0|1> |
下記のファイルは誰も読め、ASCII で出力されます。
/proc/sys/dev/cdrom/autoclose /proc/sys/dev/cdrom/autoeject /proc/sys/dev/cdrom/check_media /proc/sys/dev/cdrom/debug /proc/sys/dev/cdrom/info /proc/sys/dev/cdrom/lock |
例として、スーパーユーザが echo "1" > /proc/sys/dev/cdrom/autoeject とすると、オートエジェクト機能が有効になります。 こうするとアンマウント時にドライブから CD-ROM がイジェクトします。
Linux ユーザの多くは、SCSI デバイス(もしくはアダプタ)を持っていません。 そのようなユーザは、CD ライターのソフトウェア(例えば cdrecord や cdrdao))や音楽 CD を聞く プログラム(例えば cdparanoia)が、なぜ Linux の SCSI サブシステムを使用するのか、少々戸惑います。答えは、それらのプログラムが デバイスへアクセスするのに、低レベルのドライバを必要としているからです。 ATAPI(ATA Packet Interface)は、基本的に ATA 転送越しにSCSI コマンドセットを 送り出しています [1] (このセクションでの議論は、ATAPI テープドライブと ATAPI フロッピードライブ にも適用できます)。
現状 cdrecord と cdparanoia は ともに SCSI 汎用ドライバ(sg) と接続しています。また ATAPI CD デバイス の場合は、ハードウェアにアクセスするのに ide-scsi 擬似デバイスを利用して います。 カーネル 2.4 系列で ioctl のパケットインタフェースが、統合 CD-ROM レイヤに 追加されたので(上記の Section 9.2 の図を参照)これは今後変更される かもしれません。 [2]
Linux の IDE サブシステムのデフォルト動作は、組み込みのドライバが すべての ATA デバイスの管理権限を要求します 。 ATAPI CD ライターなら、組み込みの ide-cd ドライバが要求を出します。 一度こうなると、SCSI サブシステムは ATAPI デバイスの制御ができなくなります。 ide-scsi(擬似低レベル SCSI)ドライバは、IDE サブシステムによって要求され なかった ATAPI デバイスだけを SCSI サブシステムに登録 できます。
前段落の組み込みという条件に注意してください。 ide-cd と ide-scsi ドライバがモジュールなら、最初にロードされたものが ATAPI CD デバイス(例えば CD-ROM もしくは DVD の リーダーやライター)を要求します。 さらに、ドライバモジュールを rmmod したり、他のモジュール を modprobe したりして、制御を切り替えられます。
/dev/hddにある CD ライターを cdrecordからアクセス可能とするよう IDE のコアドライバに 対して命令するには、カーネルブート時のオプションである「hdd=ide-scsi」を 利用する方法が最も柔軟でしょう。これで ide-cd ドライバは /dev/hdd を無視します(ide-cd ドライバが組み込みで あってもモジュールであっても関係ありません)。ide-scsi ドライバが組み込み もしくはモジュールとして存在すれば、/dev/hdd にある CD ライターを「横取り」します(要求されると、IDE のコアとなるドライバは ide-scsi モジュールをロードします)。
ide-cd ドライバモジュールには、特定の ATA デバイスを無視するよう、次のように 命令できます。
modprobe ide-cd ignore='hdc hdd' |
カーネル 2.4 系列に追加された新しいオプションに「hdd=scsi」があります。 このオプションは、上記で述べた「hdd=ide-scsi」と同じような機能に見えます。 さらに「hdd=scsi」は、SCSI 中間レベルと ide-scsi ドライバが両者とも カーネルに組み込まれた時にだけ利用できます(これ以外の場合には ide_setup 関数が「BAD OPTION」を報告します)。
SCSI サブシステムが ATAPI CD デバイスを「管理」しているかどうかを見る には、cat /proc/scsi/scsi の出力をチェックしてください。 もう 1 つの方法は、cat /proc/sys/dev/cdrom/info の 「drive name:」を見て、「sr」という項目に注目する方法です。下記は私の システムの出力です。
$ cat /proc/sys/dev/cdrom/info CD-ROM information, Id: cdrom.c 3.12 2000/10/18 drive name: sr1 sr0 drive speed: 16 0 drive # of slots: 1 1 Can close tray: 1 1 Can open tray: 1 1 Can lock tray: 1 1 Can change speed: 1 1 Can select disk: 0 0 Can read multisession: 1 1 Can read MCN: 1 1 Reports media changed: 1 1 Can play audio: 1 1 Can write CD-R: 1 0 Can write CD-RW: 1 0 Can read DVD: 0 1 Can write DVD-R: 0 0 Can write DVD-RAM: 0 0 |
/dev/hdd にある ATAPI CD ライターが 一度でも SCSI サブシステムへ登録されると、 CD-ROM は「scd」というデバイス名を使ってマウントされるはずです。CD プレーヤー も「scd」デバイスを使わなければいけません。妙なことに、 hdparm コマンドは、まだ /dev/hdd デバイスファイルを使用することになっています (もしくは、「echo ... > /proc/ide/hdd/settings」という方法で)。 [3]
[1] | ATA は最近の呼び名で、以前は IDE もしくは EIDE と言っていました。 Linux では、これまでの経緯から ATA デバイスを制御するサブシステムを「IDE」 サブシステムと呼んでいる点に注意してください。 | |
[2] | テープやフロッピーのような他の ATA デバイスは、たいてい ATAPI インタフェース を使っています。 しかし、圧倒的多数の ATA ディスクは、ATAPI インタフェースを 使っていません。 | |
[3] | Linux カーネル 2.4 系列では、ide-scsi ドライバを用いて cdrecord が ATAPI(IDE) CD ライターを制御できるようにした 場合に、問題が生じることが多くなっています。 この問題は、IDE サブシステムが制御下のデバイスに対して、無茶なやり方でデータ 転送速度を最適化しようとする点に関連しているようです。タイムアウトが発生 したりマシンが固まったりする現象を経験した人の中には、 hdparm コマンドを使って DMA の設定を遅くすることで 問題を解決できた方もいるようです。CD ライターが /dev/hdd に接続されていれば、下記の 2 つのコマンドのどちらかで、うまくいったことが わかります。
|