CD-Writing HOWTO Winfried Tru"mper v2.8.8, 19 September 1999 Yoshinori Mamoto and the JF Project v2.8.8j, 12 October 1999 この文書は CD-ROM を Linux 上で焼く方法を説明します. ______________________________________________________________________ 目次 1. はじめに 1.1 著作権,ライセンス,利用条項 1.2 筆者への連絡 1.3 お勧めの資料 1.4 用語集 ... レーザー出力最大 ... 発射! 1.5 サポートしている CD ライタ 1.6 サポートされている「機能」 1.7 メーリングリスト 2. CD-ROM を焼くための Linux の設定 2.1 Linux カーネルの設定 2.1.1 バージョン 2.2.9 までのカーネルについての特別ヒント 2.1.2 2.2.10 以降のカーネルについての特別ヒント 2.1.3 2.0.x 系列のカーネルについての特別ヒント 2.2 ハードウェアとデバイスファイル 2.2.1 IDE/ATAPI 接続の CD ライタ 2.2.2 SCSI 接続の CD ライタ 2.2.2.1 汎用 SCSI デバイス 2.2.3 パラレルポート用の CD ライタ 2.3 CD-R を焼くためのユーザソフトウェアの入手 2.3.1 コマンドライン用ユーティリティ 2.3.2 GUI (無くてもかまいません) 3. CD-R を焼く 3.1 CD-ROM (データのみ)を焼く 3.1.1 後で CD-ROM となるイメージの作成 3.1.2 CD イメージのテスト 3.1.3 CD イメージを CD に焼く 3.2 オーディオ CD の書き込み 3.2.1 DAO 3.3 混合モードの CD-ROM 4. 親愛なる Winfried へ... 4.1 焼き付けとはどれくらい厳しい処理なんでしょうか? 4.2 ファイルの断片化で性能に悪影響が出ますか? 4.3 UMSDOS ファイルシステム上に CD イメージを置けますか? 4.4 ISO-9660 の制限を回避する方法は何かありますか? 4.5 オーディオ CD からトラックを読み出す方法は? 4.6 起動後に SCSI デバイスを検出する方法は? 4.7 データ CD をまるごとコピーすることはできますか? 4.8 Linux で Joliet 形式の CD-ROM は読めますか? 4.9 CD ライタを使って CD-ROM の読み取りやマウントをする方法は? 4.10 CD-R にもっとたくさんのデータを詰め込むには? 4.11 起動可能な CD-ROM を作る方法は? 4.12 何らかの方法で書き込みができる CD-ROM を作るには? 4.13 複数個の CD ライタを同時に使うことはできますか? 4.14 どのメディアが一番良いでしょうか? 4.15 Solaris, *BSD, AIX, HP-UX 等についてはどうでしょう? 4.16 ローカルの設定をずっと保存しておく場所は? 4.17 どうすれば CD の情報を取り出すことができますか? 4.18 再書き込みに関して 4.19 マルチセッション CD の作り方は? 5. トラブルシューティング 5.1 Linux 上で動作しません 5.2 No read access for 'dev=0,6,0' というエラーが出る 5.3 DOS とその仲間の OS で動作しません 5.4 書き込みの際に SCSI エラーが起こる 6. 謝辞 7. 日本語訳について ______________________________________________________________________ 1. はじめに Linux を使って CD-ROM を焼いている人はたくさんいます.というのも,信頼 性が高くてしかも簡単だからです.CD を焼いている時にブルースクリーンに なったりしませんし,ハードとソフトの正しい組合せを探していて頭が痛くな ることもありません.一度ちゃんと設定すれば,後は正しく動いてくれます. この CD-Writing-HOWTO では,設定の方法とメディアにデータを載せる方法, 親切な読者が教えてくれた面白いアプリケーションを紹介します. 1.1. 著作権,ライセンス,利用条項 Copyright Winfried Tru"mper 1996,1997,1998,1999. All rights reserved. Redistribution and use, with or without modification, are permitted provided that the name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. In this sense, translations are welcome and need not to be authorized by me. The author disclaims all warranties with regard to this document, including all implied warranties of merchantability and fitness for a certain purpose; in no event shall the author be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use of this document. 要するに: 自分自身の責任でこの文書を読んだり使ったりしてください.返金 保証はありません. 1.2. 筆者への連絡 筆者は CD-Writing HOWTO に関するメールを毎年数百通受け取ります.ですか ら返事は辛抱強く待ってください.筆者は必ずしも数時間以内に返事をかけま せんから.しかし筆者の CD-R キューに入っているものについては,即座に読 んで返事を出しています.質問をする前には,この文書の最新版を見ているこ とを確かめてください.最新版は常に から入手できます. 1.3. お勧めの資料 CD-R FAQ は記録可能な CD-ROM(CD-R)や CD ライタ,必要なソフトウェアに関する一般的な FAQ です.ほとんどの CD ライタは CD-ROM の読み取りもできるので, Linux CD-ROM HOWTO, Linux SCSI HOWTO, Linux Kernel HOWTO も読んでおくといいでしょう. 1.4. 用語集 ... レーザー出力最大 ... 発射! CD-ROM は Compact Disc Read Only Memory(読み取り専用のコンパクトディス ク)の略で,銀色に光る円盤上の微小な穴を光レーザーで読み取る仕組みの記 録メディアです.銀色の光はキャリアであるアルミニウム層から出ています. 穴はビットデータを記録してますが極めて小さいので,たくさん(数十億個)の 穴をディスクに置くことができます.だから CD は大容量記録メディアなので す. CD-R は CD-ROM recordable(記録可能なCD-ROM)の略であり,表面に「微小な 穴」がない CD のことです.したがって,これは空っぽです.ただし CD-R に は銀色のアルミ層の代わりに穴を焼き付けることができる特殊な(色付き)フィ ルムが入っています.この焼き付けは,普通は微小な穴を調べるためだけのレ ーザーに,穴を焼き付けられるように少し多めにパワーを与えることで行いま す.この動作は CD-R では一度しか行えません.ただし,残った部分には後か ら追加書き込みを行うことができます.これにより,いわゆるマルチセッショ ン CD(multi-session CD) を作れます. CD-ROM rewritable(再書き込み可能な CD-ROM, 略称は CD-RW)は,CD-R メ ディアの制限を回避するために作られたものです. CD-RW ライタを使うと, レーザーでメディアに穴を焼き付けるだけでなく,メディアをレーザーで融か して元の状態に戻すこともできます.これができるのは,実際にはレーザーが メディアを焼いて穴を開け,メディアが煙になって消えたりしていないからで す.この技術の分かりやすい例えとしては,アイスホッケーのゲームがありま す: 氷の上を滑ることによりプレイヤー(レーザー)は氷に傷を残します. 氷(メディア)上のパターンは,1 ラウンドの間に氷の上で起きたことの記録で す.ゲームのピリオド間には Zamboni と呼ばれる清掃車が氷の上を走り,氷 のごく表面に近い層を融かすことによって傷を埋めていきます. (Zamboni は アイスホッケー場で使われている清掃車のブランド名です.) このようにして 氷の上のパターンは消され,新しいラウンドが始められるようになりま す.(気化,液化,)融解,凍結に対する科学用語は「相変化」なので, CD-RW ライタは「相変化デバイス」と呼ばれます. この HOWTO 文書は CD-R と CD-RW への書き込み作業を扱います.戦闘ブリッ ジへようこそ,艦長. 1.5. サポートしている CD ライタ 最近の IDE/ATAPI 接続のライタと SCSI 接続のライタは Linux 上で動作する と思って差し支えありません.最近のドライブのほとんどは MMC 準拠であ り,したがってサポートされています.ある CD ライタの SCSI 版が動作すれ ば, IDE/ATAPI 版もほぼ確実に動作しますし,その逆も成り立ちます.しか し,自分が使っているライタの正確なモデル名を何らかの互換リストで見て安 心したがっている人も一部にいます.ですから,私も以下のリストをこの HOWTO から削っていません. 以下に挙げるのは,cdrecord で動作することが報告されたドライブをざっと まとめたものです: Acer: CDRW 6206A BTC: BCE 621E (IDE) Compro: CW-7502, CW-7502B Creative: RW 4224E, MK 4211 Dysan: CRW-1622 Elite: Elite b444.41 Grundig: CDR 100 IPW Guillemot: Maxi CD-R 4X/8X HP: SureStore 4020i, SureStore 6020i, C4324, C4325 CD-writer+ 7100, CD-writer+ 7200i, CD-writer+ 7500e, CD-writer+ 8100i, CD-writer+ 8110i, Hi-Val: CDD 2242, CDD-3610, JVC: XR-W2001, XR-W2010, XR-W2042, R-2626 Kodak: PCD 200, PCD 225, PCD 260, PCD 600 Matsushita: CW-7502 Memorex: CRW-620, CRW-1622, CRW-2224 Microboards: PlayWrite 2000, PlayWrite 4000RW, PlayWrite 4001RW MicroNet: MasterCD Plus 4x4, MasterCD Plus 4x6 Mitsubishi: CDRW-226 Mitsumi: CR-2401-TS, CR-2600 TE, CR-2801 TE, CR-4801 TE, CR-4802 TE Nomai: 680.RW Olympus: CDS 615E, CDS 620E Optima: DisKovery 650 CD-R OTI: CDRW 965, CDRW 975 (Socrates 1.0) Panasonic: CW-7502, CW-7582 Philips: CDD-521/10, CDD-522 CDD-2000, CDD-2600, CDD-3600, CDD-3610 Omniwriter 26, Omniwriter 26A Plasmon: CDR 480, CDR 4220, RF-4100, RF-4102, CDR 4400 Plextor: CDR PX-24 CS, PX-412 C, PX-R412 C PX-R810Ti, PleXwriter 412C Procom: PCDR 4 Ricoh: RO-1420C+, MP 1420C, MP 6200S, MP 6201S, MP 7040A Samsung: SW-204 Sanyo: CRD-R24S Smart and Friendly: CD-RW226, CD-R1002, CD-R1002/PRO, CD-R1004, CD-R2004, CD-R2006 PLUS, CD-R2006 PRO, CD-R4000, CD-R4006, CD-R4012 Sony: CDU 920S, CDU 924, CDU 926S, CDU-928E, CDU 948S, CDRX 100E, CDRX 120E Taiyo Yuden: EW-50 TEAC: CD-R50S, CD-R55S, CDR-55S, CDR-56S-400 Traxdata: CRW 2260, CDR 4120, CDR 4120 Pro, CDRW 4260, Turtle Beach: 2040R WPI (Wearnes): CDRW-622, CDR-632P YAMAHA: CDR-100, CDR 102, CDR-200, CDR-200t, CDR-200tx CDR-400, CDR-400c, CDR-400t, CDR-400tx, CDR-400Atx CRW-2260, CRW-2260t, CRW-4250tx, CRW-4260 t, CRW-4260 tx, CRW-4261, CRW-4416 S 表: Linux が対応している CD ライタ 各種 UNIX 系 OS で動作したこと,あるいは動作しなかったことが報告された モデルの詳細なリストは, からオンラインで入手できます. お使いのハードウェアがサポートされていなくても,Linux を使って CD のイ メージを作成することができます.DOS 用 CD 書き込みソフトウェアのほとん どは RockRidge 拡張を扱えないので Linux を使うといいでしょう.Linux で イメージを作った後のステップとして,DOS や Macintosh のソフトウェアを 使って CD-R にイメージを書き込むのです. 1.6. サポートされている「機能」 CD-R を書き込むためのユーティリティは 2 種類あります.すなわちハード ウェアドライバとデータフォーマッタです.ハードウェアドライバは以下の機 能をサポートします: サポートする機能 cdwrite-2.1 cdrecord-1.6 cdrdao ---------------------------------------------------------- IDE/ATAPI × ○ ○ パラレルポート × ○ ○ CD-RW × ○ ○ オーディオ CD ○ ○ ○ データ CD-ROM ○ ○ 一部 マルチセッション 一部 ○ × TAO (Track at once) ○ ○ ○ DAO (Disk at once) × × ○ 表: cdwrite は既にメンテナンスされなくなっているソフトウェアで,表を作るた めだけに入れています.その代わりとしては cdrecord を使ってください.と いうのも,こちらの方が多くのハードウェアに対応していますし,機能も盛り だくさんだからです.cdrdao の主な利点は,トラック間に 2 秒間の無音状態 が入らない CD を作る機能です(disk-at-once モードの書き込み). 「データフォーマッタ」に分類されるツールは,メディア上のデータを組織化 してまとめます(「データをファイルシステム上に置きます」). 機能 mkisofs mkhybrid ---------------------------------------- ISO 9660 ○ ○ RockRidge ○ ○ El Torito ○ ○ HFS × ○ Joliet ○ ○ マルチセッション ○ ○ 表: ISO-9660 ファイルシステムと ext2 ファイルシステムとの最も大きな違い は,一度 ISO-9660 に書き込むとファイルの修正ができない点です.ISO-9660 ファイルシステムにはその他に以下のような制限があります: o サブディレクトリを(トップレベルから数えて) 8 階層までしか作れない o ファイル名の最大長が 32 文字 o 容量が 650 MB である RockRidge は,ISO-9660 ファイルシステムで長いファイル名と深いディレク トリ階層を扱えるようにする拡張です.RockRidge 拡張で焼かれた CD-ROM を Linux で読む時には,所有者,グループ,パーミッション,シンボリックリン クといったファイル属性は全て見えます(Unix のファイルシステムのように見 えます).この拡張は,DOS や Windows 系の OS で CD-ROM を読み取る時には 使えません. El Torito を使うと起動可能な CD-ROM を作れます.この機能を使うために は,お使いの PC の BIOS がこの機能をサポートしていなければいけません. 大まかに言うと,CD-ROM の最初の 1.44 MB の部分に(サポートされていれば 2.88 MB の部分も),用意しておいたフロッピーディスクのイメージを入れま す.BIOS はこのイメージをフロッピーのように扱い,そこから起動しま す.(その結果,この仮想的なフロッピーから起動している途中は,元々のド ライブ A: (/dev/fd0) にはアクセスできません.) HFS を使えば Macintosh 上で HFS (MacOS のネイティブなファイルシステ ム)同様に CD-ROM を読むことができます. Joliet は(代表的な機能として),最近の Windows 系 OS (95, 85, NT)で長い ファイル名を使えるようにします.しかし筆者は,素の DOS や Windows 3.11 で長いファイル名を使えるようにするツールを全く知りません. 名前を出したソフトウェアについては,2.8 節でまとめます. 1.7. メーリングリスト (活発に手伝うという意志を持って)開発チームに参加しようと思うなら,本文 に subscribe と書いたメールを cdwrite-request@other.debian.org に送っ てください. 2. CD-ROM を焼くための Linux の設定 この章は全ての種類の 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 といった形で得られることがよくあり ます. 2.1. Linux カーネルの設定 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 といった他の文書を読むか,友達の助けを求めるべきでしょう.カーネ ルがシステムの中心部分であることを忘れてはいけません. 2.1.1. バージョン 2.2.9 までのカーネルについての特別ヒント 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 のカーネルの問題です.考えられる 解決方法を以下に示します: o cdrecord を再コンパイルして,linux/include/scsi/sg.h にある実際の値 に合わせれば,問題が解決するかもしれません.これらの値は駄目な sg インタフェースのために,実行中のカーネルの値になっているはずです. o ローダブルモジュールの sg ドライバが DMA で使うのにに十分なメモリを 取得できなければ,問題が起こることがあります(バージョン 2.2.5 まで のカーネルの場合). 2.1.2. 2.2.10 以降のカーネルについての特別ヒント 筆者への報告によると,2.2.10 以降のカーネルは 2.0.x 系列のカーネルのオ プションと 2.2.x 初期のカーネルのオプションを両方持っているとのことで す.筆者は 2.0.37 のように,どのデバイスをどのドライバで制御するか指定 する方法をお勧めします.以下にその方法を示します: 2.1.3. 2.0.x 系列のカーネルについての特別ヒント 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) 2.2. ハードウェアとデバイスファイル 必要なドライバを全てインストールしたら,新しいカーネルを起動します.こ のカーネルは以下の章で必要となる全ての機能を持っているはずです. [ 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 2.2.1. IDE/ATAPI 接続の CD ライタ ATAPI は IDE デバイスの拡張であり,最近の IDE デバイスは全て ATAPI に なっています.この拡張を使うと,IDE バス上で SCSI プロトコルを使うこと ができます.カーネルの ide-scsi モジュール(IDE コントローラを部分的に SCSI コントローラに変えます)と組み合わせると,IDE/ATAPI デバイスを SCSI デバイスのように扱うことができます.したがって,単にこのモジュー ルをロードし,SCSI の CD ライタを持っているかのように操作してくださ い. 2.2.2. SCSI 接続の CD ライタ お使いの CD ライタをコンピュータの BIOS が認識していることを確かめてく ださい.ハードウェア自体をコンピュータが認識していないと,先に進んでも 無意味です(何も言われなかったことを認められたことの印と解釈してはいけ ません.画面にメッセージが表示されることが必要です). SCSI をパラレルポートに接続するつもりならば(パラレルポート用の IDE ド ライブと混同しないでください),特殊なアクティブケーブルと特殊なカーネ ルドライバが必要です.この方法について調べるなら を読んでください. 2.2.2.1. 汎用 SCSI デバイス 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 2.2.3. パラレルポート用の CD ライタ これについてはさっぱりわかりません.ごめんなさい. を見るか,ローカルファイル /usr/src/linux/Documentation/paride.txt を見てください. 2.3. CD-R を焼くためのユーザソフトウェアの入手 CD-ROM を作成するためのツールに関する詳しい調査の結果が にあります. 2.3.1. コマンドライン用ユーティリティ CD-R のイメージ(データ CD-ROM の場合のみ)を生成するためには,以下の パッケージのいずれかが必要です: (mkisofs) (mkhybrid) イメージを CD-R に焼くためには,以下のパッケージのいずれかが必要です: (cdrecord) (cdrdao) (古い)mkisofs のオンラインマニュアルにはバージョン 1.5 の cdwrite が必 要だと書かれていますが,これを信じてはいけません.黙って cdrecord を 使ってください.それで大丈夫です.新しいバージョンの cdrecord には改良 版の mkisofs が付属していることと,他では見つからない追加ツールがいく つか misc ディレクトリ(readcd, isosize)にあることに注意してください. 2.3.2. GUI (無くてもかまいません) Linux においては,フロントエンドは本当にフロントエンドです.つまり,フ ロントエンドがあってもコマンドライン用のユーティリティはインストールし なければならないのですが,使う時の見栄えがよくなります. X-CD-Roast は Linux で CD を簡単に作成するためのプログラムパッケージで す.これは cdrecord や mkisofs のようなコマンドライン用のツールと組み 合わせて使い,使いやすい GUI を提供します. BurnIT は cdrecord の JAVA 版フロントエンドであり, cdda2wav-0.95 を加 えれば UNIX 環境で CD を焼くための完全な環境が作れます.これは から入手できます. XDaodio これは cdrdao のグラフィカルフロントエンドです.このパッケージの主な目 的は,オーディオ CD をまるごとコピーすることです. 3. CD-R を焼く 「もしおまえを煙と化すなら,焼き上がる間にフィードルでも奏で て時を過ごそう」 (ローマ皇帝ネロが A.D. 64 年に彼のクラシッ ク CDを焼いた時の言葉です.彼は完璧に考え違いをして,ローマ を焼き払っちゃたんですけどね) Linux 上での CD-ROM 作成は 2 つの手順で行います: o 必要なデータ(ファイルや音楽,あるいはその両方)を特殊なフォーマット のファイルにパッケージングする o cdrecord ユーティリティを使って,このデータをファイルから CD-R に書 き込む この章では,データ CD とオーディオ CD を焼く手順を詳細に説明します. 3.1. CD-ROM (データのみ)を焼く CD に焼くためのデータの収集には普通,思っているより時間がかかります. 一度 CD を書き込んで,固着させてしまったら,足りないファイルを追加する ことはできないことに注意してください.また,ISO-9660 ファイルシステム の情報を持つために CD の空き容量がある程度(普通は数 MB)使われてしまう ことを覚えておいてください.620 MB のデータなら確実に 650MB の CD-R に 収まるでしょう. 3.1.1. 後で 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 つの理由があります: o mkisofs は CD ライタの駆動について何も知らない o イメージを焼く前にはテストをする方がよい o 遅いマシンだと信頼性が低い(4 章を参照) CD-R を一気に焼く方法があります.これを以下で説明します. 追加のパーティションを作成し,ファイルではなくそのパーティションへイメ ージを書き込もうと思うかもしれません.筆者はこういったやり方には反対で す.というのも,(入力ミスのせいで)間違ったパーティションに書き込みを行 うと, Linux システムが全て壊れてしまうからです(注意: 私はやってしまい ました…).また,これはディスク容量の無駄使いです.なぜなら,CD イメー ジは一時的なデータであり,CD への書き込みを行った後は削除できるからで す.しかし, raw パーティションを使えば,650MB のサイズのファイルを消 す時間を節約することができます. 3.1.2. 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 はとても長くて 読みにくくなってしまいます. 3.1.3. 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 が作られます. 3.2.1. 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 4. 親愛なる Winfried へ... この章はいわゆる「良く聞かれる質問とその答え(FAQ)」です.ご主人や奥さ ん,お子さんや犬などについての問題があり,それが CD-R 作成に関わること かそうでなくても面白いことであれば,ぜひ送ってください. 4.1. 焼き付けとはどれくらい厳しい処理なんでしょうか? 実際に試してください.cdrecord の -dummy オプションを使って,カラ焼き をします.同時に他の考え付く処理を全て実行し,CD を焼く処理が生き残る かどうかを見てみましょう. mkisofs から直接 cdrecord にデータを送る場合には,locate データベース の更新などのディスクに負荷をかける処理によって最大フローレートが小さく なってしまい,CD を焼き損ねることがあります. CD-R を焼いている最中に cron, at, anacron がこういったプロセスを起動しないように確認しておくべ きでしょう. 4.2. ファイルの断片化で性能に悪影響が出ますか? ファイルの断片化は通常は小さいので,気付かない程度の影響しかありませ ん.しかし,断片化が異常な状態を作ることは容易です.この場合には,ハー ドディスクのスループットは 100 kB/秒以下になります.ですから,そんなこ とをしてはいけません :-) もちろん,何年も使っているとハードディスク上 のファイルは断片化してきます.ファイルシステムがいっぱいになっていると 断片化も早くなります.常に 10% から 20% の空き容量を残していれば,CD-R についてはうまく動作するはずです. 不安であれば,起動時に出力されるメッセージを見ましょう.断片化のパーセ ンテージがファイルシステムのチェックの時に出力されます.以下の危険なコ マンドを使ってこの値をチェックすることができます: shell> e2fsck -n /dev/sda5 # '-n' が重要! [途中は省略 -- エラーが出ても無視してください] /dev/sda5: 73/12288 files (12.3% non-contiguous) この例ではファイルの断片化がかなり多くなっているように見えますが,この ファイルシステム上には,非常に小さいファイルがたったの 73 個あるだけで す.したがって,断片化の率は特に気にするほどではありません. ext2 ファイルシステムのデフラグ(断片化をなくす)のための e2defrag とい う実験的なツールがあります.現在のバージョンは個人的な環境で使うだけに しても信頼性が十分でありません.本当にファイルシステムのデフラグを行い たいのなら,ファイルシステムのバックアップを取り(できれば 2 つ),この データの書き戻しの練習を行った上で,新しいファイルシステムを作成し (こ れにより古いファイルシステムは消えます),データを書き戻してください. これが現時点で最も安全な方法です. 4.3. UMSDOS ファイルシステム上に CD イメージを置けますか? できます.信頼性が低く,CD-ROM の書き込みのための速度も不十分なファイ ルシステムはNFS(network filesystem)だけです.筆者自身は CD-ROM 作成専 用の PC(486/66)でUMSDOS を使い, Linux と DOS/Windows でディスクの共有 をしています. 4.4. ISO-9660 の制限を回避する方法は何かありますか? できます.好きなファイルシステムを CD 上に作ることができます.ただし, Linux 以外のオペレーティングシステムではこの CD は扱えないでしょう.手 順を以下に示します: o サイズが 650MB の空のファイルを作成します. dd if=/dev/zero of="empty_file" bs=1024k count=650 o このファイル上に ext2 ファイルシステムを作成します. shell> /sbin/mke2fs -b 2048 empty_file empty_file is not a block special device. Proceed anyway? (y,n) y o ループバックデバイスを使って,この空のファイルをマウントします (十 分新しい mount コマンドが必要です.前述の説明を見てください). mount -t ext2 -o loop=/dev/loop1 empty_file /mnt o ファイルを /mnt にコピーし,その後でアンマウントします o (もう空ではない)empty_file を ISO-9660 イメージと同じように扱って cdrecord を実行します このような CD に対して /etc/fstab のエントリを作りたければ,システム起 動時のデバイスのファイルのチェックを無効にしてください.以下に例を示し ます: /dev/cdrom /cdrom ext2 defaults,ro 0 0 最初の 0 は「dump の対象にしない」という意味です.2 番目の 0 (こちらが 重要)は「起動時にエラーのチェックをしない」という意味です(この CD のエ ラーを調べると fsck は失敗します). 4.5. オーディオ CD からトラックを読み出す方法は? これを行うためのソフトウェアがいくつかあります.最新のものは "cdpranoia" であり,以下の場所からダウンロードできます: これ以外にも,"cdda2wav" と "sox" を組み合わせて使うこともできます.こ れらのソフトウェアは sunsite とそのミラーサイトから入手できます: cdda2wav を使うと,オーディオ CD から特定の区間(あるいはトラック全 体)を取り出して,これを .wav ファイルに変換することができます. sox は,cdrecord を使って CD-R を焼けるように wav ファイルを(オーディオ CD の) cdda フォーマットに戻します.最近のバージョンの cdrecord を使って いるならば sox は必要ありません.というのも,これは .au, .wav ファイル に対応しているからです. 4.6. 起動後に SCSI デバイスを検出する方法は? drivers/scsi/scsi.c ファイルに以下の情報が載っています: /* * 使用法: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi * ここで "0 1 2 3" は実際の "ホスト チャネル ID LUN" に置き換えます. * この機能はベータ版であると思ってください. * 注意: これは周辺機器の活線抜挿のための機能ではありません.SCSI * 自体がそのように設計されていないため,ハードウェアを壊してしま * うことがあります! * しかし,既に接続されているデバイスの電源を入れるのは問題ないと思い * ます.このデバイスが転送中のデータを壊さないことの保証は多分できま * せん. */ これを使うべきなのは SCSI デバイスがチェーンの最後にある場合だけである 点に注意してください.新しい SCSI デバイスを既にあるチェーンに入れる と,デバイスの名前付け(/dev ディレクトリ)が狂ってしまい,ハードディス クの内容が全部壊れてしまうかもしれません. 4.7. データ CD をまるごとコピーすることはできますか? できます.ただし,オリジナルの読み取り中に(ホコリや傷のために)エラーが 起きると,壊れたコピーができる点には注意してください.どちらの方法もオ ーディオ CD では失敗する点に注意してください! オーディオ CD では cdrdao か cdda2wav を使わなければなりません. 例 1: CD ライタおよび,それとは別の CD-ROM を持っているものとします. 以下のコマンドを実行することにより,/dev/scd0 に接続した CD-ROM ドライ ブからデータを読み取って,これを直接 CD ライタに書き込むことができま す: cdrecord -v dev=0,6,0 speed=2 -isosize /dev/scd0 例 2: 別に使える CD-ROM ドライブが無いものとします.この場合にはまず, CD ライタを使って CD-ROM を読み出します: dd if=/dev/scd0 of=cdimage このコマンドは CD-ROM の内容を /dev/scd0 から読み取り,これをファイル "cdimage" に書き込みます.このファイルの内容は mkisofs が作るものに相 当するので,この文書の前の方で述べたように処理を進めることができま す(ファイル cdimage を cdrecord の入力とします).進行状況表示やその他 の凝った表示が見たければ,Joerg Schillings さん作の sdd を使ってくださ い. エラーに出会った場合には,最新版の cdrecord をインストールしてくださ い.これには "readcd" というツールが入っています(misc/ ディレクトリに あります).このツールでは dd と同じ結果が得られますが,エラーの場合に は CD-ROM のセクタを複数回読み込みます. 4.8. Linux で Joliet 形式の CD-ROM は読めますか? 読めます.新しいカーネル(2.0.36 と 2.2 系列)には,Joliet 形式のサポー トが組み込まれています./etc/fstab には iso9660 と joliet の両方のオプ ションを指定しなければならない点に注意してください(joliet は実際には拡 張です).詳しくは を見てください. 4.9. CD ライタを使って CD-ROM の読み取りやマウントをする方法は? 普通の CD-ROM ドライブと同じようにします.変わったことは全くありませ ん.ただし,ATAPI CD-ROM を使っていても,読み取りのために CD-ROM をマ ウントするには scd デバイス(SCSI CD-ROM)を使わなければならない点に注意 してください(ATAPI デバイスが SCSI のように動作する設定にしたことを思 い出してください)./etc/fstab の設定例を以下に示します: /dev/scd0 /cdrom iso9660 ro,user,noauto 0 0 4.10. CD-R にもっとたくさんのデータを詰め込むには? gzip や pkzip のような圧縮プログラムでなく, bzip2 を使いましょう.こ れを使えば,大きい(>100kB)ファイルで 30% 程度のディスク容量を節約でき るでしょう.bzip2 は以下の場所からダウンロードできます: 普通のオーディオ CD を焼く代わりに,wav 形式のオーディオファイルを mp3 形式のオーディオファイルに変換し,普通のファイルと同様に ISO-9660 ファ イルシステムに置く方法もあります.普通は mp3 の圧縮率は 1:10 程度で す.もちろん,普通の CD プレイヤーではこのファイルを読むことはできませ ん…これが欠点です.しかし反対に,次のパーティーでは音楽はハードディス クから演奏するというのはどうでしょう? 18G バイトもディスクがあれば 3000 から 4000 のタイトルが入ります :-) ソフトウェア MP3 エンコーダは以下の場所から入手できます: MP3 プレイヤーは以下の場所から入手できます: スピーチを録音するには,shorten や "GSM lossy speech compression" を 使ってサイズを小さくするといいでしょう: 4.11. 起動可能な CD-ROM を作る方法は? 作成を行うには 1.44MB の起動可能なフロッピーディスクが必要です.以下の コマンドを実行して,このフロッピーディスクの正確なイメージを作りましょ う: dd if=/dev/fd0 of=boot.img bs=18k このフロッピーイメージを,CD に焼くファイルを置いているディレクトリ(あ るいはそのサブディレクトリ.好きなようにしてかまいません)に置きます. mkisofs に対して '-b' オプションでこのファイルを指定し,また '-c' オプ ションを指定します.詳しくは mkisofs のパッケージに入っている README.eltorito を読んでください. 独自に作成した起動可能 CD の面白い使い道としては,ウィルスに対して安全 な DOS/Windows システムがあります.(ネットワークが利用でき,samba を 使ってユーザのデータを置けるファイルサーバがあれば)ハードディスクを買 うためのお金も節約できます.しかし,これは純粋に理屈の上の話であり,筆 者に対する実際の手順の報告は今までありません. 起動可能な RedHat CD-ROM に関する詳しい情報は にあ ります. 4.12. 何らかの方法で書き込みができる CD-ROM を作るには? Linux では オーバーレイファイルシステム(overlay filesystem) が使えま す.これは CD-ROM の上にマウントし,全ての書き込み操作に割り込むという ものです.新しいファイルや修正されたファイルは別の場所に保存されます が,ユーザには CD-ROM 上のファイルが変更されたように見えます.詳しい情 報については をご覧 ください. これで要求が満たせなければ,Linux が UDF ファイルシステムをサポートす るのを待つか,その開発に参加しましょう( を見てください). 4.13. 複数個の CD ライタを同時に使うことはできますか? できます.ただし,まだ CD ライタ 2 つでしかテストされていません.これ を行うには,最近のバージョンの Linux カーネル(この文書を書いている時点 では 2.2.10 )か,SCSI 汎用ドライバのバッファを増やすカーネルパッチ ( ; 2.2.5 まででしか動作 しません)が必要です. 4.14. どのメディアが一番良いでしょうか? ドイツのコンピュータ雑誌である "c't" の 1996 年 11 月号に,空の CD-R に関する助言が載っています: o 「ノーブランド」のディスクは一般的に高品質ではないので,使わない方 がいいでしょう. o 不良の CD-R が一枚あれば,残りの分でも同じことが起こるかもしれませ ん(何枚も同時に買った場合).このような CD-R でも運が良ければ最初の 500MB は使えるかもしれません…. o 書き込みの前には光っている側の面には触ってはいけません. 4.15. Solaris, *BSD, AIX, HP-UX 等についてはどうでしょう? 2 章の説明は Linux に特化しています.3 章と 4 章の内容は Linux 以外の オペレーティングシステムでも使えます.詳しくは cdrecord のパッケージに 入っている README.NetBSD, README.aix, README.hpux, README.next, README.solaris, README.sunos, README.vms, README.xxxBSD ファイルを見て ください. 4.16. ローカルの設定をずっと保存しておく場所は? 方法は 2 つあります.すなわち cdrecord の組み込み設定ファイルを使う方 法と,以下に示すようなシェルによるラッパーを使う方法です.このシェルス クリプトは設定ファイルを読み込みます.設定ファイルには cdrecord に対す るオプションとパラメータを一行ずつ書いておきます.オプション名はコマン ドラインで指定する時と同じですが,先頭のダッシュ('-')がありません.コ メントを使うこともできます.例: # 詳しい表示を行う v # CD ライタの速度を設定する speed=2 # デバイス座標を バス,ID, LUN の形式で指定する dev=0,6,0 ラッパーに対する設定ファイルは /etc/cdrecord に置き,コマンドラインで 指定しなければなりません.例: 設定ファイル /etc/cdrecord/mywriter.cfg を参照したければ,"cdrecord.sh mywriter.cfg -audio track1..." というコ マンドを実行します.mywrite.cfg より後の全ての指定は cdrecord に渡され ます. #! /bin/bash CFGDIR="/etc/cdrecord" CFG="$1" shift ARGS_LEFT="$@" if [ ! -f "$CFGDIR/$CFG" ] then echo "Configuration file $CFGDIR/$CFG not found. Exiting." exit 1 fi while read LINE do case $LINE in \#*|"") continue;; esac old_IFS="$IFS" IFS="$IFS=" set -- $LINE IFS="$old_IFS" O_NAME="$1" O_VALUE="" while shift do case $1 in "") continue;; esac O_VALUE="$1" done if [ -z "$O_VALUE" ] then O_CDRECORD="$O_CDRECORD -$O_NAME " continue fi O_CDRECORD="$O_CDRECORD $O_NAME=$O_VALUE " done < "$CFGDIR/$CFG" set -x #DEBUG exec cdrecord $O_CDRECORD $ARGS_LEFT echo "Execution of cdrecord failed." 4.17. どうすれば CD の情報を取り出すことができますか? CD の先頭から 32kB 以降のどこかの位置には,その CD に関する情報が入っ たブロックが置かれます.以下のシェルスクリプトを使うと,この情報を読み 出すことができます: #! /bin/bash RD=/dev/cdrom for i in 32768,7 32776,32 32808,32 32958,128 33086,128 33214,128 \ 33342,128 33470,32 33581,16 33598,16 33615,16 33632,16 do old_IFS="$IFS" IFS="," set -- $i IFS="$old_IFS" OFFSET=$1 LENGTH=$2 echo "*`dd if=$RD bs=1 skip=$OFFSET count=$LENGTH 2> /dev/null`#" done 4.18. 再書き込みに関して CD-RW メディアの上書きを行う時には,cdrecord にパラメータ blank=fast を指定してください.それだけです.パラメータに関する細かい点について は, cdrecord のオンラインマニュアルを見てください. 4.19. マルチセッション CD の作り方は? まず最初に,マルチセッション CD 用のイメージは RockRidge 拡張を使った ISO-9660 ファイルシステムでフォーマットしなければなりません.また,新 しいセッションを付け加えたければ,cdrecord に -multi オプションを指定 しなければなりません.したがって,少なくとも最初のセッションでは -multi を指定しなければなりません. 2 番目以降のセッションのためのイメージを作るのは多少面倒です.mkisofs が CD-R の空き部分がどこかを知っていなければならないからです.この情報 は,cdrecord の -msinfo オプションを使って得ることができます(以下の例 を見てください): shell> NEXT_TRACK=`cdrecord -msinfo dev=0,6,0` shell> echo $NEXT_TRACK shell> mkisofs -R -o cd_image2 -C $NEXT_TRACK -M /dev/scd5 private_collection/ \ 詳しくは cdrecord のパッケージに入っている README.multi をご覧くださ い. 5. トラブルシューティング 忘れないでください.CD-ROM を焼き損ねても,コースターとしての使い道が 残っています :-) 5.1. Linux 上で動作しません 最初に,CD ライタが製品に付属しているソフトウェア(=他のオペレーティン グシステム)で動作することを確認してください.具体的には以下の項目を確 認します: o コントローラが CD ライタを SCSI デバイスとして認識しているか? o ドライバソフトウェアが CD ライタを認識しているか? o 付属のソフトウェアで CD を作ることができるか? 付属のソフトウェアを使って「それでも動かない」というのであれば,ハード ウェアのリソースの衝突かハードウェアの欠陥でしょう.これで動作して,か つ Linux の起動に loadlin を使っているのであれば,それが原因です. loadlin はハードウェアの大部分が既に初期化された状態でウォームブートを 行うので,Linux カーネルが混乱することがあります. 5.2. No read access for 'dev=0,6,0' というエラーが出る Linux では,一部のバージョンの C ライブラリは不完全です(バグがある). したがって,あるバージョンの C ライブラリとリンクしたアプリケーション はライブラリのバージョンが変わると動作しないことがあります.コンパイル 済みのバイナリが起こすエラーの例を以下に示します: [root@Blue /dev]# cdrecord -eject dev=0,6,0 cdrecord: No such file or directory. No read access for 'dev=0,6,0'. 5.3. DOS とその仲間の OS で動作しません Linux を試してください.DOS でやる SCSI ドライバのインストールと設定は 最悪です.Linux が複雑すぎる? 冗談でしょ! 5.4. 書き込みの際に SCSI エラーが起こる このエラーは主に以下のような原因で起こります: o SCSI バスに切断/再接続の機能が無い o ハードウェアの冷却が十分でない o ハードウェアに欠陥がある(5.1 節の方法で見つけられるはずです) さまざまな環境で,SCSI デバイスは自分自身を SCSI バスと(電気的に)切 断・再接続します.この機能が使えなければ(SCSI コントローラとカーネルの パラメータを確認してください),CD ライタによっては CD-R の焼き付けと固 着の際に問題が起きることがあります. 特に NCR 53c7,8xx SCSI ドライバではこの機能がデフォルトで無効になって いるので,以下の項目を最初にチェックすると良いでしょう: NCR53c7,8xx SCSI support [N/y/m/?] y always negotiate synchronous transfers [N/y/?] (NEW) n allow FAST-SCSI [10MHz] [N/y/?] (NEW) y allow DISCONNECT [N/y/?] (NEW) y 6. 謝辞 この HOWTO 文書の内容に積極的に貢献してくれた読者の方々に深く感謝しま す.筆者自身は数年の間 CD ライタを使える環境になかったので,生の設定や 経験のレポートは,筆者にとってとても貴重でした. Doug Alcorn 新しいカーネルについての記述を改善する手助け Kalle Andersson MP3 から直接オーディオ CD を焼く方法 Alan Brown Rick Cochran デフォルトでは無効になっている,ncr ドライバの接続切断,再接続機 能に関するヒント Robert Doolittle cdwrite を HOWTO からなくすための良い根拠 Markus Dickebohm Thomas Duffy 文法と綴りの大幅な修正. Jos van Geffen 4.9 節の問題についての指摘 Bernhard Gubanka ループバックデバイスを使うには最近のバージョンの mount コマンド が必要なことの指摘 Stephen Harris オーディオ CD の書き込みについてのヒント Janne Himanka Joliet CD-ROM を読むためのカーネルパッチに関するポインタ Stephan Noy オーディオ CD の書き込みに関する情報と経験 Don H. Olive mkhybrid の URL Jesper Pedersen Pierre Pfister CD をまるごとコピーする手順を作成する手伝い Daniel A. Quist IDE CD-R と新しいバージョンのカーネルに関する情報 Martti.Rahkila@hut.fi loadlin を使って起動する時に既に初期化された CD ライタが起こす問 題の報告 Dale Scheetz Joerg Schilling cdrecord に関する情報 Martin Schulze cdwrite メーリングリストに関する情報 Gerald C Snyder ext2 形式の CD-ROM (4.4 節を参照)の書き込みテスト Art Stone ISO-9660 でないファイルシステムを CD に焼くというアイディア The Sheepy One 焼き損ねの CD-ROM を飲物用のコースターにするという提案 Erwin Zoer また,綴りの間違いを指摘してくれた以下の方々に感謝します: Bartosz Maruszewski , Ian Stirling , Brian H. Toby Linux CD-Writing HOWTO は以上です.(ここで読み終えてもかまいません.) 7. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました.翻訳に関するご意見 は JF プロジェクト 宛に連絡してください. 改訂履歴を以下に示します. v1.6j, 18 January 1997 翻訳: Yoshinori Mamoto(ymamoto@ent.med.osaka-u.ac.jp) v2.8.2j, 7 September 1999 更新: 藤原輝嘉(fujiwara@linux.or.jp), 校正: 武井伸 光(takei@cc.kochi-u.ac.jp) v2.8.8j, 11 October 1999 更新: 藤原輝嘉(fujiwara@linux.or.jp)