2007-03-24

DVD-Rをテープ代わりに使う(実践編)

DVD-Rをテープ代わりに使う(能書き編)からの続き。

※この記事で扱っている内容を実際に運用した結果について責任は持てませんので、やるなら必ず自分で検証してからにしてください。

UNIXライクなシステムでは、かなり昔から CD-Rを焼くのに cdrecordというツールが使われてきた。
今では、これが DVD(-R/RW/+R/RW/etc...)にも対応し、cdrecord-ProDVDという名前になっている。
(このプログラムの設計を巡っては、作者とLinuxコミュニティとの間で激しく争われたようで、今でも情報を検索すると簡単にフレームの応酬を見つけることが可能だがそれはさておき)

このcdrecordというツールは CD/DVDを焼くことそのものについては大変多機能だが、テープのようにメディアを交換しながらシーケンシャルに淡々とデータを保存していくという目的のためには作られていない。そこで、cdrecordを使ってそのようなことを実現するためのフロントエンドツールをドイツの Stefanという人が作ったようなので利用してみた。ツールの名前は cdbackup/cdrestoreである。

cdbackupはバックアップと銘打つものの、tarやcpioでシリアライズされたストリームをメディアに書き出し、必要に応じて交換を要求する(cdrestoreはその逆)というシンプルな機能を提供するだけのソフトウェアで、差分バックアップといった高級な機能を持ち合わせていないので、そのような要件に対しては別のツールを組み合わせて対応する必要があることに注意すること。

Portageからであれば emerge cdbackupでインストールできる。が、x86_64用ではないため私の環境では強引にUnmaskしてやる必要があった(これによると思われる問題は後述)
また、cdbackupは CD-Rに対してバックアップを行う場合は cdrecord を、DVD-Rに対してバックアップを行う場合には dvdrecordという名前で外部コマンドを実行するようになっているため、dvdrecordという名前で cdrecordのシンボリックリンクを作成してやる必要があった。

cdbackupは常に標準入力からストリームを読み込む。コマンドラインは下記のようになる。

tar cvf - *.gz | cdbackup -R -C -m -s 8 -d /dev/dvd -r /dev/dvd -a "test"

上はカレントディレクトリにある全ての gzippedなファイル群をtarでまとめたストリームを/dev/dvdとして認識されているDVD-Rデバイスに8倍速で書き込み、"test" という識別子をつけるコマンドである。メディアいっぱいまで書き込まれるごとに、"Please insert next disk and press RETURN"というメッセージが表示されメディアの交換が促される。各オプションの意味は下記のとおり。

-R ... 書き込み先がCD-RでなくDVD-Rであることの指定
-C ... CRCを使用しない(詳しくは後述)
-m ... 複数メディアにまたがるバックアップを行う
-s ... 書き込み速度の指定
-d ... DVDデバイスの指定
-r ... DVD-Rデバイスの指定(最近の環境では -dと同じ物を指定すれば動くはず,但しこれは意図した動作でないと cdrecordが文句を言う)
-a .. このバックアップに対する命名

バックアップしたメディアセットからファイルをリストアするには、メディアセットの先頭となるディスクをドライブに挿入したのち下記のようなコマンドラインを用いる。

cdrestore -d /dev/dvd -t 1 | tar xvf -

-d ... DVDデバイスの指定
-t ... トラック番号の指定(普通は1)

cdrestoreコマンドのパイプ先は、cdbackupにストリームを送ったコマンドの逆をするコマンドである。

これで、安価なDVD-Rドライブを使ってあたかもテープのようなバックアップ・リストアが出来るようになった。残る問題はメディア交換地獄だけだ。Blu-rayがはやく手の届く価格帯へおりてきますように。

さて、cdbackupに -Cオプションをつけた理由に疑問をもつ人もいるだろう。大切なバックアップなのに何故CRCチェックを外してしまうのかというと、何故か私の環境ではCRCをつけるとリストアの時にエラーで止まってしまうからだ。ソースをちらっとだけ見たのだが、おそらくこれは 32bit用のコードを単純に 64bitでコンパイルしたためではないかと推測している。ちゃんとソースを追えば確認するなり直すなり出来ると思うのだが、時間があまりないので CRCを外すという場当たり的対処をしてしまった。

CRCをつけてもエラーにならない環境の人や、自分でコードを修正できる人は是非CRCをつけて運用していただきたい。

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム