この章はいわゆる「良く聞かれる質問とその答え(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 は失敗します).
これを行うためのソフトウェアがいくつかあります.最新のものは "cdpranoia" であり,以下の場所からダウンロードできます:
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 ディレクトリ)が狂ってしまい,ハードディスクの 内容が全部壊れてしまうかもしれません.
できます.ただし,オリジナルの読み取り中に(ホコリや傷のために)エラーが 起きると,壊れたコピーができる点には注意してください. どちらの方法もオーディオ 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 のセクタを複数回読み込みます.
読めます.新しいカーネル(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.stud.ifi.uio.no/~larsi/other/8hz-mp3-cheng.tar.gz
MP3 プレイヤーは以下の場所から入手できます:
http://homepages.uni-tuebingen.de/student/michael.hipp/mpg123/
スピーチを録音するには,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 を使っ てユーザのデータを置けるファイルサーバがあれば)ハードディスクを買うた めのお金も節約できます.しかし,これは純粋に理屈の上の話であり,筆者に 対する実際の手順の報告は今までありません.
起動可能な 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/ を見てください).
できます.ただし,まだ CD ライタ 2 つでしかテストされていません.これ を行うには,最近のバージョンの Linux カーネル(この文書を書いている時点 では 2.2.10 )か,SCSI 汎用ドライバのバッファを増やすカーネルパッチ ( ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha; 2.2.5 ま ででしか動作しません)が必要です.
ドイツのコンピュータ雑誌である "c't" の 1996 年 11 月号に,空の CD-R に関する助言が載っています:
2 章の説明は Linux に特化しています.3 章と 4 章の内容は Linux 以外の オペレーティングシステムでも使えます.詳しくは cdrecord のパッケージに 入っている README.NetBSD, README.aix, README.hpux, README.next, README.solaris, README.sunos, README.vms, README.xxxBSD ファイルを見て ください.
方法は 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."
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 を指定しなければなりません.
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 をご覧ください.