この章はいわゆる「良く聞かれる質問とその答え(FAQ)」です。 CD-R に関わる話なら、いや単に面白いだけの話であっても、奥さんや子供や 飼い犬がどうしたこうしたということでも構いませんから、送ってください。
実際に試してください。cdrecord の -dummy オプションを使って カラ焼きをします。同時に他の考え付く処理を全て実行し、 CD を焼く処理が生き残るかどうかを見てみましょう。
mkisofs から直接 cdrecord にデータを送る場合には、locate
データベースの更新などのディスクに負荷をかける処理によって
最大フローレートが小さくなってしまい、CD を焼き損ねることがあります。
古いマシンでは、CD-R を焼いている最中に cron
, at
, anacron
がこういったプロセスを起動しないように確認しておくべきでしょう。
ファイルの断片化は通常は小さいので、気付かない程度の影響しかありません。 しかし、断片化のせいで異常な状態になることもままあります。この場合、 ハードディスクのスループットは 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 つ)、 このデータの書き戻しの練習を行った上で、新しいファイルシステムを作成し (これにより古いファイルシステムは消えます)、データを書き戻してください。 これが現時点で最も安全な方法です。
できます。信頼性が低く、CD-ROM の書き込みのための速度も 不十分なファイルシステムはNFS(network filesystem)だけです。 筆者自身は CD-ROM 作成専用の PC(486/66)でUMSDOS を使い、 Linux と DOS/Windows でディスクの共有をしています。
できます。好きなファイルシステムを CD 上に作ることができます。ただし、 Linux 以外のオペレーティングシステムではこの CD は扱えないでしょう。 手順を以下に示します:
dd if=/dev/zero of="empty_file" bs=1024k count=650
shell> /sbin/mke2fs -b 2048 empty_file
empty_file is not a block special device.
Proceed anyway? (y,n) y
mount -t ext2 -o loop=/dev/loop1 empty_file /mnt
cdrecord
を実行します。このような CD に対して /etc/fstab
のエントリを作りたければ、
システム起動時のデバイスのファイルのチェックを無効にしてください。
以下に例を示します:
/dev/cdrom /cdrom ext2 defaults,ro 0 0
最初の 0 は「dump の対象にしない」(バックアップ対象にしない)という意味です。 2 番目の 0 (こちらが重要) は「起動時にエラーのチェックをしない」という意味です (この CD のエラーを調べると fsck は失敗します)。
これを行うためのソフトウェアがいくつかあります。最新のものは ``cdparanoia'' であり、以下の場所からダウンロードできます:
http://www.xiph.org/paranoia/
これ以外にも、``cdda2wav'' と ``sox'' を組み合わせて使うこともできます。 これらのソフトウェアは sunsite とそのミラーサイトから入手できます:
ftp://sunsite.unc.edu/pub/Linux/apps/sound/cdrom/cdda2wav0.71.src.tar.gzftp://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz
cdda2wav
を使うと、オーディオ CD から特定の区間
(あるいはトラック全体) を取り出して、
これを .wav ファイルに変換することができます。
sox
は、cdrecord
を使って CD-R を焼けるように
wav ファイルを (オーディオ CD の) cdda フォーマットに戻します。
最近のバージョンの cdrecord
を使っているならば
sox
は必要ありません。
というのも、これは .au, .wav ファイルに対応しているからです。
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 ディレクトリ)が狂ってしまい、ハードディスクの 内容が全部壊れてしまうかもしれません。
カーネルのバージョンによっては、SCSI バスの再スキャンを嫌うものもあります。 上にある操作を行うと、システムが固まってしまいます。 はい、警告はしましたからね!
できます。ただし、オリジナルの読み取り中に (ホコリや傷のために) エラーが 起きると、壊れたコピーができる点には注意してください。 以下に説明するどちらの方法もオーディオ 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 の入力とします)。進行状況表示や
その他の凝った表示が見たければ、Jöerg Schillings さん作の
sdd
を使ってください。
エラーに出会った場合には、最新版の cdrecord をインストールしてください。 これには ``readcd'' というツールが入っています (misc/ ディレクトリにあります)。 このツールでは dd と同じ結果が得られますが、 エラーの場合には CD-ROM のセクタを複数回読み込みます。
読めます。新しいカーネル(2.0.36 と 2.2 系列)には、 Joliet 形式のサポートが組み込まれています。 /etc/fstab には iso9660 と joliet の両方の オプションを指定しなければならない点に注意してください (joliet は実際には拡張です)。詳しくは http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html を見てください。
普通の CD-ROM ドライブと同じようにします。変わったことは全くありません。 ただし、ATAPI CD-ROM を使っていても、読み取りのために CD-ROM をマウントするには scd デバイス (SCSI CD-ROM) を使わなければならない点に注意 (ATAPI デバイスが SCSI のように動作する設定にしたことを思い出してください)。 /etc/fstab の設定例を以下に示します:
/dev/scd0 /cdrom iso9660 ro,user,noauto 0 0
gzip
や pkzip
のような圧縮プログラムでなく、
bzip2
を使いましょう。これを使えば、大きい(>100kB)ファイルで
30% 程度のディスク容量を節約できるでしょう。bzip2
は以下の
場所からダウンロードできます:
http://www.muraroa.demon.co.uk/
普通のオーディオ CD を焼く代わりに、wav 形式のオーディオファイルを mp3 形式のオーディオファイルに変換し、普通のファイル同様に ISO 9660 ファイルシステムに置く方法もあります。mp3 の圧縮率は通常 1:10 程度です。 もちろん、普通の CD プレイヤーではこのファイルを読むことはできません… これが欠点です。でも、今度のパーティーではハードディスクから 音楽をかけることにしたっていいでしょう? 18G バイト程度ディスクがあれば、3000〜4000 曲はかけられますよ :-)
ソフトウェア MP3 エンコーダは以下のところから手に入ります:
http://www.sulaco.org/mp3/
MP3 プレイヤーは以下の場所から入手できます:
http://www.mpg123.org/
スピーチを録音するには、shorten
や ``GSM lossy speech compression''
を使ってサイズを小さくするといいでしょう:
ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/
http://kbs.cs.tu-berlin.de/~jutta/toast.html
作成を行うには 1.44MB の起動可能なフロッピーディスクが必要です。 以下のコマンドを実行して、このフロッピーディスクの正確なイメージを 作りましょう:
dd if=/dev/fd0 of=boot.img bs=18k
このフロッピーイメージを、CD に焼くファイルを置いているディレクトリ (あるいはそのサブディレクトリ。好きなようにしてかまいません) に置きます。 mkisofs に対して `-b' オプションでこのファイルを指定し、 また `-c' オプションを指定します。 詳しくは mkisofs のパッケージに入っている README.eltorito を読んでください。
独自に作成した起動可能 CD の面白い使い道としては、ウィルスに対して安全な DOS/Windows システムがあります。(ネットワークが利用でき、 samba を使ってユーザのデータを置けるファイルサーバがあれば) ハードディスクを買うためのお金も節約できます。 ドイツのコンピュータ雑誌 c't の 1999 年 11 月 号の 206 ページ ( http://www.heise.de/) には、これに関する記事が掲載されています。
起動可能な RedHat CD-ROM に関する詳しい情報は http://members.bellatlantic.net/~smithrod/rhjol-technical.html にあります。
Linux では オーバーレイファイルシステム (overlay filesystem) が使えます。これは CD-ROM の上にマウントし、 全ての書き込み操作に割り込むというものです。 新しいファイルや修正されたファイルは別の場所に保存されますが、 ユーザには CD-ROM 上のファイルが変更されたように見えます。 詳しい情報については http://home.att.net/~artnaseef/ovlfs/ovlfs.html をご覧ください。
これで要求が満たせなければ、Linux が UDF ファイルシステムをサポート するのを待つか、その開発に参加しましょう ( http://trylinux.com/projects/udf/ を見てください)。 Linux カーネルの CD-ROM ドライバの制限のため、 今のところは CD メディアからの読み出しだけがサポートされています。
できます。少なくとも、kernel 2.2.12 が走るシングル SCSI バスで 233 MHz の PC の上で 3 つのライタがフルスピード (6x) で動いたとの報告があります。 最近のバージョンの Linux カーネル(2.2.12 以降)が必要です。
Linux に特化した説明は第 2 節だけです。3 節と 4 節の内容は Linux 以外の オペレーティングシステムでも使えます。詳しくは cdrecord のパッケージに 入っている README.NetBSD, README.aix, README.hpux, README.next, README.solaris, README.sunos, README.vms, README.xxxBSD ファイルを見て ください。
たぶん yes です。お持ちのプラットフォームで cdrecord をコンパイルし、 ``cdrecord -scanbus'' コマンドを実行してみます。 cdrecord ソースについてくる README.* ファイルのうち、 その UNIX 向けのものを読んでください。 とはいうものの、全ての UNIX 系 OS で、 新規に焼いた CD-R の RockRidge, Joliet, HFS 拡張を読めるというわけでは ありません。
方法は 2 つあります。すなわち cdrecord の組み込み設定ファイルを使う方法と、 以下に示すようなシェルによるラッパーを使う方法です。 このシェルスクリプトは設定ファイルを読み込みます。 設定ファイルには cdrecord に対するオプションとパラメータを 一行ずつ書いておきます。オプション名はコマンドラインで指定する時と 同じですが、先頭のダッシュ(`-')がありません。 コメントを使うこともできます。例:
# 詳しい表示を行う
v
# CD ライタの速度を設定する
speed=2
# SCSI 上のデバイスの位置を バス、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."
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
CD-RW メディアの上書きを行う時には、cdrecord にパラメータ blank=fast を指定してください。それだけです。パラメータに関する細かい点については、 cdrecord のオンラインマニュアルを見てください。
まず最初に、マルチセッション CD 用のイメージは RockRidge 拡張を使った ISO 9660 ファイルシステムでフォーマットしなければなりません。また、 新しいセッションを付け加えたければ、cdrecord に -multi オプションを指定 しなければなりません。したがって、少なくとも最初のセッションでは -multi を指定しなければなりません。
CD-ROM XA モード 2 や session-at-once (SAO) をサポートしていない CD ライタもありますので、 cdrecord のコマンドラインには -data スイッチを付ける必要があります。
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 をご覧ください。
メールでいただいたご報告です: たいがいの CD ライタの説明書には、CD-ROM から CD ライタに焼くには、 お互い別々の SCSI バスを使えと書いてあります。私自身、 こんな羽目に会いました:
Adaptec 2940UW SCSI カードと 24x SCSI CD-ROM、4x4 SCSI CD ライタという 構成で、その CD ライタには専用の ISA SCSI カードが付いていました。 ひとつのデバイスしか扱えないものです。このカードは捨てて、手持ちの、 もっといい Adaptec カードに SCSI 機器全部を賄わせようと思いました。 で、4 倍速でレコーディングしているとき非常にバッファ・アンダーラン しがちなことに気づいたのですが、ISA SCSI カードをつないでみたところ、 たちどころに問題がなくなりました。他にも 2 名の方が (お二人とも Adaptec 2940 カード使用)、 主に CD-ROM から CD レコーダに書き込みをしているときに全く 同じ現象を体験したのを知っています。同じバス上にあるハードディスクから CD ライタに書くときには、絶対にこの問題は起きなかったのですが。
通常、FTP によるファイル転送は、10M ビットのイーサネット上でも、4 倍速 (4x) の CD レコーダにデータを賄うのに充分な速度があります。 ftp クライアントと cdrecord を fifo を使って組み合わせることができます。 まず、cdimage という名前で fifo を作ります:
mkfifo cdimage
ftp other.host.org
get cdimg cdimage
そして、cdimage を普通のファイルのように扱います。 例えばこんな感じのコマンドです:
cdrecord dev=0,1,0 speed=2 cdimage
cdrecord がファイルからデータを読み込もうとすると、ftp クライアントは それに気づいて、ftp 先のホストからデータを転送しはじめます。
音割れを回避するには、disk-at-once モード (DAO) を使わないとなりません。
cdrecord の実行ファイルに setuid ビットを立てることもできますが、 セキュリティ上のリスクになり得ます。ともあれ、デバイスファイルの パーミッションを設定するだけでは、cdrecord は、 SCSI のジェネリックインタフェースを通して 特権コマンドを発行できるようにはならないのです。
which cdrecord
chown root.root /usr/bin/cdrecord
chmod 4111 /usr/bin/cdrecord
印刷された仕様が Philips から入手できますが、高価です。
http://www.mainconcept.de/ に MPEG ビデオや Video CD の製作ユーティリティがあります。
http://www.johanni.de/munich-vision/vcd/
おカタい方々は、Berkeley 系のツールとか、 ほかの YUV 処理系のほうを出してくるでしょう。 でも、使い方は込み入っているし、処理時間もずっとかかるし、 ディスクも食うし、オーディオ・トラックは付きません。 私としては、最初に挙げたような、 概念的に高レベルのアプリケーションを使うことをおすすめしておきます。
Linux で CD を焼くということに関していえば、SCSI CD ライタのほうが多少 設定が簡単です。エラー回復もこっちのほうが優れていると報告されています。 ただ、IDE より高い値段に見合うかどうかとなると、一概には答えられません。
容量オーバーで CD-R を焼くことには、何ら特別なことはありません。データ がその CD-ROM に収まるかどうかはあなたの運次第です。それだけのことです。 Linux 上のソフトウェアに、650 メガバイトの制限はありません。
書き込みを終了します。だから、お気に入りのバックアップツールと cdrecord をパイプで組み合わせるだけです。 ``bru -size=640m -f - | cdrecord dev=0,1,0 speed=2 -'' といったように。 バックアップが複数枚の CD-R にまたがるような場合は、 ユーティリティに特別な注意を払わないといけません。
これ、できないんですよ。この機能を Linux カーネルのソースに追加してく れる方、誰でも大歓迎です。
そりゃあ、いい質問ですね。以上。
あらゆるシステムで読める CD-ROM には、素の ISO 9660 フォーマットしか 使えません。つまり、古い MS-DOS 所以のアホな 8+3 文字のファイルネーム しか使えない、HFS (Macintosh) や Joliet (Microsoft), RockRidge (最近の各種 UNIX) といった拡張機能はだめってことです。 あらゆるオペレーティングシステムで読める、 長いファイルネームのための拡張機能は、ありません。
オーディオ CD プレイヤーは最初のセッションに記録されたオーディオトラック しか扱えません。言い換えれば、続くセッションとしてオーディオトラックを 追加することはできません。しかし、データトラックを二番目のセッション として書き込むと、オーディオ CD プレーヤーからそれを巧妙に隠すことが できます。こうすれば、ミックスモード CD (オーディオとデータを混在) に 無音のトラックを作らなくて済みます。
どんなことをしたいのかによって回答は異なります。 新しいコンピュータを買うための理由が欲しいというのなら、 「コンピュータ製造業者国際組織(笑)」からの返答はこうなります: 「何をするにつけても 800 MHz のプロセッサが必要です。 ただそれだと既にお持ちのマザーボードには適合しないでしょうから、 新しいマザーボードもお求めになる必要があります。 一番お手軽なやり方は、テレビのコマーシャルでご覧の通りの、 全部入りおすすめセットを素直に普通にお求めいただくことです。 そして、以下の章は無視していただけますでしょうか」
まともな回答を読みたいなら、こちらです: 私は 66MHz の ``486'' マシンで何枚もの CD-ROM をちゃんと焼けました。 マイクロソフトは、もはやこのクラスのマシンを PC とは見なしておらず Windows CE をすすめてきますが (CeBIT とか見ればわかります)、 Linux なら Pentium の先輩でだってちゃんと動きますし、CD だって焼けます。 実際にテストしてみれば、お持ちのハードが CD-ROM を焼くのに充分なパワーを持っているかどうか簡単にわかります。 cdrecord を実行するときに -dummy というコマンドライン・スイッチを 付けるだけです。こうすると実際の書き込みレーザーは出ません。 やってみて、成り行きを見てみてください。