CD-R/Wでパケットライティング(Linux編)


CD-R/WをDVD-RAMのようにランダムアクセス可能にするお話です。

○用意するもの

packet-cd writingのパッチ
http://sourceforge.net/projects/packet-cd/

なるべく最新のもの、preバージョンでもかまわない

上のパッチに対応したカーネルソース
http://www.kernel.org

UDFのソース
http://sourceforge.net/projects/linux-udf/

各種ツールを利用します


○手順

まずカーネルソースを展開して、packet-cdパッチを当てます。

# patch -p1 < ~/packet-x.x.x

カーネルの再構築を行います。
packet-cdを有効にするために、[block devices]→[Packet writing on CD/DVD media]をyかmに。

また、[File systems]→[UDF file system support]をyかmに、その下の[UDF write support]をyにしましょう。dangerousとなっていますが気にせずに。

[Packet writing on CD/DVD media]の項目の下にある、[Enable write caching]をyにした場合は、ライトキャッシュが有効になります。

yにすればいいとおもわれるかもしれませんが、「For now this option is dangerous unless the CD-RW media is known good,as we don't deferred write error handling yet.」らしいです。

カーネルのコンパイルが終わったら、再起動して、そのカーネルで立ち上げてください。立ち上がりましたか?

次はUDFのソースからツール類をコンパイルします。カーネルモジュールなどは、すでにカーネルに取り込まれているのでツールのみ利用します。

# cd udf-x.x.x
# make config
# cd ../tools ; make
# cp pktsetup mkudf cdrwtool /usr/sbin

デバイスファイルを作成します。major-numberは97です。

# mknod /dev/pktcdvd0 b 97 0

CD-R/Wをフォーマットして、udfファイルシステムを構築します。

# cdrwtool -d /dev/sr0 -q

的場氏の環境ではSCSI CD-RWですので、sr0となります。それぞれの環境は
#cat /proc/sys/dev/cdrom/infoなどで確認してください。フォーマットにはかなりの時間がかかります(的場氏の環境では30分程度)。気長に待ちましょう。

packet-cdをモジュールにした場合は、モジュールをロードします。

# modprobe pktcdvd

writerをセットアップします。

# pktsetup /dev/pktcdvd0 /dev/sr0

あとは、マウントするだけです。/mnt/cdromにマウントすると仮定します。

# mount /dev/pktcdvd0 /mnt/cdrom -t udf -o rw,noatime

これで、ランダムアクセス可能なCD-R/Wが/mnt/cdrom以下にマウントされました。
ためしに適当なファイルをコピーしてみてください。

一般ユーザーからも書き込み可能にしたい場合は、/mnt/cdromのパーミッションを777にしておくと良いでしょう。

また、動的にモジュールをロードしたい場合は、/etc/modules.confに以下を追加しましょう。

alias block-major-97 pktcdvd

未確認ですが、メディアはCD-R/Wでなくても、CD-Rでも可能らしいです。実用的かどうかはわかりませんが。

的場氏の環境では650MBのCD-R/WをUDF形式でフォーマットすると、容量は450M程度になったそうです。