ご存知のとおり、CD-Rはいまや最もコストパフォーマンスの良いリムーバブル記録メディアです。ドライブの価格も安く、メディアもコンビニに置かれるほど普及しています。記録速度も問題ありません。
また忘れてならないのがそのポータビリティです。CD-Rに保存されたデータはほとんどのOSで読み出すことができます。
問題はその記録容量が約700MBと比較的少ないということです。このためディスクボリュームのフルバックアップなどの用途には向かず、おのずとパーシャルバックアップに限定されます。
さて能書きはこれくらいにしてLinuxにおけるCD-Rの使い方について解説します。解説はRedhat
Linux 9を前提としたものです。
14.1 LinuxでCD-Rを使えるようにするための準備
LinuxでCD-Rにデータを書き込めるようにするためには初期設定が必要です。具体的には、ファイル
/etc/cdrecord.conf を編集してお使いのCD-Rドライブに合った設定を行います。以下の手順を参考にしてください。RedHat
Linux9でIDEに接続されたATAPI CD-Rドライブを想定しています。
またブートローダはGRUBを使用しているものとします。
手順1. CD-Rドライブが認識されているかどうかを確認する
rootでログインし、cdrecord -scanbusとタイプします。
[root@host root]# cdrecord -scanbus
Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
scsibus0:
0,0,0 0) 'RICOH ' 'DVD/CDRW MP9120 ' '1.10' 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) *
[root@host root]#
|
注目すべき部分を赤色で強調しています。実際の出力には色は付きません。
このように出力のいずれかの行にCD-Rドライブの情報が現れればOKです。IDE接続であるのにSCSIデバイスと認識されるのは、LinuxのSCSIエミュレーションによるものです。
出力行の意味は次のとおりです。
- 0,0,0
- 順にSCSIバス番号,ターゲットID,LUN(Logical Unit Number)。
- 0)
- 「SCSIバス番号×100+ターゲットID」で表した番号。例えばSCSIバス=1,ターゲットID=1では
「101)」 となる。
- 'RICOH ' 'DVD/CDRW MP9120 ' '1.10' Removable CD-ROM
- SCSIのInquiryコマンドで得られたドライブ情報。順にベンダ情報,デバイスID,レビジョン,デバイスタイプ。
RedHat Linux 9 を普通にインストールすればCD-Rドライブはこのように最初から認識できているはずです。もし認識されていない場合は次の「手順2」に進んでください。逆に問題なく認識できている場合は「手順2」はスキップしてください。
手順2. CD-Rドライブが認識されない場合の対処方法
ATAPI接続のCD−RドライブをLinux上で利用するためには
- IDEドライバで認識されていること
- SCSIエミュレーションによりSCSIデバイスとして認識されていること
の2つの条件を満たす必要があります。
まず条件Aを確認してみましょう。dmesgコマンドによるブートメッセージを調べます。
[root@host root]# dmesg | grep ATAPI
hdd: RICOH DVD/CDRW MP9120, ATAPI CD/DVD-ROM drive
[root@host root]#
|
このようにCD-Rドライブが認識されていればOKです。認識されていない場合は事態は厄介です。CD-Rドライブを買い替えるか、カーネルのソースを追って認識されない原因を探り、対策するなどの対応が必要になります。
余談ですが、私はEasyHardとSPCというLinux用のSCSIドライバを書いていたことがあります。もう10年も前のことで、カーネルバージョンは1.1でした。当時はカーネルのSCSIドライバを熟知していたので、どのようなSCSI機器も使えるようにできるという自信がありました。
そんな活動をしていたお陰でLinus氏と彼のフィアンセ(今の奥様)とお話したこともあります。とても素敵なカップルでした。
話をもとに戻します。
次は条件B、すなわちSCSIエミュレーションが有効になっているかどうかの確認です。前と同様にdmesgの出力を調べます。
[root@host root]# dmesg | grep -i scsi
Kernel command line: ro root=/dev/md2 hdd=ide-scsi
ide_setup: hdd=ide-scsi
SCSI subsystem driver Revision: 1.00
hdd: 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: 32x/32x writer cd/rw xa/form2 cdda tray
[root@host root]#
|
赤くハイライトした部分と同様な行が見えれば問題ないはずです。手順1をもう一度実行して、その結果を注意深く眺めてください。
逆に上のような行が見えない場合はSCSIエミュレーションの設定がなされていないことが考えられます。この場合に調べるファイルは/boot/grub/grub.confです。
# grub.conf generated by anaconda
<中略>
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-20.9)
root (hd0,0)
kernel /vmlinuz-2.4.20-20.9 ro root=/dev/hda2 hdd=ide-scsi
initrd /initrd-2.4.20-20.9.img
|
赤くハイライトした部分に注目してください。「hdd=ide-scsi」というカーネルオプションが、"hdd"として認識されるIDEドライブをSCSIドライブとしてエミュレーションするための指定です。条件Aを調べた時にそのデバイス名「hd〜」がわかっているはずなので、/boot/grub/grub.confを編集してそのオプションを追加してください。例えばCD-Rドライブがhdcとして認識されていたとすれば、
kernel /vmlinuz-2.4.20-20.9 ro root=/dev/hda2 hdc=ide-scsi
とします。
これが済んだらサーバをリブートしてから、手順2でSCSIエミュレーションが有効になったかどうかを確認してみてください。
手順3. /etc/cdrecord.confの編集
次に/etc/cdrecord.confを編集します。このファイルはcdrecordコマンドがCD-Rへの書き込みを行う際にデフォルトで参照するものです。
注: オリジナルの設定ファイルは /etc/default/cdrecord です。 Redhatディストリビューションではこれが /etc/cdrecord.conf に変更されています。
#ident @(#)cdrecord.dfl 1.4 02/07/07 Copyr 1998 J. Schilling
# The default device, if not specified elswhere
#
CDR_DEVICE=cdr
#
# The default FIFO size if, not specified elswhere
#
CDR_FIFOSIZE=4m
# Unless you have a good reason, use speed == -1 and let
# cdrecord use it's intercal drive specific defaults.
#
# drive name device speed fifosize driveropts
#
cdr= 0,0,0 -1 -1 burnfree
|
#で始まる行はコメントです。すなわち意味のある行は3行だけです。
- CDR_DEVICE=cdr
- 標準的に使用するCD-Rドライブの名前を定義します。「cdr」が名前で、任意の名前で構いません。
- CDR_FIFOSIZE=4m
- 書き込み時に用いるバッファのサイズを指定します。「4m」は4Mバイトの意味で、通常この値でOKです。
- cdr= 0,0,0 -1 -1 burnfree
- 上のCDR_DEVICEで定義したドライブの仕様を記述します。各値の意味は次のとおりです。
- 0,0,0
- SCSIバス番号,ターゲットID,LUN(Logical Unit Number)
cdrecord -scanbus で得た値
- -1 -1
- それぞれ書き込み速度,バッファサイズ。-1は自動認識であることを示す
- burnfree
- バッファアンダーラン防止機構を用いる。ドライブにその機能が備わっている場合にのみ有効
14.2 CD-Rへのデータの書き込み
以上の準備が済んだら実際にCD-Rへの書き込みをしてみましょう。手順は以下の通りです。
手順1. ターゲットディレクトリのアーカイブ
バックアップを目的としますから、ファイルやディレクトリのオーナ,パーミッション,タイムスタンプなどの各種属性を保存する必要があるため、バックアップのターゲットディレクトリをtarコマンドでアーカイブします。
以下の例ではディレクトリ /home と /etc をターゲットとし、それぞれを圧縮しながらアーカイブして2本のファイルを作ります。作業ディレクトリは
/var/tmp とします。
[root@host root]# cd /var/tmp
[root@host tmp]# tar cvzf home-20040317.tgz -p -C /home --exclude \*~ .
<表示省略>
[root@host tmp]# tar cvzf etc-20040317.tgz -p -C /etc --exclude \*~ .
<表示省略>
[root@host tmp]# ls -l
合計 162644
-rw-r--r-- 1 root root 3524037 3月 17 13:17 etc-20040317.tgz
-rw-r--r-- 1 root root 162850316 3月 17 13:16 home-20040317.tgz
[root@host tmp]# |
tarコマンドのオプションの意味は次のとおりです。
- cvzf
-
- c
- Create : アーカイブ生成
- v
- Verbose : 詳細経過表示
- z
- Zip (Compress) : 圧縮
- f
- File : アーカイブファイル名指定
- -C /home または -C /etc
- アーカイブ実行前に指定されたディレクトリに移動する
- --exclude \*~
- 指定されたファイルはアーカイブしない。この例では ~ (チルド)で終わるファイル
-- すなわちemacsが作るバックアップファイルはアーカイブしない
最後に「ls -l」でファイルサイズを調べてその合計がCD-Rの記録可能容量以内であることを確認します。600MBを目安にすれば良いでしょう。
手順2. CD-ROMフォーマットのイメージファイル作成
次にCD-ROMフォーマット(ISO9660,Joliet)に準拠したイメージファイルを作成します。コマンドは
mkisofs です。
[root@host tmp]# mkisofs -r -J -o 20040317.img home-20040317.tgz etc-20040317.tgz
6.15% done, estimate finish Wed Mar 17 13:37:43 2004
12.31% done, estimate finish Wed Mar 17 13:37:43 2004
18.45% done, estimate finish Wed Mar 17 13:37:37 2004
24.61% done, estimate finish Wed Mar 17 13:37:39 2004
<表示中略>
98.42% done, estimate finish Wed Mar 17 13:37:40 2004
Total translation table size: 0
Total rockridge attributes bytes: 346
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 5444
81296 extents written (158 Mb)
[root@host tmp]# |
mkisofsコマンドのオプションの意味は次のとおりです。
- -r
- ファイル,ディレクトリのオーナや属性を適切に処理する
- -J
- Windows環境でも読めるようにするためのJolietフォーマット指定
- -o 20040317.img
- 出力するイメージファイル名を指定
手順3. CD-Rへのイメージファイル書き込み
いよいよCD-Rへの書き込みです。CD-Rをドライブにセットしてから次に示す手順に従って下さい。書き込みコマンドは
cdrecord です。
[root@host tmp]# cdrecord -eject -dao 20040317.img
Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jg Schilling
scsidev: '0,0,0'
scsibus: 0 target: 0 lun: 0
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
Device type : Removable CD-ROM
<表示中略>
Track 01: Total bytes read/written: 166494208/166494208 (81296 sectors).
[root@host tmp]# |
cdrecordコマンドのオプションの意味は次のとおりです。
- -eject
- 書き込み完了後自動的にイジェクトする
- -dao
- Disk at once (Session at once) モード指定
/etc/cdrecord.confで指定した条件がデフォルトになるため、コマンドラインはシンプルになります。
手順4. 書き込みの確認
念のためファイルが書き込まれたかどうかを確認します。通常のCD-ROMと同様にマウントしてからlsコマンドで内容を確認します。マウントポイントは
/mnt/cdrom とします。確認が終わったらアンマウントしてイジェクトします。
[root@host tmp]# mount /mnt/cdrom/
[root@host tmp]# ls -l /mnt/cdrom/
合計 162476
-r--r--r-- 1 root root 3524037 3月 17 13:17 etc-20040317.tgz
-r--r--r-- 1 root root 162850316 3月 17 13:16 home-20040317.tgz
[root@host tmp]# umount /mnt/cdrom
[root@host tmp]# eject |
なお、上の操作でマウント,アンマウントやイジェクトができない場合は次を試してみてください。
[root@host tmp]# mount -rt iso9660 /dev/cdrom /mnt/cdrom/
[root@host tmp]# ls -l /mnt/cdrom/
合計 162476
-r--r--r-- 1 root root 3524037 3月 17 13:17 etc-20040317.tgz
-r--r--r-- 1 root root 162850316 3月 17 13:16 home-20040317.tgz
[root@host tmp]# umount /mnt/cdrom
[root@host tmp]# eject /dev/cdrom |
バックアップするディレクトリがいつも同じなら、これまでの一連の操作をシェルスクリプトなどにして簡略化すると良いでしょう。
さてこれでバックアップの第1回は終わりです。ご意見やご要望・ご質問は当社の掲示板でお願いします。
次回は最近安価になってきたネットワークドライブ(NASドライブ)を利用したバックアップ方法を解説します。ご期待下さい。
(石)
|