次のページ 前のページ 目次へ

3. CD-R を焼く

「もしおまえを煙と化すなら、焼き上がる間にフィードルでも奏でて時を過ごそう」 (ローマ皇帝ネロが A.D. 64 年に彼のクラシック CDを焼いた時の言葉です。 彼は完璧に考え違いをして、ローマを焼き払っちゃたんですけどね)

Linux 上での CD-ROM 作成は 2 つの手順で行います:

この節では、データ CD とオーディオ CD を焼く手順を詳細に説明します。

3.1 CD-ROM (データのみ)を焼く

CD に焼くためのデータの収集には普通、思っているより時間がかかります。 一度 CD を書き込んで、固着させてしまったら、足りないファイルを追加する ことはできないことに注意してください。 これは、現在は全体まるごとの再書き込みしかできない CD-RW の場合でもそうです。 ファイルを 1 個追加するためにマルチ・セッション機能を使うなどというのは 話になりません。 新しい table of contents (TOC) をまるまる使うため、 多くのスペースを食ってしまうからです。 UDF はまだ Linux では使えません。

また、CD の空き容量が ISO 9660 ファイルシステムの情報のため ある程度 (普通は数 MB) 使われてしまうことを覚えておいてください。 620 MB のデータなら確実に 650MB の CD-R に収まるでしょう。

後で CD-ROM となるイメージの作成

どんな記録メディア(例: フロッピーディスク、ハードディスク、CD)でも、 利用可能にするにはファイルシステムを作らなければなりません (DOS でいうところのフォーマットです)。ファイルシステムの役割は、 メディアに保存されるファイルを組織化し、まとめることです。

ハードディスクのパーティション上にファイルシステムを作る普通の ユーティリティは、空のファイルシステムをパーティション上に作成します。 このファイルシステムには、ユーザの必要に応じてファイルが 入っていきます。これに対して、書き込み可能な CD は一度しか 書き込めません。したがって、空のファイルシステムを書き込んでしまうと、 フォーマットこそされますが、永遠に空っぽのままになってしまいます。 同じことは書き換え可能なメディアについても言えます。 というのも、任意のセクタを変更することはまだできず、 全体の内容を消さなければならないからです。

したがって、必要となるのはファイルを CD に書き込むための ファイルシステムを作るツールです。このツールは mkisofs と呼ばれます。このツールの使用例を以下に示します:

mkisofs  -r   -o cd_image   private_collection/
              `---------'   `-----------------'
                   |               |
               書き込み先   入力に使うディレクトリ

オプション `-r' は CD 上の全てのファイルのパーミッションを誰でも読める ように設定し、RockRidge 拡張を有効にします。自分が何をしているのかを 完璧に把握している人ならともかく、普通はこのオプションを使うとよいでしょう (ヒント: `-r' がないと、マウントポイントは private_collection のパーミッションを拾ってしまいます!)。

mkisofs は全てのファイル名を DOS が使う 8.3 形式に対応させようとします。これは互換性をできるだけ高めるためです。 名前が重なった場合 (別のファイルが同じ 8.3 形式の名前になった場合) には、 ファイル名に数字が使われ、決まったファイル名に関する情報が標準エラー出力 (通常は画面) に出力されます。でもあわてないでください。 Linux 上では、このようなへんてこな 8.3 形式のファイル名を見ることはありません。 というのも、Linux は元のファイル情報 (パーミッション、ファイル名など) を持っている Rock Ridge 拡張を使うからです。

さらに Windows との親和性が高い CD-ROM を作りたい場合は、 -J オプション (マイクロソフトの Joliet 拡張) か、mkhybrid を使ってください。 Macintosh で使われている HFS CD-ROM の場合は、 mkisofs の姉にあたる mkhybrid のマニュアル・ページを読んで、 いろんなオプションについて詳しく調べたほうがいいでしょう。

もしかすると、mkisofs の出力が直接 CD ライタデバイスに 送られないのはどうしてかと思うかもしれません。これには 3 つの理由があります:

CD-R を一気に焼く方法があります。これを以下で説明します。

追加のパーティションを作成し、ファイルではなくそのパーティションへ イメージを書き込もうと思うかもしれません。筆者はこういったやり方には反対です。 というのも、コマンドをタイプミスして 間違ったパーティションに書き込みを行ってしまうと、 Linux システムが全て壊れてしまうからです (注意! 私はやってしまいました…)。 また、これはディスク容量の無駄使いです。なぜなら、CD イメージは一時的 なデータであり、CD への書き込みを行った後は削除できるからです。しかし、 raw パーティションを使えば、650MB のサイズのファイルを消す時間を 節約することができます。

CD イメージのテスト

Linux は、(CD イメージ)ファイルを あたかもディスクのパーティションであるかのように マウントできます。この機能は、CD イメージのディレクトリ構成やファイル のパーミッションが希望通りかどうかを確認する時に便利です。現在は メディアも非常に安くなりましたが、それでも書き込みにはとても時間がかかるので、 少なくとも簡単なテストを行って、時間を節約するとよいでしょう。

これまでの作業で作った cd_image/cdrom ディレクトリにマウントするには、以下のコマンドを使います:

mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

ここで /cdrom 以下のファイルを詳しく調べます。これは焼きあがった CD-ROM にあるものと全く同じです。CD イメージをアンマウントするには、 umount /cdrom を使います。(警告: 2.0.31 以前の Linux カーネルでは、 /cdrom の最後のファイルを完全には読めません。ですから 2.0.36 といったもっと新しいカーネルを使ってください。 cdrecord では -pad オプションはオーディオ CD にしか使えず、mkisofs で -pad オプションを使うにはパッチを当てる必要があります。 このパッチを当てる作業は、バグのない Linux カーネルに更新するより大変です。:-)

注意:

古いバージョンの mount にはループバックデバイスを 扱えないものがあります。このような古いバージョンの mount を使っているなら、Linux システム自体を新しくしましょう。 最新の mount ユーティリティの入手に関する情報をこの HOWTO に入れようと 提案してくれた方は今までに何人もいますが、筆者は必ず断っています。 お使いの Linux ディストリビューションに古すぎる mount が付属しているのなら、それはバグとして報告すべきです。

作りの悪い Linux ディストリビューションのバグを回避するために 必要な情報を全て載せてしまったら、 この HOWTO はとても長く読みにくくなってしまいます。

CD イメージを CD に焼く

データを焼く場合に最もよく使われるのは TAO モードなので、 この章では TAO モードでのデータ CD の焼き込みだけを扱っています。 TAO と DAO の違いについてもっと詳しく知りたければ、 オーディオ CD-R に関する節を読んでください。 cdrdao で DAO モードを使った場合は、 ダミーのオーディオ・トラックを TOC ファイルの最後に付けるのを忘れずに。 (README 参照)

やることはもうあまり残っていません。まだやってなければ、そろそろ 次のコマンドを実行してみましょうか:

cdrecord -scanbus

このコマンドは CD ライタがどの SCSI デバイスに接続されているかを 表示します。こういった情報の推定は cdrecord で非常にうまくできるので、 他の方法はこの HOWTO から消しました。

CD を焼くという最後のコマンドを実行する前に、CD ライタには 定常的にデータを流すことが必要だということを注意してください。 したがって、CD イメージを CD に書き込む処理の妨害をしてはいけません。 さもないと、焼き損ねの CD ができてしまいます。 巨大なファイルを削除すれば簡単にデータの流れを止めることができます。 例: 古い CD イメージ、つまり 650MB の大きさのファイルを削除すると、 カーネルはハードディスク上の 650,000 ブロック分の情報を更新しなければなりません (このファイルシステムでは 1 ブロックが 1KB であるものとします)。 これにはある程度の時間がかかり、 ディスクの動作が遅くなってデータの流れが数秒間止まることもありえます。 しかし今時のマシンでは普通、メールを読んだり、WWW をブラウズしたり、 カーネルを再構築したくらいでは書き込みに影響しません。

邪魔が入った時にレーザーの位置を直し、 CD 上の邪魔が入る前の位置から焼き続けることができる CD ライタなど存在しない点に注意してください。 したがって、強い振動や機械的な衝撃があると、 書き込み中の CD は壊れてしまうでしょう。

心の準備ができれば、さぁ魔法使いの黒いローブをまとい、 CD ライタの SCSI ID と SCSI のリビジョンの数字を掛け合わせて その数だけロウソクを灯し、ASR-FAQ (newsgroup alt.sysadmin.recovery) にあ る 2 つの文句を唱えた上で、最後のコマンドを入力します:

(訳注: 日本のユーザであれば、 鯛と神酒を供え、四方に盛り塩をし、滝に打たれて瞑想しておくのもいいでしょう)

shell> SCSI_BUS=0   # リスト 1 の "scsibus0:" の部分を見た
shell> SCSI_ID=6    # リスト 1 の "TOSHIBA XM-3401" の部分を見た
shell> SCSI_LUN=0
shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
                   -data  cd_image

# 上のコマンドと同じ意味ですが、こちらの方が短い
shell> cdrecord -v speed=2 dev=0,6,0  -data  cd_image

読みやすさを高めるために、CD ライタの SCSI バス上の位置は、自然な名前の 3 つの 環境変数 (SCSI_BUS, SCSI_ID, SCSI_LUN) に格納されます。

cdrecord を使って CD-RW を上書きする時には、古い内容を消すために ``blank=...'' というオプションを指定しなければなりません。CD-RW の中身を 消すための色々な方法については、オンラインマニュアルを見てください。

筆者以外のは人はみんな 400MHz のマシンを持っているのではないかと 時々思うのですが、多くの人は mkisofs の出力を直接 cdrecord に 送り込んでいます:

shell> IMG_SIZE=`mkisofs -R -q -print-size private_collection/  2>&1 \
| sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r  private_collection/  \
|cdrecord  speed=2  dev=0,6,0
            tsize=${IMG_SIZE}s  -data  -
#         s を忘れないこと --^         ^-- 標準入力からデータを読む

最初のコマンドはイメージの大きさを調べるためにカラ実行 (dry-run) します (これを行うには、cdrecord のパッケージに入っている mkisofs が必要です)。 お使いの CD ライタは書き込むイメージの大きさを知る必要がないかも しれませんが、そういう場合は、カラ実行してみる必要はありません。 実際に実行する時に使う引数を全部指定しなければいけません (-J とか -hfs)。 出力されたサイズは cdrecord に tsize パラメータとして渡されます (この値は環境変数 IMG_SIZE に格納されます)。2 番目のコマンドは mkisofs と cdrecord をパイプ経由で組み合わせて並べたものです。

3.2 オーディオ CD の書き込み

オーディオ CD の書き込みは、既に説明したデータ CD の書き込みの手順と よく似ています。 書き込む方法には DAO と TAO の二種類があります。 TAO (track at once) は音楽用途にはあまり向いていません。 TAO でオーディオ CD を焼くと、 トラック (曲) ごとに「プチッ」という音が聞こえてしまうからです。 ともあれ、TAO のほうがちょっとだけ扱いやすいし、 DAO はまだすべてのドライブで扱えないので、 TAO のほうを最初に解説します。

データ CD-R に書き込むときとの主な違いは、イメージのフォーマットです。 オーディオ CD プレイヤーはファイルシステムを扱えませんから、 ISO-9660 (や、何でもいいですからお好みのファイルシステム) ではうまくありません。 その代りに、オーディオ・データは 「44100 サンプル/秒(44.1 kHz)で PCM コーディング された 16 ビットステレオのサンプル音声」で書き込む必要があります。

サウンドファイルを必要なフォーマットに変換するユーティリティのひとつに sox があります。sox の使い方は簡単です:

shell> sox  killing-my-software.wav  killing-my-software.cdr

このコマンドは killing-my-software という歌を WAV 形式から CDR 音声形式に 変換します。sox が認識するファイル形式とファイル名の拡張子については オンラインマニュアルを見てください。 手作業での変換結果を出力するには大量のディスク容量が必要なので、 cdrecord には WAV, AU フォーマットを読み込む機能が組み込まれました。 したがって、音声ファイルの拡張子が .wav または .au (かつサンプルレートが 「ステレオ、16 ビット、44.1 kHz」)ならば、 手作業で CD-R フォーマットに変換しなくても、 オーディオ・トラックとして使うことができます。 ただ、cdrecord の制約として、 音声データの大きさが 2352 バイトの整数倍、かつ 705,600 バイト以上の 大きさである必要があります。 WAV ファイルの全てが必ずしもこうなっているわけではありません。 そういうファイルの場合は、sox を使って 2362 バイトの整数倍の大きさにまで、オーディオ・データに余白を入れて 引き延ばす必要があります。

オーディオ CD の書き込み (TAO)

TAO モードの場合、 オーディオ CD は各曲独立したイメージから成るオーディオ・トラックで 構成されます。 CD に 10 曲入れたいなら、イメージを 10 個作るわけです。

cdrecord は、-audio オプションが指定されるとオーディオトラックを CD イメージとして書き込みます。他のオプションについてはデータ CD を書き込む時と同じです (非常に特殊な要求がある場合は除きます)。 以下の 3 つの例は全て同じ処理を行いますが、 トラックの読み込みは異なる形式のサウンドファイルから行われます:

shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.cdr track2.cdr...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.wav track2.wav...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.au  track2.au...

こうすれば、各曲の間に 2 秒ずつ間をあけたオーディオ CD を作れます。 cdrecord が直接読めない重要なファイルフォーマットの一つが MPEG Layer 3 です。 このフォーマットを CD-R フォーマットに変換するには、 ``mpg123 --cdr - track1.mp3 > track1.cdr'' としてください。 --cdr オプションで、エンコードしたいフォーマットを指定します(上記参照)。 古いバージョンの mpg123 だと、標準出力に出すには、 ただの - でなく -s オプションを付けます。 逆方向の変換 (WAV を MPEG にする) には、 WAV ファイルを LAME で処理してください。

多数の MP3 ファイルからまとめて CD-R を作るには、 以下のコマンド列を使います:

for I in *.mp3
do
    mpg123 --cdr - "$I" | cdrecord -audio -pad -nofix -
done
cdrecord -fix

マシンの速度によっては、書き込み速度を ``speed=1'' (cdrecord のオプション) に落とす方がよいかもしれません。``speed=4'' を使うと、マシンは MP3 ファイルを 4 倍速で演奏できなければなりません。mpg123 は CPU 時間 を大量に消費します! どうすべきか分からなければ、-dummy コマンド (レーザーのスイッチを切ったままにする) を指定して cdrecord をカラ実行してください。

DAO

オーディオトラック間の無音部分をなくしたければ、disk-at-once (DAO) 書き込みを使わなければなりません。これは既に説明した(トラックを一つずつ焼く) track-at-once (TAO) 録音の反対です。DAO のサポートは現在 cdrdao が最も進んでいます。詳しくは cdrdao のホームページを見てください。

DAO モードで CD マスターを作るなら、 単一のイメージ (音声ファイル) にし、 設定ファイルでコントロール・トラック情報を与えてください。

CD_DA
TRACK AUDIO
FILE "live.wav" 0 5:0:0
INDEX 3:0:0
TRACK AUDIO
FILE "live.wav" 5:0:0 5:0:0
TRACK AUDIO
FILE "live.wav" 10:0:0 5:0:0
INDEX 2:0:0

3.3 混合モードの CD-ROM

この話題については書くことはあまりありません。-data オプションや -audio オプションを使って、(後に続く)イメージの種類を指定するだけです。 例を以下に示します:

cdrecord  -v dev=0,6,0  -data  cd_image  -audio  track*.cdr


次のページ 前のページ 目次へ