CD は他の一般的なディスクと異なる様々な特徴を持っています。 そもそもユーザが書き込むことができません。 また遅延なしで連続的に読み出せるように、 トラック間をヘッドが移動しないですむようにデザインされています。 さらにこのサイズのメディアの中ではシステムをまたぐデータの 移動が比較的簡単でもあります。
CD はトラックの概念を持っていますが、 これはデータを連続的に読み出すためのものであってディスクの物理特性ではありません。 FreeBSD で CD を作成するには、まず CD のトラックとなるデータファイルを用意し、 そのトラックを CD に書き込みます。
ISO 9660 ファイルシステムはこの様な差異を扱うべく設計されました。 その結果、ファイルシステムは一般的に使用するのに差しつかえない程度に 制限されて標準化されています。幸いなことに、ISO 9660 ファイルシステムには拡張機構が提供されています。適切に書かれた CD は、 拡張機構に対応したシステムでは拡張を利用して、そうでないシステムでは 拡張機構を使用しない範囲で動作するようになっています。
sysutils/mkisofs プログラムは ISO 9660 ファイルシステムを含むデータファイルを作成するのに使われます。 これには様々な拡張をサポートするオプションがあり、 以下で説明します。 このソフトウェアは、ports の sysutils/mkisofs からインストールすることができます。
CD に書き込むためのツールは、お使いの CD ライタが ATAPI
接続か否かにも依存します。ATAPI CD ライタなら、ベースシステムの一部である
burncd
プログラムを使います。SCSI や USB の CD ライタなら、ports の
sysutils/cdrecord
をインストールして
cdrecord
プログラムを使うべきでしょう。
burncd
が対応しているドライブは限定されています。
ドライブが対応されているかどうかを確認するには、
CD-R/RW supported
drives にある一覧を見てください。
FreeBSD 5.X または FreeBSD 4.8-RELEASE
以降のバージョンを使用している場合、
ATAPI/CAM モジュール を使用すると
ATAPI ハードウェア上で SCSI ドライブ用の
cdrecord
および他のツールを使用できるようになります。
sysutils/mkisofs は UNIX® ファイルシステムの名前空間におけるディレクトリツリーのイメージとして ISO 9660 ファイルシステムを作成します。 最も簡単な使い方は以下の通りです。
#
mkisofs -o imagefile.iso /path/to/tree
このコマンドは /path/to/tree
以下のディレクトリツリーのコピーである ISO 9660
ファイルシステムを含んだ imagefile.iso
ファイルを作成します。この過程において、ファイル名は標準的な ISO 9660
ファイルシステムの制限に適合するようなファイル名に対応づけられ、
ISO ファイルシステムでファイル名を文字化できないファイルは除外されます。
この制限を回避するために利用できるオプションはいくつもあります。
特に -R
オプションは UNIX® システムで標準的な Rock Ridge
拡張を有効にします。-J
オプションは Microsoft
のシステムで標準的な Joliet 拡張を有効にし、
-hfs
オプションは Mac OS® で使用されている
HFS ファイルシステムを作成するために使われます。
FreeBSD でしか使わないのであれば、-U
オプションを使用するとあらゆるファイル名制限を無効にできます。
さらに -R
オプションとともに使うことで
FreeBSD と同一のファイルシステムイメージを作成できますが、
これは ISO 9660 標準の多くを無視しています。
一般的に使われる最後のオプションは -b
オプションです。
これは 「El Torito」 ブータブル CD
を作成するのに使う起動イメージのありかを指定します。
このオプションは引数として起動イメージへのパスを、
CD に書き込まれるディレクトリツリーの頂点からの相対位置で取ります。
したがって /tmp/myboot
がブート可能な
FreeBSD システムで /tmp/myboot/boot/cdboot
にブートイメージがあるならば、以下のようにすることで ISO 9660
ファイルシステムのイメージを /tmp/bootable.iso
に作成することができます。
#
mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot
この後、カーネルで vn
(FreeBSD 4.X)
または md
(FreeBSD 5.X)
が設定されていれば、
ファイルシステムを以下のようにしてマウントすることができます。
#
vnconfig -e vn0c /tmp/bootable.iso
#
mount -t cd9660 /dev/vn0c /mnt
FreeBSD 4.X および FreeBSD 5.X に対しては以下の通りです。
#
mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
#
mount -t cd9660 /dev/md0 /mnt
/mnt
と
/tmp/myboot
が同一かどうか確認してください。
sysutils/mkisofs には挙動を細かく制御するために他にもたくさんのオプションがあります。 特に、ISO 9660 レイアウトの変更や Joliet および HFS ディスク作成などの 詳細は mkisofs(8) のマニュアルページをご覧ください。
あなたが持っているのが ATAPI CD ライタなら、CD に ISO
イメージを書き込むために burncd
コマンドが使えます。
burncd
はベースシステムの一部で
/usr/sbin/burncd
としてインストールされています。
使い方はとても単純でオプションも少ししかありません。
#
burncd -f cddevice data imagefile.iso fixate
以上のコマンドは imagefile.iso
のコピーを cddevice
に書き込みます。
デフォルトのデバイスは /dev/acd0c
です。
書き込み速度や操作完了後に CD を自動的に取り出す方法、
オーディオデータの書き込みなどのオプションについては burncd(8)
を見てください。
あなたが持っている CD ライタが ATAPI ではなければ、
CD を書き込むのに cdrecord
を使う必要があります。
cdrecord
はベースシステムの一部ではなく、
sysutils/cdrtools の port または
適切な package を利用してインストールしなければなりません。
なお、ベースシステムを変更するとバイナリに矛盾が発生し、
「コースター」 を作ってしまうおそれがあります。
したがって、システムをアップグレードする度にこの port も作り直すか、
あるいは FreeBSD の安定版を追いかけているのならば、
新しいバージョンが利用できるようになった時に ports
をアップグレードする必要があります。
cdrecord
にはたくさんのオプションがありますが、
基本的な使い方は burncd
よりもさらに簡単です。
ISO 9660 イメージを書き込むには以下のようにします。
#
cdrecord dev=device imagefile.iso
cdrecord
のトリッキーな部分は、使用する
dev
を見つけるところにあります。
適切な設定を見つけるためには cdrecord
の
-scanbus
フラグを使います。
たとえば、以下のような結果が出力されるでしょう。
#
cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) *
リストにあるデバイスに対する適切な dev
の値がここに示されています。あなたの CD ライタをこのリストから見つけ、
カンマで区切られた 3 つの数値を dev
の値として使ってください。この例では CRW デバイスは 1,5,0
なので、適切な入力は dev=1,5,0
となります。
値を明示するもっと簡単な方法もあります。詳細は cdrecord(1)
を見てください。そこにはオーディオトラックを書き込む方法や、
書き込み速度その他を操作する方法も書かれています。
CD からオーディオデータを連続したファイルに展開し、ブランク CD にこれらのファイルを書き込むことで、オーディオ CD を複製することができます。 この手順は ATAPI および SCSI ドライブの間で少し異なります。
cdda2wav
を使用してオーディオを展開します。
%
cdda2wav -v255 -D2,0 -B -Owav
cdrecord
を使用して
.wav
ファイルに書き出します。
%
cdrecord -v dev=2,0 -dao -useinfo *.wav
「cdrecord」 に説明されているように
2.0
が適切に指定されていることを確かめてください。
ATAPI CD ドライバでは、それぞれのトラックを
/dev/acddtnn
のように利用できます。
ここで d
はドライブ番号であり、
nn
は二桁十進のトラック番号です。
一桁の場合 0 を前に付加する必要があります。
したがって、一番目のディスクの一番目のトラックは
/dev/acd0t01
、二番目のトラックは
/dev/acd0t02
、三番目のトラックは
/dev/acd0t03
などとなります。
適切なデバイスファイルが /dev
に存在することを確かめてください。
存在しなければ、たとえば次のようにして作成します。
#
cd /dev
#
sh MAKEDEV acd0t99
FreeBSD 5.0 では devfs(5) が
/dev
にエントリを自動的に作成、
管理するので、MAKEDEV
を使用する必要はありません。
dd(1) を使用して各トラックを展開します。 ファイルを展開する際、ブロックサイズを指定しなければなりません。
#
dd if=/dev/acd0t01 of=track1.cdr bs=2352
#
dd if=/dev/acd0t02 of=track2.cdr bs=2352
...
burncd
を使用して、
展開したファイルをディスクに書き込みます。
これらがオーディオファイルであること、
そして書き込みが終了したときに burncd
がディスクを固定 (fixate) することを明示しなければなりません。
#
burncd -f /dev/acd0c audio track1.cdr track2.cdr ... fixate
データ CD を、sysutils/mkisofs
を用いて作成されたイメージファイルと機能的に等価なイメージファイルにコピーできます。
これを使用して、すべてのデータ CD を複製することができます。
ここでの例は CDROM デバイスが acd0
であるとしています。あなたの CDROM デバイスに読み替えてください。
CDROM の場合には、パーティション全体またはディスク全体
を指定するために c
をデバイス名の後に追加しなければなりません。
#
dd if=/dev/acd0c of=file.iso bs=2048
これでディスクイメージを取り出すことができました。 すでに説明した方法を用いて CD に書き込むことができます。
さて、標準的なデータ CDROM を作成したので、
おそらく次はそれをマウントしてデータを読み出したいと思うでしょう。
デフォルトでは mount(8) は、ファイルシステムタイプを
ufs
としています。
次のように実行しようとすると、
#
mount /dev/cd0c /mnt
Incorrect super block
というエラーが返されてマウントできないでしょう。
CDROM は UFS
ファイルシステムではないために、
このような手順でマウントしようすると失敗します。
ファイルシステムのタイプが ISO9660
であると
mount(8) に教えさえすれば、すべてはうまく動作します。
mount(8) に -t cd9660
オプションを指定することでこれを行います。
たとえば /dev/cd0c
の CDROM デバイスを
/mnt
にマウントしたい場合は、
以下のように実行します。
#
mount -t cd9660 /dev/cd0c /mnt
使用している CDROM インタフェースによっては、
デバイス名
(この例では /dev/cd0c
)
が異なるかもしれないことに注意してください。
また、-t cd9660
オプションは、単に
mount_cd9660(8) を実行します。
この例を以下のように短縮することもできます。
#
mount_cd9660 /dev/cd0c /mnt
一般的にこの方法では、すべてのメーカの データ CDROM を使用することができます。しかしながら、特定の ISO 9660 拡張が施されたディスクでは奇妙な動作をするかもしれません。 たとえば Joliet ディスクは、 すべてのファイル名を 2 バイトの Unicode 文字で格納します。 FreeBSD カーネルは (まだ) Unicode を理解できないので、 非英語文字はクエスチョンマークで表示されます (FreeBSD 4.3 以降を使用している場合、CD9660 ドライバには適切な Unicode 変換表を読み込むための急ごしらえのフックが含まれています。 いくつかの共通のエンコードに対するモジュールは sysutils/cd9660_unicode port から利用可能です)。
CDROM をマウントしようとする時に、 Device not configured と表示されるかもしれません。これは、ディスクがトレーにないと CDROM ドライブが判断しているか、 ドライブがバス上に認識できないことを通常意味します。 ディスクが挿入されたことを CDROM ドライブが認識するには数秒かかりますので、 辛抱強く待ってください。
バスのリセットに返答するためのタイムアウトが短いために、時々 SCSI CDROM は認識に失敗するかもしれません。SCSI CDROM を持っている場合は、 次のオプションをカーネルコンフィギュレーションファイルに追加して、 カーネルを再構築してください。
options SCSI_DELAY=15000
これより、SCSI バスを起動時に 15 秒間停止させて、 CDROM ドライブがバスリセットに応答する機会を与えます。
ISO 9660 ファイルシステムを作成すること無く、 ファイルを直接 CD に書き込むこともできます。 この方法をバックアップ目的に使用している人もいます。 これは、標準 CD を書き込むよりもさらに速く実行することができます。
#
burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate
このように CD に書き込まれたデータを取得するには、 raw デバイスノードからデータを読み込まなくてはなりません。
#
tar xzvf /dev/acd1c
このディスクを通常の CDROM としてマウントすることはできません。 このような CDROM は FreeBSD を除いて、 他のすべてのオペレーティングシステムでは読み込むことはできません。 CD をマウントしたいか、 その他のオペレーティングシステムとデータを共有したい場合は、 上記に説明したように sysutils/mkisofs を使用しなくてはなりません。
このドライバは、ATAPI デバイス (CD-ROM, CD-RW, DVD ドライブなど) へ SCSI サブシステムを通じてアクセスすることを可能にします。 これにより、sysutils/cdrdao または cdrecord(1) のようなアプリケーションが使用できるようになります。
このドライバを使用するためには、 カーネルコンフィギュレーションファイルに次の行を追加する必要があります。
device atapicam device scbus device cd device pass
次の行もカーネルコンフィギュレーションファイルに必要です。
device ata device atapicd
両方がすでに存在しなければなりません。
それから再構築し、新しいカーネルをインストールし、 コンピュータを再起動します。 起動プロセス中にディスクライタは以下のように表示されるでしょう。
acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed
ドライブは /dev/cd0
デバイスを通じてアクセスすることが可能となります。
たとえば、次のようにして CD-ROM を /mnt
にマウントします。
#
mount -t cd9660 /dev/cd0c /mnt
root
権限で次のコマンドを実行して、
ライタの SCSI アドレスを得ることができます。
#
camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)
したがって、1,0,0
が cdrecord(1)
およびその他の SCSI アプリケーションで使用する SCSI アドレスです。
ATAPI/CAM および SCSI システムの詳細は atapicam(4) および cam(4) マニュアルページを参照してください。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。