LANDISK HACKING DIARY
Since2005/8/17
TOPへ戻る

   INDEX
 
1. CD-R 作成前の準備
2. CD-R に焼いてみる
3. CD-RW に焼いてみる
4. 参考文献




 
   CD-R 作成前の準備

 

 


CD-R にデータを焼くのは今までやったことがないので試してみることにした。必要なソフトウェアは、

 ・mkisofs
 ・cdrecord


の2つがあれば大丈夫とのことなのでさっそくインストール。X上で焼くには、xcdroast も必要みたい。どうせXはインストールしてないので以下の2つだけいれておく。

# apt-get install cdrecord mkisofs

Do you want the cdrecord binaries to be installed SUID root? <no>

バージョンを確認しておく。cdrecord は バージョン2からcdrtools という名前に変わったそう。

# cdrecord --version
Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Jrg Schilling

# mkisofs --version
mkisofs 2.01-unofficial-iconv (i686-pc-linux-gnu)

接続されている CD-R を確認してみる(SCSI BUSをスキャンする)。エラーがたくさん出力されている。SCSI ドライヴのCD-R/RW ドライヴは問題ないようだが、IDE 接続のドライヴの場合は、IDE をSCSI として認識させてあげなければならない(SCSI エミュレーション)。以下では、SCSI ドライバー、/dev/pg* が開けないと言われている。

# cdrecord -scanbus
cdrecord: No such file or directory. Cannot open '/dev/pg*'. Cannot open SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'.
cdrecord: For possible transport specifiers try 'cdrecord dev=help'.
cdrecord:
cdrecord: For more information, install the cdrtools-doc
cdrecord: package and read /usr/share/doc/cdrecord/README.ATAPI.setup .

ヘルプを表示してみる。IDE/ATAPI 接続だろうから、以下のようにコマンド打ってみた。お、正常に認識したっぽい。

# cdrecord dev=help
# cdrecord -scanbus dev=ATAPI
scsidev: 'ATAPI'
devname: 'ATAPI'
scsibus: -2 target: -2 lun: -2
Warning: Using ATA Packet interface.
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) 'MATSHITA' 'UJDA730 DVD/CDRW' '1.00' Removable CD-ROM
0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

ドライヴを調べてみる。/dev/hdc が CD-R/RW ドライブのようだ。

# dmesg | grep ATAPI
hdc: UJDA730 DVD/CDRW, ATAPI CD/DVD-ROM drive
hdc: ATAPI 24X DVD-ROM CD-R/RW drive, 2048kB Cache, UDMA(33)
scsi0 : SCSI host adapter emulation for IDE ATAPI devices

もしくは、

# dmesg | grep '^hd.:'

念のため、確認。ide-scsi は組み込まれているようだ。

# lsmod | grep ide-scsi
ide-scsi 8272 0
scsi_mod 86052 3 [sr_mod sg ide-scsi]
ide-core 91832 6 (autoclean) [ide-scsi ide-cd ide-detect piix ide-disk]

※ 最近のディストリでは、ide-scsi が標準でカーネルに組み込まれているはずですが、組み込まれていない場合はカーネルの再構築が必要となります。以下のようにして確認する。

# locate ide-scsi.o
/lib/modules/2.4.27-2-386/kernel/drivers/scsi/ide-scsi.o

/etc/modules に以下の行を追加しておく。RH系のように、/etc/modules.conf でないところに注意。なんで、debian はいちいち設定ファイルの名前が違うんだ。「ignore=hdc」のhdc の部分はCD-R/RW のパーティションを指定する。通常は、hdc になっている。(これはしなくてもいいかも)

# vi /etc/modules.conf
ide-cd ignore=hdc
ide-scsi

/boot/grub/menu.lst を編集しておく(grubの場合)。再起動してみて、引数なしで scanbus を実行して正常に表示されれば成功?ってことかな。lilo の場合は、lilo.conf に append="hdc=ide-scsi"を追加する。dmesg コマンドで正常に認識されているかどうかも確認しておこう。

# vi /boot/grub/menu.lst
kernel /vmlinuz-2.4.27-2-386 root=/dev/hda7 ro vga=775 hdc=scsi
# cdrecord --scanbus
# dmesg | grep -i scsi
ide_setup: hdc=scsi
ide-cd: passing drive hdc to ide-scsi emulation.
SCSI subsystem driver Revision: 1.00
hdc: attached ide-scsi driver.
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
Type: CD-ROM ANSI SCSI revision: 02

Attached scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0

sr0: scsi3-mmc drive: 24x/24x writer cd/rw xa/form2 cdda tray


■ISO イメージを作成する

まず、ISOイメージを作成してから、それをCD-R に焼いてみる。

 -o isoイメージを指定する
 -J Joliet 拡張サポートを有効にし、Windowsとの互換性をもたせる
 -r Rock Ridge拡張サポートを有効とし、UNIX/Linux との互換性をもたせる
 -v 詳細表示(verbose)
 -V ボリュームラベル名を指定する。マイコンピュータに表示される名前。


# mkisofs -o /home/kororo/test.iso -J -r -v -V package /var/cache/apt/archives/

INFO:   UTF-8 character encoding detected by locale settings.
        Assuming UTF-8 encoded filenames on source filesystem,
        use -input-charset to override.
mkisofs 2.01-unofficial-iconv (i686-pc-linux-gnu)
Scanning /var/cache/apt/archives/
Scanning /var/cache/apt/archives/partial
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 17
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 18
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 19
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 20
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 24
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 28
Done with: Directory tree                          Block(s)    3
Writing:   Joliet directory tree                   Start Block 31
Done with: Joliet directory tree                   Block(s)    2
Writing:   Directory tree cleanup                  Start Block 33
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 33
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 34
 92.62% done, estimate finish Fri Sep  9 09:33:05 2005
Total translation table size: 0
Total rockridge attributes bytes: 1765
Total directory bytes: 2048
Path table size(bytes): 26
Done with: The File(s)                             Block(s)    5222
Writing:   Ending Padblock                         Start Block 5256
Done with: Ending Padblock                         Block(s)    150
Max brk space used 21000
5406 extents written (10 MB)

次に、作成した、iso イメージをマウントしてみる。カーネルがloop back deviceをサポートしている場合は、-o loop のようにする。このマウント作業は、CD-Rが正常に焼けるかどうかのテスト確認にもなりますので、いくらCD-R が安いとはいえ、資源の無駄遣いにならないためにも実際にライティングする前には行っておきましょう。

# mkdir /mnt/iso
# mount -t iso9660 -o loop test.iso /mnt/iso/
# cd /mnt/iso ; ls
total 10434
-r--r--r-- 1 root root 57104 2005-03-02 04:02 apmd_3.2.2-3_i386.deb
-r--r--r-- 1 root root 577738 2005-01-10 02:17 cdrecord_4%3a2.01+01a01-2_i386.deb
# umount /mnt/iso


 
     CD-R に焼いてみる
   
いよいよ本番。ドキドキ。まず、CD-R/RWのSCSIアドレスを調べなければなりません。先頭に「0,0,0 」となっている3つの数字に着目します。この3つの数字は左から「SCSIバス」、「デバイスID」、「LUN (論理ユニット番号)」を指している。この3つの数字は焼く際に必要となります。

# cdrecord -scanbus

Linux sg driver version: 3.1.25
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) 'MATSHITA' 'UJDA730 DVD/CDRW' '1.00' Removable CD-ROM
0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

以下のようにして焼く。dev=0,0,0 は上記で表示されたSCSI アドレスを指定する。なお、cdrecord は、CD-Rレコーダーの最大速度で焼こうとするので、speed を明示的に指定する必要はありません。性能の低いマシンやドライヴを使用している場合などに指定すると良いかもしれない。

# cdrecord -v -eject speed=8 dev=0,0,0 -data test.iso

 -v 詳細表示(verbose)
 -e 終了時にイジェクトする
 speed 倍速の指定
 -dummy テスト書き込み



 
     CD-RW に焼いてみる
   
CD-RW 内のデータを消去するには、以下のようにします。blank=all をやると時間がかかります。blank=fast がクイックフォーマットみたいなもの。

# cdrecord -v dev=0,0,0 blank=fast
or
# cdrecord -v dev=0,0,0 blank=all

焼いてみる。

# cdrecord -v -eject speed=8 dev=0,0,0 test.iso

CD-RW なのに、追加書き込みができないのかな。CD-Rのマルチセッション書込みの記事はたくんさんあるけど、CD-RW に追加書込みしている記事は見かけない。「リード→デリート→バーン」の繰り返しなのかな?一度焼いてしまった後、再度焼くためには消去しなければならなってちょっとめんどいな。もし、CD-RW に追加書込みできる方法があれば誰か教えて。


 
     参考文献
   
LinuxでCDを焼く
CD-Writing HOWTO





TOPへ戻る
 
Copyright © KORO All Rights Reserved.