準備
DMA転送を有効に
現バージョンのFreeBSDでは、IDEコントローラがDMA転送をサポートしていても、HDD以外のATAPIデバイスに関しては自動的にDMA転送を有効化せず、PIOモードとして動作する。DVDのような大容量メディアを扱う場合、CPUがI/Oポートを直接アクセスするPIOモードでは、非常に負荷がかかるので、DMA転送を有効にした方が良い。
DMA転送を有効にするためには、/boot/loader.conf に
hw.ata.atapi_dma="1"
の行を追加する必要がある。これにより、変更前、
% dmesg | grep DVD acd0: DVDR <HL-DT-ST DVDRAM GSA-4120B> at ata1-slave PIO4
のように表示されていたのが、上記の設定を行った後、再起動すると、
% dmesg | grep DVD acd0: DVDR <HL-DT-ST DVDRAM GSA-4120B> at ata1-slave UDMA33
のように表示されるようになる。これで、DMA転送は有効化されている。
カーネルの調整
DVD-Rを焼くためにportsからDVD+RW Toolsを導入する場合、ドライブは、SCSIデバイスである必要がある。その場合、現在使用しているATAデバイスを仮想的にSCSIデバイスとしてアクセス出来るようにするため、カーネルのコンフィギュレーションファイルに
device atapicam device scbus device pass device cd
を追加し、カーネルを構築し直す。再起動後、
% dmesg | grep DVD acd0: DVDR <HL-DT-ST DVDRAM GSA-4120B> at ata1-slave UDMA33 cd0: <HL-DT-ST DVDRAM GSA-4120B A102> Removable CD-ROM SCSI-0 device
のように、SCSIデバイスとしても認識していればOK。ATAデバイスでも、DVD+RW Toolsを利用できる。
DVD+RW Toolsのインストール
portsから、sysutils/dvd+rw-tools*1をインストールする。DVD+RW Toolsは、sysutils/cdrtoolsに含まれるmkisofs(8)をISO9660イメージを作成する際、必要とするので、依存関係から、sysutils/cdrtoolsも一緒にインストールされる*2。
*1名前は「DVD+RW Tools」となっているが、DVD-R/-RWにも対応している。
*2標準でインストールされるsysutils/cdrtoolsでは、日本語ファイル名等を扱えないので、もし、日本語ファイル名等を扱いたければ、事前に、sysutils/cdrtools-cjkを予めインストールしておくこと。
DVD-Rに焼く
ISOイメージの作成
sysutils/cdrecordに含まれているmkisofsを使用して、DVDに書き込むISOイメージを作成する。
% mkisofs -iso-level 2 -v -r -J -V VOLUME_NAME \ -o DVD_IMAGE.iso TARGET_DIR/
もしくは(sysutils/cdrecord-cjkをインストールして日本語ファイル名を扱う場合)、
% mkisofs -iso-level 2 -v -r -J -input-charset euc-jp \ -V VOLUME_NAME -o DVD_IMAGE.iso TARGET_DIR/
として、入力元のcharsetを指定する*5。
*5この場合、ローカルのドライブにあるファイル名の文字コードはeuc-jpと想定(その他のコードセットについては、mkisofs 漢字パッチのサイト参照)。
ISOイメージを作成せずに焼く
いわゆるオンザフライ書き込みで焼く場合。内部的には、ISOイメージを作成しながら書き込む。低いスペックのマシンだと、きついかも知れない。
# growisofs -Z /dev/cd0 -R -J /some/files
また、同じDVDに追加書込する場合は、
# growisofs -M /dev/cd0 -R -J /more/files
のようにする。
確認
# mount_cd9660 -C eucJP /dev/cd0 /cdrom
などとマウントすることで、内容を確認できます*6。
*6言語のロケールをja_JP.eucJPとしている場合の例。なお、ja_JP.UTF-8としている場合、現在のkiconv(3)は、一文字が2バイトを超えるものは扱えないので、その場合、ISO 9660 filesystemを介しての日本語ファイル名は正常には表示できない。
DVD-RW
DVD-RWのフォーマット
DVD-RWでは、最初にまず、メディアをフォーマットしなければならない。 しかし、なぜか、DVD+RW Toolsに含まれるdvd+rw-formatというコマンドで、
% dvd+rw-format -blank=full /dev/cd0
とやったら、
* blanking |:-[ READ TRACK INFORMATION failed with SK=5h/ASC=24h/ACQ=00h]: Input/output error
とエラーが出て、メディアを消去出来ない。
FreeBSDに標準で含まれているコマンドのburncd(8)*7でも、DVD-Rのメディアをフォーマット出来るようなので、
% burncd -f /dev/acd0 format dvd-rw
とやったら、出来た。
DVD-RAM
DVD-RAMの場合は、普通のHDD等と同じ様に扱える。
ディスクラベルを書き込む
まず、ドライブに、DVD-RAMメディアを挿入し、ディスクラベルを書き込む*8。
scorpio# bsdlabel -w cd0 auto
書き込んだディスクラベルを確認すると、
scorpio# bsdlabel cd0 # /dev/cd0: 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 2236700 4 unused 0 0 c: 2236704 0 unused 0 0 # "raw" part, don't edit
の様になっている*9。
*8例として、SCSIデバイスcd0として説明しているが、別にacd0と置き換えてもらっても構わない。なお、従来、ディスクラベルの読み書きに使用されていたコマンドdisklabel(8)は、FreeBSD 5.1以降、bsdlabel(8)に置き換えられた。
*9ここでは、4.7GBサイズのDVD-RAMメディアを使用。
newfsを実行
次に、このbsdlabelで作成したパーティションaにnewfs(8)を実行する。
scorpio# newfs /dev/cd0a
/dev/cd0a: 4368.6MB (8946800 sectors) block size 16384, fragment size 2048
using 24 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
160, 376512, 752864, 1129216, 1505568, *省略*
もう一度、ディスクラベルを確認すると、
scorpio# bsdlabel cd0 # /dev/cd0: 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 2236700 4 4.2BSD 2048 16384 28552 c: 2236704 0 unused 0 0 # "raw" part, don't edit
の様に、UFSのパーティションが作成されたことが判る*10。
*10もちろん、パーティションを指定せずに直接「newfs /dev/cd0」とやってもらっても構わないが、その場合、bsdlabelでパーティション情報の取得はできなくなる。メリットは、オフセット分の容量を節約できるぐらい。
関連情報
- Creating and Using Optical Media (DVDs) … FreeBSD Handbook
- DVD+RW/+R/-R[W] for Linux - DVD+RW Toolsの公式サイト 【日本語訳】
- FreeBSD - このWikiフォーラム内におけるFreeBSDに関係するものの目次です。 ...