cdrecord

※CD-R書き込みソフトです。
 わたしは、テープバックアップなどの設備投資ができないので、
 バックアップにはCD-Rを使っています。

【カーネルの再構築】
CD-RドライブをLinuxがすでに認識していればよいのですが、
認識していないときは、カーネルの再構築が必要です。
SCSIかIDE接続かによって、指定するオプションがちがいますので、
ご注意ください。

【SCSI接続の場合のカーネルオプション】

Block devices Loopback device support Y or M
SCSI support SCSI support Y
SCSI CD-ROM support Y
Enable vendor-specific Extensions (For CDROM)) Y
SCSI generic support Y
SCSI low-level drivers 該当のSCSIカードをY
Filesystems ISO 9660 CDROM filesystem support Y
Microsoft Joliet CDROM extensions Y



【IDE接続の場合のカーネルオプション】

Block devices Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support Y
Include IDE/ATAPI CDROM support M or N
SCSI emulation support Y
Loopback device support Y or M
SCSI support SCSI support Y
SCSI CD-ROM support Y
Enable vendor-specific Extensions (For CDROM)) Y
SCSI generic support Y
Filesystems ISO 9660 CDROM filesystem support Y
Microsoft Joliet CDROM extensions Y


※LinuxでCD-R/RWを使う書き込みソフトは、SCSIプロトコルを使います。
 よって、IDE接続の場合は、IDEをあたかもSCSIのようにみせるための
 SCSIエミュレーション機能が必要となるわけです。


【ダウンロード】
ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/
(これは現在リンク切れのようです。【現在調査中】)

最新の「cdrecord-1.09.tar.gz」をダウンロードします。

【展開】
# cd /usr/src
# gzip -cd cdrecord-1.09.tar.gz | tar xvf -
# cd /usr/src/cdrecord-1.09


【コンパイルとリンク】
※以下の作業は rootで作業してください。

# cd DEFAULTS
# vi Defaults.linux
------------------------------------------------------
 ・・・
INS_BASE = /opt/schilly (←ここを以下のように書きかえます)
 ・・・
------------------------------------------------------
------------------------------------------------------
INS_BASE = /usr
------------------------------------------------------
「:wq!」で保存終了します。

# cd .. (もとのディレクトリにもどります)
# make
# make install

※cdrecordはrootだけが使用できるのですが、どうしても一般ユーザが
 実行したいというのなら、以下のようにします。
 # chmod 4755 /usr/bin/cdrecord
 これで、SUID-rootビットがONになり、一般ユーザでも実行できます。
 ただし、セキュリティ上は、おすすめできません。


【実行】

データをバックアップするには、そのままファイル/ディレクトリをCD-Rに保存する
方法と、圧縮して保存する方法があります。
CD-Rの特性上、保存されたファイルは「Read Only」属性がつくので、
復旧するときにCD-Rから単純にコピーしただけでは不具合が生じます。

よって、ここでは、データを tar で1つにまとめ、bzip2 で圧縮したものを、
CD-Rに保存するようにします。


【起動準備】
まず、CD-Rに書き込みたいファイルを、1つにまとめるのですが、専用の
ディレクトリをつくってしまいましょう。
作成する作業用ディレクトリは、容量のあるパーティションに作成してください。
CD-Rは、最大650MBまたは700MBの容量です。

ここでは、例として、「/home/backup」を作業用領域とし、「/home/users」以下の
ディレクトリをバックアップするものとして話を進めます。

# cd /home
# mkdir backup
# chmod 700 backup

【データのバックアップ(例)】
# cd /home/backup
# tar cvf back_data.tar /home/users

複数のディレクトリを1つにまとめるには、行の後ろにスペースで
区切って続けて入力します。
# tar cvf back_data.tar /home/users /etc /usr/local

一度作ったtarファイルに、他のファイル/ディレクトリを追加するには、
# tar rvf back_data.tar /bin
などとします。

tar ファイルの中身を確認するには
# tar tvf back_data.tar
で行います。


次に、tar ファイルを圧縮します。gzip でも良いのですが、より圧縮率の高い
bzip2 で行います。
# bzip2 -zvf back_data.tar
(圧縮するのでそれなりの時間がかかります。)

※bzip2 では、自動的にファイルの末尾に「.bz2」が付加されます。
また、tar ファイルはなくなって、圧縮された「tar.bz2」ファイルだけになります。


ちなみに、圧縮したものを展開するには、
# bzip2 -cd back_data.tar.bz2 | tar xvf -
とします。ただし、カレントディレクトリに対して展開されるので、
必要に応じて、そこから元のありかに手でコピーして復旧してください。


【CD-Rへの保存】
まず、SCSI/IDEのデバイス状況を表示します。
# cdrecord -scanbus

結果表示される「scsibus0」は実際のSCSIデバイスで、
「scsibus1」はエミュレーションのIDEデバイスです。
ここで、使用したいCD-R/RWドライブの行の左に表示される
「デバイス番号」をメモしておきます。
(ここでは例として「0,4,0」で説明します。)

(表示例)
----------------------------------------------------------------------
scsibus0:
   0,1,0  0) *
   0,2,0  0) *
   0,3,0  0) *
   0,4,0  0) 'YAMAHA  ' 'CDW4416S     ' '1.0j' 'Removable CD-ROM
   0,5,0  0) *
   0,6,0  0) *
   0,7,0  0) *

----------------------------------------------------------------------

次に、CDを実際に書き込むときのイメージファイルを保存するディレクトリを
作成します。
# cd /home
# mkdir cdimage
# chmod 700 cdimage

実際に、CDイメージファイル(例として「cd_image」という名前にします)をつくります。
# cd /home/cdimage
# mkisofs -r -J -o cd_image /home/backup/back_data.tar.bz2


CDイメージファイルができあがったら、ちゃんとファイルが保存されているかを
マウントしてテストしてみます。
# mkdir /mnt/cdimage
# chmod 700 /mnt/cdimage
# mount -o loop cd_image /mnt/cdimage

# ls -lsa /mnt/cdimage


ちゃんと保存されていれば、マウントを解除しておきます。
# umount /mnt/cdimage


いよいよCD-Rへの書き込みです。先ほどの「デバイス番号」のメモを
用意してください。
# cdrecord -v dev=0,4,0 speed=4 -multi -data cd_image

「dev=」には、先ほどの「デバイス番号」を、「speed=」には、ドライブの
書き込みスピード(4倍速なら4)と指定します。「-multi」オプションは、
追記できるようにするための指定です。

なお、テスト書き込み(実際には書き込まずにシミュレーションだけする)を
行うには、「-data」オプションの前に「-dummy」オプションを指定します。


これで書き込みが終了するまで待ちます。

※Windowsにくらべて、CUIで使用しているLinuxでは、それほど
 バッファアンダーランはおきませんが、エラーになるようでしたら、
 書き込みスピードを落としてみてください。

書き込みが完了したら、マウントして確認してみます。
# mount -t iso9660 -o ro /dev/sr0 /mnt/cdimage 
(「sr0」はSCSIの場合です。「dmesg | more」で、起動時のデバイス名を確認してください。)

# cd /mnt/cdimage
# ls -lsa

確認が終わったら、必ずマウントを解除してください。
# umount /mnt/cdimage



【参考情報】

【CD-RWの利用】
・デバイス番号の確認
# cdrecord -scanbus

・CD-RWの場合は、書き込む前にデータを消去(初期化)する
必要があります。
CD-RWの初期化は(例としてデバイス番号を「0,4,0」とします)
# cdrecord -v dev=0,4,0 blank=all

【ブータブルCDのイメージを作成(例)】
# mkisofs -r -J -b boot.img -c boot.catalog -o cd_image /home/cdimage/

【音楽CDの作成】
サーバ用途PCとしては、音楽CDを作成する機会はないとは思いますが、
参考としてあげておきます。

音楽CDは、音楽データの形式を以下のようにします。
◎44,100Hz、16bitサンプリングのWAVもしくはPCMファイル
そのファイルを、cdrecordコマンドの「-audio」オプションの後に
つづけて指定すればOKです。

たとえば、1曲目を「1.wav」、2曲目を「2.wav」としたばあい、
# cdrecord -v dev=1,0,0 speed=1 -audio *.wav

とすると音楽CDが作成できます。

なお、市販の音楽CDからWAVファイルを作成するツールとして、
「cdda2wav」や「cdparanoia」などのいわゆる「CDリッパー」がありますが、
これらを使うと、自分の好きな曲を好きな順にした、「自分のベストCD-R」が
作成できます。

cdparanoiaでは、以下のようにします。
# cdparanoia 5 5.wav (5トラックを「5.wav」に保存)
# cdparanoia 3-5   (3トラックから5トラックまでを1つのファイルに保存)
# cdparanoia -B 1-   (すべての曲を別ファイルに保存)


※なお、CDリッパーについては、著作権法上グレーな部分がありますので、
 ここではインストール方法は載せられませんのでご了承ください。

【マルチセッションCDの作成(例)】(例としてデバイス番号を「0,4,0」とします)
# cdrecord -v -multi dev=0,4,0 -data cd_image -audio music*.wav