この章は全ての種類の CD ライタに適用できます.これには SCSI, IDE/ATAPI, パラレルポート用のデバイスが含まれます.後ろの 2 つの種類の デバイスは互換ドライバを必要とします.このドライバはこれらのデバイスを 本物の SCSI デバイスのように見せかけます.ある面では,このような統一化 (「全てのデバイスが SCSI である」)は簡単です.なぜなら,アプリケーショ ンレベルでは CD ライタの種類に関わらず他のユーザと知識を共有できるから です.その反面,ドライバ名の変更を反映させるために CD プレイヤーのよう なアプリケーションや,マウントユーティリティの再設定を行わなければなり ません.例えば今まではデバイスファイル /dev/hdc 経由で ATAPI 接続の CD ライタにアクセスしていても,SCSI 互換ドライバを有効にした後は /dev/scd0 経由でアクセスしなければならなくなります.
一度ハードウェアとその他の Linux システムの設定がうまくできれば,
cdrecord -scanbus
コマンドの実行により SCSI バスに接続されているデバイ
スの一覧が表示されます.この章の目的は,最終的に次のような出力が得られ
るように Linux システムを設定する手伝いをすることです:
shell> cdrecord -scanbus
Cdrecord release 1.7a1 Copyright (C) 1995-1998 Jo"rg Schilling
scsibus0:
0) 'Quantum ' 'XP34300 ' 'F76D' Disk
1) 'SEAGATE ' 'ST11200N ' '8334' Disk
2) *
3) 'TOSHIBA ' 'MK537FB/ ' '6258' Disk
4) 'WANGTEK ' '5150ES SCSI 36 ' 'ESB6' Removable Tape
5) 'EXABYTE ' 'EXB-8500-85QUE ' '0428' Removable Tape
6) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM
7) *
scsibus1:
100) 'Quantum ' 'XP31070W ' 'L912' Disk
101) *
102) *
103) 'TEAC ' 'CD-R55S ' '1.0H' Removable CD-ROM
104) 'MATSHITA' 'CD-R CW-7502 ' '4.02' Removable CD-ROM
105) *
106) 'YAMAHA ' 'CDR400t ' '1.0d' Removable CD-ROM
107) *
リスト: SCSI バスでのデバイスの検出
この例は Jo"rg Schilling さんから頂いたもので,全部で 4 つの CD ライタ が表示されています.-scanbus オプションは他のデバイス(例えば普通の CD-ROM やハードディスク)も表示するので注意してください.各デバイスにつ いての最後のカラムは,どんな SCSI デバイスかを説明したものです.この項 目では普通の CD-ROM ドライブと CD を焼く機能を持った CD-ROM ドライブをはっきりとは区別 できません.しかし 製品識別文字列(真ん中の項目)を見れば,機能に関するヒントが R, -R, -RW といった形で 得られることがよくあります.
Linux カーネルはさまざまな機能のためのドライバを装備しています.ドライ バはカーネルイメージに静的に組み込むか,動的ロードできるモジュールとし て組み込むことができます.Linux システムを動かすために本質的でないドラ イバは後者の方法がいいでしょう.なぜならカーネルが小さくなり,したがっ て高速になるからです.しかし,一部のドライバはシステムを立ち上げるため に必ず必要であり,モジュールとして組み込むべきではありません.例えば,システ ムが IDE ハードディスク上にある場合には,IDE ハードディスク用のドライ バはカーネル内になければならず,モジュールにはできません.
CD ライタには異なる 3 種類のものがあります.すなわち SCSI, IDE/ATAPI のライタと,パラレルポート経由で動作する外付けライタです.それぞれのハー ドウェアについて Linux カーネルをどのように設定すればよいかを表に示します.表の最初 のカラムはカーネル設定メニューでのセクションです.ここに設定があると思 います.2 番目のカラムはカーネルの機能の説明です(これもカーネル設定メ ニューからの引用です).3 番目のカラムは,できるモジュールの名前です. SCSI, IDE, PP というカラムは,対応するハードウェアにとって必要なオプショ ンです(PP はパラレルポートのことです).
セクション 説明 モジュール SCSI IDE PP
------------------------------------------------------------
BLOCK Enhanced IDE/MFM/RLL... Y
BLOCK IDE/ATAPI CDROM ide-cd M
BLOCK SCSI hostadaptor emulation ide-scsi M
BLOCK Loopback device loop M M M
PARIDE Parallel port IDE device paride Y/M
PARIDE Parallel port ATAPI CD-ROMs M
PARIDE Parallel port generic ATAPI M
PARIDE (select a low-level driver) Y
SCSI SCSI support scsi_mod Y/M Y/M
SCSI SCSI CD-ROM support sr_mod Y/M Y/M
SCSI Enable vendor-specific Y Y
SCSI SCSI generic support sg Y/M Y/M
SCSI (select a low-level driver) Y
FS ISO 9660 CDROM filesystem iso9660 Y Y Y
FS Microsoft Joliet cdrom... joliet M/Y M/Y M/Y
表: 各種ライタ用のドライバ選択
Y は 'yes' を表し,カーネルに組み込むべきであることを示します. M は 'module(モジュール)' を表し,その機能はモジュールとしてコンパイル すべき,あるいはコンパイルしなければならないことを示します.Y/M ならば どちらかを選ぶことができます(問題が起こる可能性が小さい方を選びましょう). 空の部分は変更する必要がないことを表します.このような設定は変えない方 が,作ったカーネルが動作する可能性が高いでしょう(前に動いた実績があれ ば…).特に,SCSI デバイスと ATAPI デバイスが混在している環境では,ほ とんどのものをモジュールとして作成する方がよいでしょう.
ループバックデバイスはコンパイルしなくてもかまいません.このデバイスを 使うと,イメージをメディアに書き込む前にテストすることができます. CD-ROM を読み取りたければ,ISO 9660 ファイル システムをサポートする必要があります.このドライバは自動的に RockRidge 拡張を含みます.Microsoft Joliet 拡張は,明示的に ISO 9660 ファイルシ ステムに追加しなければなりません.いずれの場合にも,ハードウェアに対応し た低レベルドライバが必要です.低レベルドライバとは,直接ハードウェアと 通信するドライバのことです.SCSI やパラレルポートの場合には,たくさん の低レベルドライバがあります.
モジュールをロードするためには,これらを /etc/modules といった設定 ファイルに列挙するか,kerneld や kmod といったデーモンを動作させなけれ ばなりません.kerneld と kmod はどちらも,カーネルが必要とした時にモジュー ルを自動的にロードします.モジュールを楽に扱うため には,以下の設定を /etc/conf.modules に追加するといいでしょう:
alias scd0 sr_mod # scd0 にアクセスがあれば sr_mod をロード
alias scsi_hostadapter ide-scsi # SCSI ホストアダプタのエミュレーション
options ide-cd ignore=hdb # /dev/hdb が CD ライタならば設定すること
IDE/ATAPI ライタを使うための設定例
alias は一つのモジュールに別名を付けるもので,本質的なものではありませ ん.options は,モジュールをロードする際のオプションを(モジュールを modprobe/insmod で正常に使えた後に)ずっと有効にするためのものです. 様々なモジュールのオプションについて知りたいならこの先 を読んでください.
説明 コマンド
--------------------------------------------------------------
有効なドライバを表示 cat /proc/devices
有効なモジュールの一覧 cat /proc/modules
利用可能なモジュールの一覧 modprobe -l
モジュールの削除 modprobe -r
モジュールの手動ロード modprobe
起動時にモジュールをロード モジュールを /etc/modules に記述
(お使いのディストリビューションの文書を見てください)
必要に応じてモジュールをロード kmod か kerneld を使用
表: カーネルモジュールとドライバを扱うコマンド
システムで使えるようになっていないモジュールが必要な場合には,カーネル の再コンパイルと再インストールが必要です.その詳細については Kernel-HOWTO をご覧ください.カーネルモジュールの扱いについての最新情 報は Module-HOWTO に書かれています.必要なモジュールがうまく構築できた か,あるいは見つかった場合には,その名前を /etc/modules に追加するか,モジュール の自動ロード機能(kmod, kerneld)を使う設定を行いましょう.よくわからな ければ,お使いのディストリビューションに付属している文書を調べましょう.
自分自身のマシンをお使いであれば,ディストリビューションに付属している 「Linux カーネルソース」というパッケージをインストールするだけです. その後で以下のコマンドを実行します:
cd /usr/src/linux
make menuconfig # 説明とメニューに従います
make dep
make zImage # または "make bzImage"
# 先に進む前にフロッピーディスクを挿入します
dd if=arch/i386/boot/zImage of=/dev/fd0
make modules
make modules_install
表: 起動可能なフロッピーディスクの作成
これによって起動可能なフロッピーディスクができます.この作業全体が本当 にわからないのであれば,システムをぐちゃぐちゃにしてしまう前に Kernel HOWTO といった他の文書を読むか,友達の助けを求めるべきでしょう.カーネ ルがシステムの中心部分であることを忘れてはいけません.
ATAPI 接続の CD ライタを持っている人は注意してください.システムの起動 時に CD ライタが ATAPI デバイスとして検出されてしまうと,Linux 上でそ のデバイスを CD ライタとして使うことができなくなってしまいます.一度 IDE/ATAPI ドライバがデバイスを握ってしまうと,SCSI ドライバ(ホストアダ プタエミュレーションの最上部にあります)はもうデバ イスに触れなくなってしまいます.ですからカーネルを再コンパイルして,先 に示した表のように CD-ROM 関係のドライバをモジュールにしましょう.
バージョン 2.2 以降のカーネルでは,"ignore=" パラメータを使って,ide-cd ドライバがデバイスを握るかどうかを制御することができます.このオプショ ンを有効にするとドライバは指 定されたデバイスは握らないので,SCSI ホストアダプタエミュレーションを 有効にしている時にも利用することができます.例えば,ATAPI 接続のライタ が hdb の時に,IDE-SCSI ドライバに hdb を SCSI デバイス[普通は sr0]と して扱わせたいならば,"modprobe ide-cd ignore=hdb" と指定してください. この指定は(バージョン 2.0 と異なり)カーネルのコマンドラインで行うこと はできません.
バージョン 2.2.9 までのカーネルでは,CONFIG_SCSI_MULTI_LUN(複数の LUN を検出する)と IDE-SCSI サポートを同時に有効にしてはいけません.という のも,IDE-SCSI ドライバのバグがこれに引っかかるからです.
一部のユーザはコンパイル済みのカーネルとバージョン 2.2 のカーネルでこ の衝突を報告しています.これは Linux のカーネルの問題です. 考えられる解決方法を以下に示します:
筆者への報告によると,2.2.10 以降のカーネルは 2.0.x 系列のカーネルのオ プションと 2.2.x 初期のカーネルのオプションを両方持っているとのことです. 筆者は 2.0.37 のように,どのデバイスをどのドライバで制御するか指定する 方法をお勧めします.以下にその方法を示します:
2.0.31 以前のカーネルにはいくつかバグがあり,CD-ROM 上の最後のファイル を読むことができません.2.0.37 以降にバージョンアップしましょう.このバー ジョンでは,"SCSI emulation" と呼ばれていた機能は,より正確な名前であ る "SCSI hostadaptor emulation" に改名されています.
2.0.37 以降のバージョンでは,どの ATAPI デバイスにどのドライバ(IDE ま
たは SCSI)を使うのかを指定できます.もっと正確に言うと,
"SCSI hostadaptor emulation" 機能をカーネルに追加して,カーネルのコマンドライン(起
動時に)で特定のデバイスに対してエミュレーションを有効にすること
ができます.例えば,CD ライタがデバイスファイル /dev/hdb を持っている
ならば,hdb=ide-scsi
という行を追加します.ブートマネージャで
ある LILO や chos を使ってこの設定をずっと有効にするための方法を以下
に示します.
image=/boot/zImage-2.0.37
label=Linux
read-only
append="hdb=ide-scsi"
リスト: LILO の設定例 (/etc/lilo.conf)
linux "Linux 2.0.37" {
image=/boot/zImage-2.0.37
cmdline= root=/dev/hda5 readonly hdb=ide-scsi
}
リスト: chos の設定例 (/etc/chos.conf)
必要なドライバを全てインストールしたら,新しいカーネルを起動します.こ のカーネルは以下の章で必要となる全ての機能を持っているはずです.
[ devfs のユーザは,デバイスファイルを手動で設定するための以 下の手順で煩わされる必要はありません.devfs を使っていれば,必要なものは全 て自動的に正しい場所に現われます.]
/dev
ディレクトリに行き,ループバックデバイスを調べ
てください.このデバイスが無くても致命的ではありませんが,あると便利で
す(3.5 節を参照).デバイスファイルが既にあれば,ls
コマンドは
loop0
-loop7
を表示するはずです:
shell> cd /dev
shell> ls loop*
loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7
リスト: ループバックデバイスを作成するコマンド
これらのデバイスファイルが無ければ,/dev/MAKEDEV
スクリプトを
使って作成します:
shell> cd /dev/
shell> modprobe loop # "loop" というモジュールをロード
shell> ./MAKEDEV loop
リスト: ループバックデバイスを作成するコマンド
最後のコマンドが成功するのは,カーネル内に loop
モジュールが
ある場合だけです.loop デバイスファイルに関するここまでの説明は,他の
デバイスファイル全て(sg*, pg*, hd*, ...)にも当てはまりますが,本文書で
明示的に説明を繰り返すことはありません.
お使いの Linux ディストリビューションに /dev/MAKEDEV スクリプトがない 場合には,以下の for ループを使って手動でデバイスファイルを作ってくだ さい:
for i in 0 1 2 3 4 5 6 7
do
mknod /dev/loop$i c 7 $i
done
ATAPI は IDE デバイスの拡張であり,最近の IDE デバイスは全て ATAPI に なっています.この拡張を使うと,IDE バス上で SCSI プロトコルを使うこと ができます.カーネルの ide-scsi モジュール(IDE コントローラを部分的に SCSI コントローラに変えます)と組み合わせると,IDE/ATAPI デバイスを SCSI デバイスのように扱うことができます.したがって,単にこのモジュー ルをロードし,SCSI の CD ライタを持っているかのように操作してください.
お使いの CD ライタをコンピュータの BIOS が認識していることを確かめてく ださい.ハードウェア自体をコンピュータが認識していないと,先に進んでも 無意味です(何も言われなかったことを認められたことの印と解釈してはいけ ません.画面にメッセージが表示されることが必要です).
SCSI をパラレルポートに接続するつもりならば(パラレルポート用の IDE ドライブと混同しないでください),特殊なアクティブケーブルと特殊な カーネルドライバが必要です.この方法について調べるなら http://www.torque.net/parport/parscsi.html を読んでください.
SCSI のハードディスクや CD-ROM ドライブにアクセスするためのデバイスファ イルである /dev/sd* や /dev/sr* は,ブロック指向でのデータ転送しか許し ていません.この制限により,これらのデバイスは高速かつデータ保存のデ バイスに適したものになっています.CD ライタのレーザーの制御はもっ と複雑な作業なので,ブロック指向のデータ転送だけでは不足です. sd* と sr* を美しくかつ高速なデバイスのままにするために,別の種類 の SCSI デバイスが導入されました.これがいわゆる 汎用 SCSI デバイス(generic SCSI devices)です. 汎用デバイスを通じて SCSI ハードウェアに対してどんなことでも行え るので,このデバイスは特定の目的に縛られません. したがって汎用(generic)という名前が付いています.
他のデバイスでも同じですが,このデバイスは(伝統により) /dev ディレクト リになければなりません:
shell> cd /dev
shell> ls sg*
sg0 sg1 sg2 sg3 sg4 sg5 sg6 sg7
これらのデバイスファイルがなければ,/dev/MAKEDEV
スクリプトを
使って作成します:
shell> cd /dev/
shell> ./MAKEDEV sg
お使いの Linux ディストリビューションに /dev/MAKEDEV スクリプトがなけ れば,以下の for ループを使って手動でデバイスを作成してください:
for i in 0 1 2 3 4 5 6 7
do
mknod /dev/sg$i c 21 $i
done
これについてはさっぱりわかりません.ごめんなさい. http://www.torque.net/parport/paride.html を見るか,ローカ ルファイル /usr/src/linux/Documentation/paride.txt を見てください.
CD-ROM を作成するためのツールに関する詳しい調査の結果が http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdb.html にあります.
CD-R のイメージ(データ CD-ROM の場合のみ)を生成するためには,以下のパッ ケージのいずれかが必要です:
ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ (mkisofs)ftp://ftp.ge.ucl.ac.uk/pub/mkhfs (mkhybrid)
イメージを CD-R に焼くためには,以下のパッケージのいずれかが必要です:
ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ (cdrecord)http://www.ping.de/sites/daneb/cdrdao.html (cdrdao)
(古い)mkisofs
のオンラインマニュアルにはバージョン 1.5 の
cdwrite
が必要だと書かれていますが,これを信じてはいけません.
黙って cdrecord を使ってください.それで大丈夫です.
新しいバージョンの cdrecord には改良版の mkisofs が付属していることと,
他では見つからない追加ツールがいくつか misc ディレクトリ(readcd,
isosize)にあることに注意してください.
Linux においては,フロントエンドは本当にフロントエンドです.つまり,フ ロントエンドがあってもコマンドライン用のユーティリティはインストールし なければならないのですが,使う時の見栄えがよくなります.
X-CD-Roast は Linux で CD を簡単に作成するためのプログラムパッ
ケージです.これは cdrecord
や mkisofs
のようなコマ
ンドライン用のツールと組み合わせて使い,使いやすい GUI を提供します.
http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e_overview.html
BurnIT は cdrecord の JAVA 版フロントエンドであり, cdda2wav-0.95 を加えれば UNIX 環境で CD を焼くための完全な環境が作れま す.これは
http://sunsite.auc.dk/BurnIT/
から入手できます.
XDaodio
これは cdrdao のグラフィカルフロントエンドです.このパッケージの主な目 的は,オーディオ CD をまるごとコピーすることです.
http://www.lrz-muenchen.de/~MarkusTschan/