大抵の mount
コマンドは user オプションが使えます。
/etc/fstab に次のように記述すると
/dev/sbpcd /mnt/cdrom iso9660 user,noauto,ro
一般のユーザが次のようなコマンドを使って、CD-ROM のマウント・アンマウ ントができるようになります。
% mount /mnt/cdrom
% umount /mnt/cdrom
デフォルトでは、セキュリティを守るためのオプションをいくつか付けた状態 で CD-ROM がマウントされます(例えば、プログラムが実行されなかったり、 デバイスファイルが無視されたりします)。この制限では厳しすぎる場合には、 オプションを追加することができます(例: プログラムを実行できるようにす る "exec" オプション)。詳しくはオンラインマニュアルの mount(8) を参照 してください。
他の方法としては、usermount
パッケージを使うことができます。
このパッケージは、(ハードディスク等)他のデバイスへのアクセスは制限した
ままで一般ユーザがフロッピーディスクや CD-ROM 等の持ち運び可能なデバ
イスを一般ユーザがマウント・アンマウントできるようにします。これは主だっ
たアーカイブサイトにあるでしょう。
また、ftp.cdrom.com
というアーカイブサイトには
mount.c
というソースファイルが登録されています。これは CD-ROM
(だけ)を一般ユーザがマウント・アンマウントできるようにするプログラムで
す。これは setuid
して実行します。
"device is busy"
というメッセージが出るのですが。
何らかのプロセスが CD-ROM ドライブにアクセス中であると(デフォルトのディ
レクトリがマウント中のファイルシステムである場合を含みます)、CD-ROM を
アンマウントすることはできません。どのプロセスが CD-ROM にアクセスして
いるのか知りたいときには、fuser
コマンドを使うことができます。
実行例を以下に示します。
% umount /cdrom
umount: /dev/hdd: device is busy
% fuser -v /cdrom
USER PID ACCESS COMMAND
/mnt/cdrom tranter 133 ..c.. bash
システムによっては、fuser
コマンドを実行する際に root 権限が
必要な場合があります。他のユーザのプロセスを参照するためです。
/etc/exports に項目を追加する必要があります。そうすればエ
クスポートされたマシンからデバイスが見えるようになります。詳しくはオン
ラインマニュアルの exports(5)
を見てください。
最初に Linux をインストールする際の最も一般的な方法は起動フロッピーを 用いることです。ディストリビューションによっては、DOS から直接 CD 上に ある Linux カーネルを起動することができます。
CD-ROM, ROM BIOS, ATAPI CD-ROM ドライブが対応していれば、直接 CD から
システムを起動することができます。最新バージョンの mkisofs
は、
起動可能な CD の標準である El Torito を用いて、このような CD-ROM を作
ることができます。
Heiko Eissfeldt さん (
heiko@colossus.escape.de) と Olaf Kindel さんが音楽データを読
み取って .wav
形式の音声ファイルとして保存するためのユーティ
リティを作成しています。このパッケージは cdda2wav.tar.gz
とい
う名前で、metalab.unc.edu
にあります。
デジタル音楽データを取り出すための別のユーティリティである
cdparanoia
があります。これは
http://www.mit.edu/afs/sipb/user/xiphmont/cdparanoia にあります。
CD-ROM ドライブの変化は速いので、デジタル音楽データの読み込
みをサポートしている CD-ROM ドライブの一覧を作成することは困難です。一
番確実な方法は cdda2wav
や cdparanoia
パッケージの最
新版に入っているドキュメントを読むことです。
この話題に関するさらに詳しい情報については、WWW サイト http://www.tardis.ed.ac.uk/~psyche/cdda/ や、参考資料の章で挙 げられている alt.cd-rom の FAQ を参照してください。
find
コマンドが正しく働かないのですが。
Rock Ridge 拡張されていない ISO-9660 フォーマットの CD-ROM の場合、
find
コマンドに -noleaf
オプションを付ける必要があり
ます。詳しくはオンラインマニュアルの find(1) を読んでください。
(筆者の経験では、最近は事実上全ての Linux の CD は Rock Ridge 拡張を使っ ているので、この問題が起こることは滅多にありません。)
Linux 用の X-CD-Roast パッケージは、CD 書き込みツールのグラフィカルな フロントエンドです。このパッケージは metalab.unc.edu の /pub/Linux/utils/disk-management/xcdroast-0.95.tar.gz にあります。
また、Linux CD-Writing HOWTO という文書もご覧ください。これは ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/CD-Writing-HOWTO または http://metalab.unc.edu/LDP/HOWTO/CD-Writing-HOWTO.html にあります (日本語訳: http://www.linux.or.jp/JF/JFdocs/CD-Writing-HOWTO.html)。
CD-ROM が読み取り専用のメディアだからです。古いカーネルの一部では
CD-ROM を読み書き可能なモードでマウントできました。しかも CD に対する
書き込みの命令はエラーにならず無視されました。カーネルのバージョンが
1.1.33 になってこの問題は修正され、CD-ROM は読み取り専用でしかマウント
できないようになりました。マウント時には mount -r
のように読
み取り専用のオプションを指定してください。
sbpcd
ドライバは、CD-ROM をアンマウントするとこれを自動的に
排出します。システムをシャットダウンするときにはマウントされていた CD
も自動的にアンマウントされるので、ディスクが排出されることになります。
この機能は CD-ROM を入れ換える時に便利です。さらに、トレーを開いたま まで CD-ROM のマウントや読み込みを行うと、トレーを自動的に閉じるように なっています。
この機能は、一部のプログラム(cdplay
や workbone
等)で
問題になることがわかりました。1.1.60 以降のカーネルでは、この機能をソ
フトウェア的に調整することができます。サンプルプログラムが sbpcd ドラ
イバの README ファイルに含まれています(
eject プログラ
ムも使えるでしょう)。カーネルのソースファイルの sbpcd.h
を編集すれば、デフォルトの動作を変えることもできます。
その「特殊」な CD はおそらく(PhotoCD や CD-R ドライブを使って作った一 枚限りの CD-ROM, または 8cm 電子ブック等の) XA 形式の CD-ROM でしょう。 ほとんどの Linux カーネルの CD-ROM ドライバは XA 形式の CD-ROM を扱え ませんが、それを可能にするパッチが FTP サイトにあるかもしれません。
sbpcd ドライバは XA 形式に対応しています。sbpcd ドライバをお 使いであれば、次のようにして CD-ROM が XA 形式かどうかを確かめることが できます。sbpcd.c ファイルを編集して、"Table of Contents(目次)" の表示 をするようにします(DBG_TOC を設定)。そしてカーネルを再構築・インストー ルして、新しいカーネルを起動します。すると CD-ROM をマウントするごとに CD-ROM の目次が(コンソールまたはログファイルに)書き込まれるようになり ます。もしも目次の最初に表示される数字が "20" ならば、それは XA 形式の CD-ROM です。"00" ならば普通の CD-ROM です。もしも目次が異なるトラック を示したら、それも XA 形式のディスクである可能性があります。
(この情報は、Eberhard Moenkeberg さんに提供していただきました。)
CD が読めない他の可能性としては以下があります:
訳注: 電子ブックの場合、EB フォーマットはほとんどのドライブで読めます。 拡張された EBXA フォーマットは、読めないものもあるようです。
SCSI の多連装 CD-ROM チェンジャーが動作したという報告がいくつか寄せら れています。たぶんカーネル設定オプションの "Probe all LUNs on each SCSI device" を有効にする必要があるでしょう (SCSI ドライバが CD チェンジャーを既に知っている場合には、この設定は必 要ではありません。/usr/src/linux/drivers/scsi.c を見てく ださい)。
カーネルドライバにおける SCSI のタイムアウト値を増やさなければならなかっ たという方が少なくとも 1 人いらっしゃいました。この現象の兆候は、 最初に CD-ROM をマウントしようとしたときに "wrong fs type, bad option, bad superblock on /dev/sr5, or too many mounted file systems" のようなエラーメッセージが出るけれど、2 度目以降では即座に成功すること です。タイムアウト値を増やすには、ファイル /usr/src/linux/drivers/scsi/sr_ioctl.c の最初の方にある IOCTL_TIMEOUT の値を増やし、カーネルを再構築します。デフォルトの 3000 を 10000 にすると NEC の Multispin 4Xc が動作したという報告がありまし た。
全ての LUN にアクセスできるようにするには、追加のブロックデバイスファ
イルを作成する必要があるかもしれません。デバイスファイルは LUN それぞ
れに対して必要です。したがって 7 連装のチェンジャーでは、
/dev/sr0
から /dev/sr6
まで必要になります(他にも
SCSI の CD-ROM ドライブがあればもっと必要です)。ブロック特殊ファイルを
作成するには、root ユーザになって mknod /dev/sr? b 11 ?
を実
行します(? は必要な数字を表します)。
ナカミチの 7 連装チェンジャー、NEC の Multispin 4Xc, Pioneer の 12 連 装 CD-ROM チェンジャーが動作することが報告されています。
EIDE/ATAPI の多連装チェンジャーも利用可能です。一部のドライブに対して
は、CDROM_SELECT_DISC という ioctrl 機能をカーネルがサポートしています。
IDE-CD カーネルドライバの README ファイルにはチェンジャーのスロットを
選択するプログラムのソースコードが入っています。また、前に述べた
eject
のようなユーティリティを使うこともできます。
CD によっては、root
ユーザしかルートディレクトリにアクセスで
きないようなパーミッションを持つものがあります。これは CD-ROM ベンダの
失敗の類ですし、実際にも不便です。もっとよくあることは、特定のファイル
やディレクトリが誰にでも読めるようにはなっていないことです。この問題を
回避するためにカーネルにパッチを当てている人もいます。
後述する「隠しファイル」に関する質問も関連事項なので、そちらもご覧くだ さい。
IDE 用 CD-ROM ドライバから "hdxx: code: xx key: x asc: xx ascq: x" というカーネルメッセージが出たということですね?
これは IDE CD-ROM ドライブが出した状態/エラーメッセージです。カーネル 空間をエラーメッセージで無駄遣いするのを避けるため、idecd ドライバはデ フォルトでは CD-ROM ドライブから受け取った情報をそのまま出力します。 このデフォルト動作を変更して、実際のエラーメッセージを表示するようにす ることもできます。 /usr/src/linux/drivers/block/ide-cd.c を編集して VERBOSE_IDE_CD_ERRORS の値を 1 に変更し、カーネルを再構築してください。
方法を一つ紹介します。以下のコマンドで 1500KB の CD から読み出す速度を 計るのです。
% time -p dd if=/dev/cdrom of=/dev/null bs=1k count=1500
1500+0 records in
1500+0 records out
real 5.24
user 0.03
sys 5.07
1 倍速ドライブの転送速度は 150KB/秒なので、読み出しに 10 秒 かかるはずです。2 倍速ならば 5 秒かかりますし、4 倍速なら 2.5 秒かかり ます。それ以降も同様です。
実行例に出てくる 3 つの数値のうちでは "real" の時間を見ましょう。この 例ではドライブは倍速であることがわかります。もっと正確な値を調べるには、 転送するデータの量を増やしましょう(どうしてかと思うかもしれませんが、 データがキャッシュされないからです)。コマンドは何回か実行して、その平 均を取るとよいでしょう。
筆者はまた、CD-ROM の転送速度を調べるための簡単なプログラムを C 言語で 作成しました。ご希望であれば送ってもかまいません。
一般的な症状は、最初に Linux をインストールした時に使った起動ディスク が CD-ROM ドライブを認識したのに、Linux カーネルをハードディスクやフロッ ピーディスクにインストールして再起動すると CD-ROM ドライブが認識されな いというものです。
この問題の最もありがちな原因は、一部の Linux ディストリビューションで は、ハードディスク(あるいはフロッピーディスク)にインストールされるカー ネルが必ずしも起動ディスクに入っているカーネルと同じでないことです。 CD-ROM のハードウェアに合わせて起動ディスクを選択したのに、インストー ルされたカーネルは「汎用」のカーネルであり、使いたい CD-ROM をサポート していないのです。この問題に該当するかどうかは、本文書の前の章で説明し た、問題点を解決するためのガイドラインを使って調べることができます(ま ずは /proc/devices を調べましょう)。
解決方法はカーネルを再コンパイルし、使っている CD-ROM 用とその他に必要 なもの(SCSI カード、ISO-9660 ファイルシステム)のドライバを全て確実に入 れることです。この作業の手順が分からなければ、 Kernel HOWTO を見てください。
カーネルにコマンドラインオプション(例: "hdc=cdrom")を渡す場合には、 ブートローダの設定ファイル(普通は /etc/lilo.conf)にオプションを追加す る必要があります。
一部の CD には、「隠しファイル」属性が付いたファイルが入っています。こ のようなファイルは普通は見えません。ただし "unhide" オプションを付けて CD をマウントすると、見えるようになります(この動作の説明はどこにも書か れていません)。
音楽 CD プレイヤー等のアプリケーションを自分で独自に作成したければ、 Linux が提供している API(Application Programming Interface)を理解しな ければなりません。
元々の CD-ROM 用カーネルドライバでは、独自の ioctl() 関数を使って CD-ROM ドライブごとに固有の機能をサポートしていました。これらについて は /usr/include/linux/sbpcd.h に説明が書かれています。ド ライバの大部分は他のドライバを基に作成されているので、全く同じではない にせよ、インターフェイスには共通する部分がたくさんあります。
最近では、David van Leeuwen さん ( david@tm.tno.nl) が中心になって、CD-ROM 用の APIの共通化が進められてきました。 この作業は、共通のコードを一ヶ所にまとめることと、全てのドライバに確実 に同じ動作をさせるためのものです。この標準については /usr/src/linux/Documentation/cdrom/cdrom-standard.tex に説明があります。この標準をサポートしているカーネルドライバもいくつか あります。カーネル 2.0 の時点では、全ての CD-ROM ドライバがこの API に 準拠しています。
拙著「Linux Multimedia Guide」には、CD-ROM ドライブを利用する (特に音楽関連)プログラムを書くための説明をかなり詳しく書いています。 「参考資料」の章の終わりを見てください。
Linux ではなく Windows の ロングファイルネーム を使っている CD-ROM は、Microsoft の独自技術である Joliet ファイルシステムを使って フォーマットされているかもしれません。解決方法については、次の質問をご 覧ください。
Microsoft は ISO CD-ROM 形式を拡張して Joliet 形式を作りま した。この形式を使うと、16 ビットの Unicode 形式を使ってエンコードした ロングファイルネームを扱うことができます。
バージョン 2.0.24 以降の Linux カーネルは Microsoft Joliet ファイルシ ステム拡張をサポートしています。これをサポートするにはカーネルにおける 設定を有効にする必要があります。
Joliet 形式の CD-ROM に入っている、native language 文字のファイル名を 画面に表示するためには、カーネルにおける NLS ISO8859 文字集合のサポー トのうち適切なものを有効にする必要があります。
一部の音楽 CD は追加データを持つ「拡張形式」のものです。よく見かけるも のは、音楽用 CD トラック以外にも、ISO-9660 ファイルシステムとしてマウ ントできるデータが入っている CD です。
筆者が調べた拡張形式の CD は、Microsoft Windows と Apple Macintosh の
アプリケーションが入っているものでした(当然ながら Linux で直接実行する
ことはできません。Windows のアプリケーションは WINE という Windows エ
ミュレータで部分的に動作しました)。xv
等の標準的な画像ビュー
アで表示できる GIF 画像が入っているものや、xanim
で再生できる
Apple QuickTime 形式の動画が入っているものもありました。この CD は、古
い CD-ROM ドライブでは読み込めないマルチセッションの CD でした。
この CD には、拡張形式の CD に関する FAQ が入っている
readme.txt
ファイルがありました。
SCSI または ATAPI に準拠している DVD-ROM ドライブならば、ISO-9660 ファ イルシステムでフォーマットされているディスクを Linux で扱うことができ るはずです。言い換えれば、このようなディスクは(たぶん容量が大きい) CD-ROM ドライブとして動作します。
DVD-ROM ディスクの多くは UDF ファイルシステムを使っています。本文書の 執筆時点では、このファイルシステムへの対応は開発途上です。カーネルへの パッチは http://trylinux.com/projects/udf/ から入手できま す。
しかし MPEG-2 でエンコードされた DVD ビデオの再生のサポートについては、 ソフトウェア的なものについても、DVD デコーダのハードウェアを使うものに ついても筆者は知りません。エンコードに関する規格の文書は、高価かつ非開 示契約を結ばないと入手できないようです。別の原因は、MPEG 再生は独自ハー ドウェアを使うのが普通であり、メーカーがプログラミング情報を公開してく れないことです。このような理由により、Linux でフリーに利用できる DVD ビデオ再生ソフトウェアを開発するのは困難かもしれません。
SCSI または ATAPI 準拠の CD-RW ドライブならば、ISO-9660 ファイルシステ ムでフォーマットされているディスクを Linux で扱うことができるはずです。 ディスクへの書き込みもできます。
CD-RW ディスクの多くは UDF ファイルシステムを使っています。本文書の 執筆時点では、このファイルシステムへの対応は開発途上です。カーネルへの パッチは http://trylinux.com/projects/udf/ から入手できます。