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

3. CD-R を焼く

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

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

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

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

CD に焼くためのデータの収集には普通,思っているより時間がかかります. 一度 CD を書き込んで,固着させてしまったら,足りないファイルを追加する ことはできないことに注意してください. また,ISO-9660 ファイルシステムの情報を持つために CD の空き容量がある 程度(普通は数 MB)使われてしまうことを覚えておいてください.620 MB のデー タなら確実に 650MB の CD-R に収まるでしょう.

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

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

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

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

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 拡張を使うから です.

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

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

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

CD イメージのテスト

Linux は,ファイルがまるでディスクのパーティションであるかのようにマウ ントできます.この機能は,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 に焼く

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

cdrecord -scanbus

このコマンドは CD ライタがどの SCSI デバイスに接続されているかを表示し ます.こういった情報の推定は cdrecord で非常にうまくできるので,他の方 法(特に汎用 SCSI デバイスを指定するといったいくらか危険な方法)はこの 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 ライタのパラメータは自然な名前の 3 つの環 境変数(SCSI_BUS, SCSI_ID, SCSI_LUN)に格納されます. オプション -data は必須ではありませんが,オーディオ CD を焼く時のコマ ンドラインと区別しやすくするために指定しています.

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 を忘れないこと --^         ^-- 標準入力からデータを読む

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

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

オーディオ CD の書き込みは,既に説明したデータ CD の書き込みの手順とよ く似ています.主な違い は 2 つあります.一つはオーディオ CD はオーディオトラックで構成される 点です.これは別々のイメージとして用意します.したがって,CD にトラッ クを 10 個置くつもりならば,イメージを 10 個作らなければなりません.も う一つの相違点は,イメージのフォーマットが 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」)ならば,手動で変換しなくてもイメー ジとして使うことができます.

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...

大きな例外の一つは MPEG レイヤ 3 ファイルです.このファイルは "mpg123 -s track1.mp3 > track1.cdr" というコマンドで CD 形式 に変換することができます.(警告: このコマンドはバイト順をある順序にし てファイルを生成しますが,cdrecord に -swab オプションを付けてバイト順 を入れ換える必要があります.) この逆向きの変換は,WAV ファイルに対して "8hz-mp3" を使うことによって行えます(cdda2wav を使ってオーディオ CD か らトラックを吸い出し,8hz-mp3 を使ってこれを MP3 にエンコードします). たくさんの MP3 ファイルからまとめて CD-R を作るには,以下のコマンド列 を使います:

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

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

DAO

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

read-cd オプションを使うことにより,オーディオ CD をまるごとコピーする こともできます.

3.3 混合モードの CD-ROM

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

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


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