『CD-R にスナップショットをバックアップ』

初出:Software Design 2002年11月号
	大特集「究めるPlamo Linux クライアント編 
	3章○自分だけのPlamoを楽しむ〜MyPlamo作成術」

コンピュータと中良くやってゆくためには、データのバックアップをする必要があります。かつてバックアップというと磁気テープでした、まだ、オープンリールを使っている方もいらっしゃるかもしれませんが、QICストリーマ、8mmテープ、DATとメディアも小さくなり扱いも楽になってきました。しかしながら、テープデバイスは安くても数万円はしますし、シーケンシャルアクセスなので取り扱いは不便です。
最近は、ハードディスクドライブも安くなったので、バックアップはハードディスクなどとおっしゃるひともいます。しかし、ハードディスクは大きくて重いため保管や持ち運びに不便です。
フロッピードライブはPCにとっては標準デバイスでしたが、最近では CDROMブートができるようになり、CDROM ドライブはあってもフロッピードライブのない PC も見られるようになりました。もっとも、フロッピードライブにバックアップできるのはせいぜい数メガバイトで、昨今のコンピュータ事情ではまったく小さ過ぎます。
というわけで、やはり CD-R へのバックアップはドライブやメディアの安さ、デバイスの普及率からいうと断トツで有理ですね。デバイスは数千円で手に入るし、メディアは数十円。かつてのフロッピー並のコストで大容量のバックアップをすることができます。
CD-R に焼き込みをするための cdrecord コマンドは SCSI CD を対象にしています。価格の安い ATAPI CD デバイスは、Linux の SCSI エミュレーションにより、SCSI CD として認識させることができ、利用することができます。

さて、CD-R へのバックアップの手順ですが、まずは例として /boot にマウントされている /dev/hda1 デバイスをしてみましょう。dd コマンドでデバイスをそのままファイルに書き出して、それを CD-R に焼き込みます。

bash-2.04# df /dev/hda1
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1               256667     13456    229959   6% /boot

bash-2.04# dd if=/dev/hda1 of=/tmp/hda1.ext2
530082+0 records in
530082+0 records out

中身がコピーできていることを出力されたファイルをループバックデバイスとしてマウントして確認してみましょう。

# mount -t ext2 /tmp/hda1.ext2 /mnt -o loop
# ls -l /mnt
# umount /mnt

cdrecord コマンドは "-scanbus" で SCSI に接続されたデバイスを確認することもできます。

# cdrecord  -scanbus
Cdrecord 1.8.1a07 (i686-pc-linux-gnu) Copyright (C) 1995-2000 Jrg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'TEAC    ' 'CD-W524E        ' '1.0A' 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) *

ここでは、バス "0,0,0" に繋がっているデバイスが CD-R にあたります。このバス番号をデバイスとして指定します。スピードは CD-R デバイスと書き込む CD-R メディアの両方が対応する値にします。ここでは 8 倍速を指定します。CD-R デバイスに新しいメディアをセットして、次のようにコマンドを実行します。

# cdrecord -v dev=0,0,0 speed=8 /tmp/hda1.ext2 
Cdrecord 1.8.1a07 (i686-pc-linux-gnu) Copyright (C) 1995-2000 Jrg Schilling
TOC Type: 1 = CD-ROM
...
Starting new track at sector: 0
Track 01: 258 of 258 MB written (fifo 100%).
WARNING: padding up to secsize.
Track 01: Total bytes read/written: 271401984/271403008 (132521 sectors).
Writing  time:  230.223s
Fixating...
Fixating time:   34.997s
cdrecord: fifo had 8283 puts and 8283 gets.
cdrecord: fifo was 0 times empty and 7220 times full, min fill was 94%.
--

CDが焼けたら、マウントをして確認します。

# mount -t ext2 /dev/cdrom /mnt -o ro
# ls -l /mnt

マウントを外して取り出します。

# umount /mnt
# eject

この方法で焼いた CD-R は、通常 Linux でしか読むことができません。ほかの OS でも読めるような CD-R にしたいのであれば、ISO9660 形式のファイルシステムのイメージにしてから CD-R に焼き込みます。ISO9660 形式のイメージは mkisofs コマンドで作ることができます。
たとえば、/boot ファイルシステムを mkisofs コマンドでISO9660 形式のファイルシステムのイメージにしてみます。Windows の長いファイル名としても読めるように -J オプションを付けて Joliet コードを有効にします。また、-R オプションで Unix のファイル属性を保つように Rock Ridge 拡張を有効にします。-N オプションでバージョン番号を省略します。その他に、-V オプションに続けてボリュームIDを付けておくと便利です。-o オプションに続けて出力ファイル名を、最後に ISO9660 イメージにしたいファイルシステム(ディレクトリ名)を指定して mkisofs を実行します。

# mkisofs -RNJ -V "boot directory" -o boot.iso /boot
...
Total extents actually written = 6729
Total translation table size: 0
Total rockridge attributes bytes: 3329
Total directory bytes: 2048
Path table size(bytes): 26
Max brk space used 89c4
6729 extents written (13 Mb)

サイズがメディアのサイズに収まるか確認し、さらに念を入れるなら iso9660 ファイルシステムとしてループバックデバイスでマウントをして内容を確認します。そして、既に説明したように CD-R に焼き込みます。

# ls -l boot.iso
# mount -t iso9660 /dev/cdrom /mnt -o ro
# ls -l /mnt
# umount /mnt
# cdrecord -v dev=0,0,0 speed=8 boot.iso

CD-Rが焼けたら忘れないうちに、メディアのラベルに内容が分かるようなコメントを書いておきましょう。


(c) 2002-2003 juk at yokohama email ne jp