初出: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が焼けたら忘れないうちに、メディアのラベルに内容が分かるようなコメントを書いておきましょう。