ファイルのバックアップを考える2【テープドライブ運用編】

■テープドライブを使うための準備
■Linuxでのバックアップについて
 私の場合は Terminator を Linux で使用しているため,Windowsでの利用方法に 関しては,本ページ内で解説を行いません.例えば Windows2000 の場合, 『プログラム->アクセサリ->システムツール->バックアップ』と,辿ると,OS付属 のバックアップツールを起動することができます.これはスケジュールバックアップ が可能なほか,容易にオペレーションできますので,これを使用すると良いでしょう.

 Linux でのバックアップ方法ですが,大きく分けて OS 標準コマンドを 使用する方法と,市販/高機能なフリーウエアを使用して バックアップする方法の 2種類に分けることができます.後者であればフロントエンド(大抵 X-Window ベースか,cursus ベースのキャラクタ)が用意されており,Windowsに 搭載されている『バックアップ』プログラム程度の使い勝手が確保されているで しょう.初心者にはこちらの方がお勧めかと思います.

 しかし,古き良き(?)UNIX文化では,小さなプログラムを組み合わせて大きな仕事 をするという流儀があり,大きなパッケージソフトは敬遠され気味でした.また, ユーティリティ関連のプログラムの場合,コマンドラインでも(スクリプトからも) 利用可能なことが最低限必要とされていました.

 これはどのようなことかと言うと,ユーザーが簡単なスクリプトを組むことにより, どのようなことにも対応出来る/小回りが利くことが好まれているということです. 昨今の Windows 文化では逆に,オールインワンの超弩級巨大アプリが幅を利かせて います.また,すべての操作をマウスを利用してインタラクティブに,良く言えば グラフィカルなインターフェイスで対話的に容易に操作が可能であり,悪く言えば 融通が利かず,自動処理をさせようとすると急に敷居が高くなるか全く何も出来ない ものになっています.ある意味,Windows文化のみを知る人にとっては,このような UNIX文化はかなり違和感を感じるかもしれません.しかし,最初は違和 感があるかもしれませんが,使っていく/習熟するに従って,その自由度の高さに 惚れ惚れするのではないかなと個人的には思います.

 少々話は脱線しましたが,Linux でバックアップを考える場合,まずは Backup-mini-HOWTO を読むと良いでしょう.ただしこのドキュメントは,UNIXに関してある程度知識の ある人向けに書かれているため,UNIX初心者には少々意味が難解かもしれません.

 UNIXでのバックアップは古くからテープを利用して行われていたため,Linux に おいても,テープドライブで利用可能なバックアップコマンドが存在します.その 代表的なものを列挙しますと,dump/restore,cpio(afio),tar等が挙げられます.それぞれの コマンドの特徴を以下に示します.

    dump/restore
    古くからスケジューリングバックアップに使用されてきた.ボリューム (パーティション)単位でフルバックアップや差分バックアップが容易に行える, 非常に高機能かつ高速なコマンド.詳しくは Linux: dump and restore mini-HOWTOを参照のこと

    cpio(afio)
    ファイル移動/コピー用ユーティリティコマンド.複数ファイルを一つのファイルに 固めることの可能なアーカイブエンジン.アーカイブの書き出し先をバックアップ デバイスにすることにより,テープ等にバックアップを行うことができる.
     圧縮をかけながらバックアップを行う際に,後述する tar+gz を使用するよりも 耐障害性が高い.afioはcpioの高機能版.Vine2.5の場合,cpioは標準で含まれるが, afioはrpmパッケージからインストールする必要がある(簡単にインストール可能)

    tar
    アーカイブコマンドとしては最も一般的なコマンド.オプションを付けること により,圧縮をしながらアーカイブを行うことも可能だが,この機能を使用した 場合,前述のBackup-mini-HOWTO にあるように,障害に弱くなる.ただし,とても柔軟に利用可能であり,多くの有用な スクリプトが存在する.スクリプトを組むことにより,差分バックアップも可能

 Linuxでバックアップを行う場合,これらコマンドを何らかの形で利用することに なると思います.使い勝手の良いフロントエンドプログラムも,バックエンドでこれ らコマンドを利用しているか,フォーマットとしてこれらのフォーマット (ファイル形式)を利用しているのが大半です.

■バックアップの計画
 私の場合,ディスク上のすべてのファイルをバックアップするという方針は 採りませんでした.これは,ディスク容量がテープの容量に比べてあまりに巨大 であり,現実的でないためです.太古のバックアップに関する教典においては, 『ディスクのパーティションはバックアップメディアの容量と同じにすべし』と, 書かれているものもありました.しかし,オートローダー等の巨大な容量を持つ システムを利用出来る場合を除いては,ファイルサイズそのものが巨大化している 昨今,それはナンセンスに近いものがあります.

 では,私はどのようなバックアップ方針を取っているのかと言いますと, 『重要なデータをテープに書き出す』と,いうことです.従来 CD-R 等を 使用して行っていた作業を,より大容量のメディアを使用して行おうということです. 容量の小さなメディアにバックアップする場合,データ容量が大きな場合はメディアの交換が苦痛を伴う煩雑な作業になるでしょう.また, CD-RやDVD-Rのようなメディアに焼くことを考えると,書き込み用ソフトを間に介す ことが必要になり,バッチ的に自動処理することが難しくなるという問題があります (ただし,不可能ではありません).

 片面4.7GBの記憶容量を持つDVD-Rと比較しても,DDS3であれば約 2.5倍の容量が ありますし,また,書き込み処理はコマンド一発で出来ますので,スクリプトを 書けばバックアップの自動処理も出来ます.

 私の場合は,フィルムスキャンした画像や,キャプチャ等を行った動画といった 一つ一つが大きなファイルサイズを持つオリジナルデータが多数あり,ディスク上の 膨大な領域を占有しています.基本的にこれら オリジナルデータは,その後の処理を行った後であれば消去しても良いのですが, 何かトラブルがあった場合に,再度スキャン/キャプチャするのは骨が折れます. そのため,テープにこれらオリジナルデータを書き出した後にディスク上から消し, 空き容量を稼ごうということを考えました.また,併せて重要なデータに関しては,その都度バック アップするといった感じです.

 そのため,所謂企業などで行われている,ユーザーから見ると透過的に行われる バックアップとは少々方向性が異なります.こちらに関しては別の方法で行ってい ますので,また日を改めて解説したいと思います.

■バックアップの準備
 まずは,SCSIカードとテープドライブが Linux からきちんと認識されている ことを確認します.Linux が起動した後,コマンドラインでdmesg コマンドを実行することにより,どのように OS から認識されているかを 確認することができます.

$ dmesg
(略)
SCSI subsystem driver Revision: 1.00
PCI: Found IRQ 10 for device 00:0e.0
PCI: Sharing IRQ 10 with 00:01.4
sym53c8xx: at PCI bus 0, device 14, function 0
sym53c8xx: setting PCI_COMMAND_PARITY...(fix-up)
sym53c8xx: 53c875 detected with Tekram NVRAM
sym53c875-0: rev 0x3 on pci bus 0 device 14 function 0 irq 10
sym53c875-0: Tekram format NVRAM, ID 7, Fast-20, Parity Checking
scsi0 : sym53c8xx-1.7.3c-20010512
  Vendor: HP        Model: C1537A            Rev: L812
  Type:   Sequential-Access                  ANSI SCSI revision: 02
blk: queue dab59618, I/O limit 4095Mb (mask 0xffffffff)
(略)

 このメッセージを解説すると,Tekram DC-390U は『sym53c8xx モジュール』が利用 されて利用可能になっており,DDS3ドライブは『Vendor: HP Model: C1537A』として 認識されています.また同様に,以下のようにコマンドを実行することにより, 現在利用可能なSCSI機器を確認することも可能です.

$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 05 Lun: 00
  Vendor: HP       Model: C1537A           Rev: L812
  Type:   Sequential-Access                ANSI SCSI revision: 02

 ここでは,SCSI 0 (SCSIインターフェイス0), に接続された Channel 0 上の SCSI ID 5 の機器として,DDS3 ドライブが認識されていることが分かります.

 もし,きちんと認識されていない場合,書籍やWebサイトを検索するなどし, 認識させるようにしてください.なお,利用環境や OS,カードの種類等によって 認識されない原因は異なります.

 次に,mt-st パッケージをインストールし,テープドライブ用の 各種コマンドが利用できる状態にします.mt-stパッケージの入手元は,例えば Vine2.5 用 RPM (i386用)であれば, Vine2.5 Plus mt-st-0.7-3vl1.i386.rpmにあります.RedHat系のVine以外のディストリビューションの場合であれば,各ディストリビューションに対応したRPM パッケージを.その他のディストリビューションの場合は,tar ballから インストールすると良いでしょう.

 これをダウンロードした後,RPM ファイルからインストールする場合は,root 権限で以下のように入力します.

# rpm -ivh mt-st-0.7-3vl1.i386.rpm

 何もエラーが表示されない場合は,これでインストールは完了です.

 root で mtコマンドを利用し,次のように表示されたら利用可能です (ドライブによってはメッセージが異なる場合があります.また,csh系のシェルを 利用している場合は,mt パッケージをインストール後,rehashコマンドを実行しな いと,『コマンドが見つかりません』と,表示されるかもしれません)

# mt -f /dev/st0 status
SCSI 2 tape drive:
File number=-1, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x0 (default).
Soft error count since last status=0
General status bits on (50000):
 DR_OPEN IM_REP_EN

※私の環境の場合,テープドライブを1台しか接続していないため,テープドライブの デバイス名は /dev/st0 になります.
※mt コマンドの詳細については,jman mt を実行し,マニュアルを読むようにしてください.

■各コマンドの使い方
■tarコマンドを利用してバックアップ
 それでは,実際に tar コマンドを利用してバックアップしてみます.なお,以下の作業の一部は root 権限で行う必要があります.

 まずはブランクメディアをドライブに挿入し,ドライブ側の "TAPE"ランプが点灯して準備完了の サインが出た後に,次のコマンドを実行してテープを巻き戻します.

# mt -f /dev/st0 rewind

※テープの貼り付きを防ぐため,単に巻き戻す rewind では なく,『テープを一旦巻き戻す->最後まで進める->巻き戻す』 という処理を行う, retension(テープの弛み取り)を使用した方が良い場合もあるでしょう.余談ですが, DV カメラで撮影する際にも,同様のことを行わないと,まれにテープ記録時に エラーが発生し,画質が悪くなる(ブロックノイズの発生)場合があります.

 次に,バックアップしたいディレクトリに移動し,tarコマンドを次のように実行します. 例えば /export/hd0/backup_dir をバックアップする場合,以下のように入力します.

# cd /export/hd0
# tar cvpf /dev/st0 ./backup_dir

 コマンドを実行するとテープが走行を始め,画面上にはバックアップ処理中の ファイル一覧が逐次表示されます.一通りのファイルがテープに書き出された後, エラーが無ければコマンドプロンプトが表示され,入力待ち状態になる筈です.

 なお,『ファイル一覧は表示しなくても良いのでエラーだけ表示して欲しい』 という場合には,tar のオプションを cvpf から cpf に変更します

 アーカイブの展開や内容の確認は,次のように行います.

コマンド説明
tar xvpf /dev/st0テープからアーカイブしたファイルを展開する
tar tf /dev/st0テープにアーカイブされているファイル一覧を表示

 tar コマンドの詳細なオプションは jman tar で見てもらうことにして,代表的な オプションを簡単に説明します.

オプション説明
c新しいアーカイブを作る
tアーカイブの内容を表示
xアーカイブからファイルを抽出
v処理したファイル名を表示
pパーミッション情報を全て抽出する
fアーカイブファイル/デバイスを指定
(省略した場合は標準出力に出力)
Mアーカイブをマルチボリュームとして扱う
ZCompress形式で圧縮/展開
zgzip形式で圧縮/展開(Compress形式よりも圧縮率が高い)

 つまり,cvpf とオプションを指定した場合,上記の "c","v","p","f" を指定したという 意味になります.なお,"Z"や"z"オプションを付けるとソフト的な圧縮が効き,1本のテープ により大容量のデータを納めることができます.しかし,前述の backup-mini-howto にある ように,耐障害性という意味では危険率が高まります.圧縮を行いたい場合は tar コマンド を使わず,cpio または afio コマンドを利用した方が良いでしょう.

 私の場合はテープドライブ側のハード的な圧縮は有効にしていますが,ソフト的な圧縮は かけないようにしています.また,何故 tar に拘るかというと,使い慣れているのと, tar コマンドを間接的に利用する,様々な自作スクリプトがあるからです :-P

 その他,tar を使う際に気を付けた方が良いこととしては,バックアップの際に 絶対パスを 使わないようにすることです.リストアする際に展開先が絶対的に決まっているので あればそれでも良いのですが,例えば /home/tadachi/data/data.* のようなデータを 絶対パスでテープに記録し,カレントディレクトリが /home/tadachi/ の状態で何も 考えずに展開すると,/home/tadachi/data/home/tadachi/data/data.* が出来てしま います.また,展開の際にTOPから辿るようにすると,意図しないファイルが上書き されてしまう等の事故も発生してしまうでしょう.そのような意味でも,相対パス (例えばこの場合,カレントを /home/tadachi/ の状態で, "./data" を指定)するようにした方が良いでしょう.

 なお,バックアップ作業は基本的に root になって行うと良いでしょう. また,ユーザー権限で自分のファイルをバックアップする必要のある場合には, /dev/st0 や mt コマンド等のパーミッションを変更(sticky bitを立てる等) しておくと楽でしょう.(本当は sudo コマンドを使用し,一時的に root 権限に なって実行した方が良い)

 UNIX の使い方に関する一般的な知識や,コマンドの使い方全てを簡潔に説明 するのは困難です.本ページで解説している内容が今ひとつ理解できない場合は, 『jman コマンド名』を実行してコマンドのマニュアルを読むか,書籍または web 等でより詳しい解説を読むようにしてください.

■mt コマンドの使い方
 次に,mt コマンドの使い方に関して簡単に解説します.

コマンド実行例機能
mt -f /dev/st0 compression 1 テープドライブのハード的な圧縮をONにする
mt -f /dev/st0 erase テープを消去する
mt -f /dev/st0 retension テープの弛みをとる
mt -f /dev/st0 rewind テープを巻き戻す
mt -f /dev/st0 offline テープを巻き戻し,アンロードする

※詳しくは解説しませんが,1本のテープに複数のアーカイブを格納し,そして 各アーカイブの頭出しを行わせるコマンドもあります.使い方に関しては マニュアルを参照してください.

 tarコマンドを使用してテープにファイルをバックアップする方法は前述の通り ですが,バックアップ終了後は,mt コマンドを使用して,『テープ巻き戻し』と 『テープの排出』を行う必要があります

# mt -f /dev/st0 offline

 一通りの処理が成された後,自動的にテープがドライブから排出される筈です.

 ここで注意しなければならないことは,DDSドライブの 場合はテープをドライブに入れっぱなしにしてはいけないということです. 長期間入れっぱなしにしておくと,メディアが悲しいことになってしまいます (伸びたり切れたりetc).必ず一通りのことが終わったら,offline (省略して off と入力しても良いでしょう)するようにしてください.

 特定の場所をバックアップするだけであれば,一連の作業をコマンド一発で処理する スクリプトを書いておくと良いかもしれません.

■テープドライブの実運用
■楽に使うためのひと工夫
 実際にバックアップを運用する際には,どのようにスケジュールを組むかを決めなければ いけません.バックアップ装置の容量が,バックアップをすべきディスク領域にくらべて 充分に大きな場合は,2世代分のフルバックアップと,フルバックアップ間に数回の 差分バックアップを自動で行うのが良いと言われています.

 しかし,今回使用しているようなシングルドライブの場合,なかなかそういうわけには いきません.このような場合に一番使い勝手が良い方法は,1つのプロジェクト (何らかの作業に必要なファイルをまとめたファイル群)をメディア1本分に収まる 容量に納め,それを適時フルバックアップするという方法でしょう. スクリプトを用意すれば,tar コマンドを使用して差分バックアップを行うことが 可能であり,これを利用して ローテーションを組みつつ自動でバックアップを行うことも可能ですが,今回は その方法の説明は割愛します.

 私の場合,作業中のファイルはディスク上に置き,オリジナルのファイル群や最終的に 生成されたファイル群のみをテープにバックアップするようにしています.

■バックアップに要する時間について
 このドライブ,カタログスペックでは非圧縮時に 1.1[MB/sec] の転送スピードが出ると 謳われています.しかし,これはあくまでもカタログスペック.大量のデータを バックアップしますので,この値がどの程度のものなのかは非常に気になるところです.

 テープドライブ購入後,真っ先にバックアップしようと考えていたフィルム スキャンデータをバックアップし,実測値から計算してみた結果は以下の通りです. なお,元データは TIFF 形式の画像ファイルですが,bz2 形式に圧縮しています. 圧縮後の容量でも,1ファイル辺り 7[MB] 程の容量があります.これを 10GB 程度 にまとめたものを数セット作成し, compression on で各々1本のメディアに バックアップしました.なお,すでにソフト的に圧縮を行っているため, テープドライブ側で行う圧縮は,殆ど効果が無いと思われます.

 2セットほどバックアップした際に所要時間を計測した結果,それぞれ 1,055[KB/sec],999[KB/sec]となり,実効転送レートとして,カタログスペックと ほぼ同じ,1[MB/sec] 程度は出ているのが分かりました.

 それでは次に,一般的なファイル(9,981,924[KB])を tar cf でバックアップした 場合です.ファイルの内容は,私の home の下にある雑多なファイル群です :-).

 今度は転送レートが 878[KB/sec] 程に止まりました.最初に試したものは大きな ファイルばかりでしたが,今回のものは細かなファイルが大量にあります.そのた め,別の部分でのオーバーヘッドが大きくなり,1割近く転送レートが低下したの だと思われます.

※当然ながらデータの内容やマシンのスペックや負荷によって,若干変動が あると思います.あくまでも上記の値は参考程度に考えてください.

 なお.実際にテープにデータを書き出す時間の他に,バックアップの際には,テープの 巻き戻しおよび排出の時間がかかります.これは 10[GB] バックアップした場合に は,約 25[sec] 程の時間を要します.

 以上のことから,テープ1本,つまり12GBをバックアップするのには,3時間弱 かかると考えておくと良いでしょう.

※マルチボリューム・バックアップ
 非圧縮の場合,DDS3テープ1本に12GB記録できます.120GBをバックアップするとなる と,当然ながら1本のテープに収まりません.前述の 『tarコマンドを利用してバックアップ 』では詳しく説明しませんでしたが,このような 場合に利用できる,複数のメディアに分割してアーカイブするためのオプションが tar コマンドにはあります.それが『マルチボリューム』オプションです.
 このオプションを tar コマンドに付けると,挿入中のメディアの記憶領域を使い切った 段階でメディアがイジェクトされ,『次のメディアを入れて』というメッセージが表示 されます.全データをテープに書き出し終わるまで,メッセージに促される度にメディア 交換するという作業を繰り返すことにより,大容量ディスクをフルバックアップする ことが出来るようになります.

■その他 TIPS
 一般に内蔵テープドライブはファンレスですが,外付けテープドライブは大抵 小型の径のファンを搭載しています.そのため,通電中は騒々しく,折角 Terminator 本体を静音化しても意味がありません.また,当然ながら SCSI 規格は Hot Plug に 対応した規格でないため,USB や FireWire 機器のように,利用するときに接続し, 利用し終わった際に外すといった利用方法ができません.

 しかし,テープドライブ使用中の騒音は納得するにしても,使用していないときに は静かにしていて欲しいもの.そこで,Linux で利用出来るちょっとしたTIPSを紹介 します.

1.利用していないときにはドライブの電源を落とす
 最も安直な方法です.物理的には SCSI バスに接続しておくが,Linux 起動時の SCSI 機器認識時,利用中,shutdown時のみ電源を入れ,普段利用していないときに は電源を落としておくという方法です.ただし,起動時に電源を入れておくのを忘 れると,手動で SCSI 機器として認識させない限り利用できませんので,注意が 必要です.

2.利用時にのみ SCSI デバイスを認識させる
 こちらも前述したアプローチと同様,物理的に接続しておくけれども,利用時のみ ドライブの電源を入れるという方法です.ただし,この方法を使用すれば,起動時 およびshutdown時にドライブの電源を入れておく必要はありません.利用時に root 権限でコマンドを叩き,"SCSI 機器を認識せよ" のようにドライバに 通知するだけで利用できるようになります.

 まずは SCSI インターフェイス0, Channel 0,SCSI ID 5, LUN 0 に接続された SCSI 機器を認識させる場合,ドライブの電源を入れた 後に以下のようなコマンドを実行します.

# echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi

 上記の "add-single-device" 以降の "0 0 5 0" のパラメータは,適時自分の環境 に合わせて指定して下さい.また,もしこれらの値が分からないようであれば,一度 ドライブの電源を入れた状態で起動して,cat /proc/scsi/scsiを実行して ください.すると,認識されている SCSI デバイスの一覧が表示されると同時に, これら値も表示されます.

 次は認識させた SCSI 機器を切り離す方法です.これを行っていないと,shutdown 時にドライブの電源が入っていない場合,ちょっとしたエラーが出る場合があります.

# echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi

 上記コマンド実行後,ドライブの電源を落とすことができます.

■テープドライブを利用したバックアップのまとめ
■まとめ
 テープドライブを利用することにより,10GBオーバーのデータを1本のメディアに バックアップ可能な体制が整いました.とは言え,さすがに最近の大容量ディスクの フルバックアップを定期的に行うことは,労力的な面で非常に困難です.しかし, テープドライブを導入したことにより,最近ずっと頭を悩ませていた,ディスク上の かなりの容量を占めていた大容量のデータを,まとめて10本程度のメディアに待避する ことができました.しかも,これまで CD-R や DVD-R で 行っていたことが,さほど労力をかけずに行うことが出来ました

 現在はデータの退避がひと段落着き,稼働率が低下していますが,今後も随時 活躍することと思います.


 しかし,できれば安価かつ手軽にディスクのフルバックアップを行いたいところ. こちらについては,ファイルのバックアップを考える3【ハードディスク編1】にて解説することにします.


『Asus Terminator 活用メモ』 へ戻る