Linux は安定で信頼性があります。しかしどんなコンピューター・システムであってもハードウェアの故障など予期しない事故が起こり得ます。責任ある管理計画においては、重要な設定情報やデータを信頼できる方法でバックアップしなければなりません。Linux でバックアップをするには実に様々な手法があります。スクリプト・ベースの簡単な方法から、商用の非常に高機能な方法まで幅広く用意されています。バックアップを保存するために、遠隔にあるネットワーク・デバイスやテープドライブなどの取り外し可能メディアも利用できます。バックアップはファイルベースでもドライブイメージ・ベースも可能です。オプションはいくらでもあるので、自分の環境に合った完璧なバックアップとなるようにいろいろな方法を混在させることもできます。
システムのバックアップには実にたくさん異なった手法があります。この記事の終わりの参考文献に「Introduction to Backing Up and Restoring Data」を挙げておきますので、どんな手法があるのか読んでみると参考になると思います。
何をバックアップするかは、なぜバックアップするのか、という理由に大きく依存します。ハードディスクのクラッシュのような致命的故障から復元するのが目的なのか?必要になった時に古いファイルが取り出せるようにアーカイブしたいのか?システムをコールド・ブートして復元したいのか、それともプリロードされたスタンバイ・システムで起動したいのか?
Linux はファイルベースのシステムなので、バックアップしたり復元したりするのに非常に有利です。Windows システムではレジストリが非常にシステム依存になっているので、設定やソフトウェアのインストールは単純にシステム上にファイルを落とせば良いというものではありません。ですからシステムを復元するには、こうした面倒な特性に対応できるソフトウェアが必要になります。ところが Linux では全く話が違います。設定ファイルはテキスト・ベースであり、ハードウェアと直接やり取りする時以外はシステムと独立しています。ハードウェア・ドライバに対する最近の手法ではドライバがモジュールになっており、動的にロードされます。これによりカーネルとシステムがより分離・独立したものとなるのです。Linux でのバックアップは、オペレーティング・システムがシステム上、ハードウェア上にどのようにインストールされているかという微妙な要素を操作するのではなく、ファイルを圧縮・解凍するだけなのです。
バックアップしたいと思うディレクトリは普通、次のようなものです。
- /etc
核となる設定ファイルを含んでいます。ネットワーク設定、システム名、ファイアー・ウォールの規則、ユーザー、グループ、その他グローバルなシステム項目などです。 - /var
システムのデーモン (サービス) が使っている情報で、DNS 設定、DHCP リース、メールのスプール・ファイル、HTTP サーバー・ファイル、db2 インスタンス設定などを含んでいます。 - /home
すべてのユーザーの、デフォルトのホーム・ディレクトリで、各ユーザーの個人設定、ダウンロードしたファイル、ユーザーが保存しておきたいその他の情報などを含んでいます。 - /root
root ユーザーのホーム・ディレクトリです。 - /opt
システム以外のソフトウェアがインストールされるところです。IBM のソフトウェアはここにインストールされます。OpenOffice や JDK、その他のソフトウェアはデフォルトでここにインストールされます。
バックアップしない方が良い ディレクトリもあります。
- /proc
/proc はバックアップすべきではありません。現実のファイルシステムではなく、実行中のカーネル環境の仮想表示でしかないからです。例えば /proc/kcore というファイルは実行中の全メモリの仮想表示ですが、/proc はこうしたファイルも含んでいます。こうしたファイルをバックアップしてもリソースの浪費になるだけです。 - /dev
ハードウェア・デバイスを表現したファイルを含んでいます。「まっさら」のシステムを復元したいのであれば /dev をバックアップしても良いかもしれませんが、Linux が既にインストールされている環境を復元したいのであれば、/dev のバックアップは必要ありません。
他のディレクトリにはシステムファイルやインストールされたパッケージが入っています。サーバー環境ではこうした情報のほとんどはカスタマイズされていません。カスタム化が行われるのはほとんどの場合 /etc や /home ディレクトリです。ただ、完璧を狙うのであれば、他のディレクトリもバックアップするのも良いでしょう。
業務現場の環境ではどんなデータも失いたくないので、私だったら /proc を除き、全システムをバックアップします。気になるのがほとんどユーザーと設定だけであれば、/etc と /var それに /home と /root だけをバックアップします。
先に説明した通り、Linux でのバックアップは大部分がファイルの圧縮と解凍です。これはつまり商用のソフトウェア・パッケージを購入しなくても、既存のシステム・ユーティリティやスクリプトを使ってバックアップができるということです。多くの場合は既存のツールを使ったバックアップでも十分であり、管理者が自在にコントロールすることもできます。バックアップのスクリプトは cron コマンドで自動化することができます ( cron は Linux でスケジュール化したイベントをコントロールするコマンドです)。
tar は古典的な UNIX のコマンドで、Linux にポーティングされています。tar はテープ・アーカイブ (tapearchive) の略で、元々はテープ上にファイルを圧縮するために作られたものです。Linux 用のソースコードをダウンロードしたことがあれば、おそらく tar ファイルを目にしたことがあるでしょう。tar はファイルベースのコマンドで、基本的にファイルを端から端まで直列的に積み重ねていくものです。
ディレクトリ・ツリー全体を tar で圧縮することができます。これは特にバックアップに適しています。アーカイブは一式で復元することもできるし、ファイルやディレクトリを個別に復元することもできます。バックアップしたファイルはファイルベースのデバイスやテープ・デバイスに保存することができます。復元する際に、バックアップの時点でファイルがあったディレクトリ (またはシステム) とは別のディレクトリ (またはシステム) にファイルの出力先を変更することもできます。tar はファイルシステムに依存しません。ext2 や ext3、jfs、Reiser その他のファイルシステムに使うこともできます。
tar の使い方は PKZip のようなファイルユーティリティの使い方とほとんど同じです。対象 (ファイルやデバイス) を選び、圧縮したいファイルに名前を付けます。標準的な圧縮形式または好みの外部圧縮プログラムを指定すれば、アーカイブの圧縮は一瞬で行われます。bzip2 でファイルを圧縮または解凍するには tar -z を使います。
tar を使い、/proc ディレクトリを除いたファイルシステム全体を SCSI テープドライブにバックアップするには
tar -cpf /dev/st0 / --exclude=/proc |
上の例で、-c スイッチはアーカイブを生成 (create) することを示します。-p スイッチはファイル・パーミッションを保存する (きちんとしたバックアップには重要です) ことを示します。-f スイッチはアーカイブとして保存するファイルの名前を示します。この例では生のテープデバイス、/dev/st0 を使っています。/ はバックアップしたいものを示します。ここでは全ファイルシステムをバックアップしたいので root を指定しました。tar はディレクトリ ( / で終わります) を指定した時には自動的に繰り返します。最後に (必要なものは何も含んでいないので) /proc ディレクトリを除外します。バックアップが一本のテープに収まらない場合は、マルチボリュームとして -M スイッチ (この例では示していません) を付加します。
ファイルを復元するには tar コマンドに抽出スイッチ ( -x ) を使います。
tar -xpf /dev/st0 -C / |
ここでも -f スイッチはアーカイブのファイル名を指します。-p はパーミッション付きのアーカイブを復元することを示します。-x スイッチはアーカイブの抽出を示します。-C / は復元が / で行われることを示します。tar は普通、tar コマンドを実行しているディレクトリに復元されたバックアップを置きます。-C スイッチで tar を実行している現ディレクトリが無関係になります。
その他に頻繁に使われる 2 つの tar コマンドとして、-t と -d スイッチがあります。-t スイッチはアーカイブの内容をリストで示します。-d スイッチはアーカイブの内容を、システム上にある現在のファイルと比較します。
操作や編集が簡単になるように、アーカイブするファイルやディレクトリを一つのテキスト・ファイルに置くことができます。このファイルは -T スイッチで参照します。これはコマンドラインにリストされる他のディレクトリと組み合わせることもできます。次の行は MyFiles にリストされているすべてのファイルとディレクトリ (/root ディレクトリと /tmp ディレクトリにあるすべての iso ファイル) をバックアップします。
tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso |
このファイル・リストはファイルやディレクトリのリストを持つ、単純なテキストファイルです。例えば
/etc /var /home /usr/local /opt |
code>tar -T (または files-from ) にはワイルドカードが無いことに注意してください。ファイルは明示的にリストされていなければなりません。上の例はファイルを別々に参照する一つの方法です。スクリプトを実行してシステムを検索し、リストを作ることもできます。下記にそうしたスクリプトの一例を示します。
#!/bin/sh cat MyFiles > TempList find /usr/share -iname *.png >> TempList find /tmp -iname *.iso >> TempList tar -cpzMf /dev/st0 -T TempList |
上のスクリプトでは最初に、MyFiles にある既存のファイル・リストのすべてを TempList にコピーします。次に find コマンドをいくつか実行し、パターンが合致するファイルに対するファイルシステムを検索し、そうしたファイルを TempList に付加します。最初の検索は /usr/share ディレクトリ・ツリーにあって .png で終わるすべてのファイルを対象にします。2 番目の検索は /tmp ディレクトリ・ツリーにあって .iso で終わるファイルが対象です。リストが生成されると tar が実行され、ファイル (file) デバイス /dev/st0 (最初の SCSI テープデバイス) に新しいアーカイブが生成 (create) されます。アーカイブは gzip フォーマットで圧縮されており、すべてのファイル・パーミッション (permissions) を保持しています。アーカイブは複数 (Multiple) ボリュームにわたります。アーカイブされるファイル名は TempList からとられます (Taken)。
スクリプトを使うと増分バックアップのような、より凝ったバックアップができます。Gerhard Mourani による著書 Securing and Optimizing Linux の中に素晴らしいスクリプトが紹介されています (この記事の終わりの参考文献に挙げてあります)。
ファイルを復元するためのスクリプトを書くこともできますが、普通の場合、復元は手動で行われます。先に述べたように、-c スイッチの代わりに抽出 (extract) を示す -x スイッチを使います。全アーカイブを復元することもできるし、ファイルやディレクトリ毎に復元するように指定することもできます。アーカイブ中のファイル指定にはワイルドカードを使うことができます。dump や restore にスイッチを使うこともできます。
dump も tar と同じような機能を持っていますが、 dump は普通、個別のファイルよりもファイルシステムを対象にします。< dump の man ファイルによれば「dump は ext2 ファイルシステムにあるファイルを検査し、どのファイルをバックアップする必要があるかを決定します。バックアップする必要のあるファイルは指定のディスク、テープ他、安全な保存のためのメディアにコピーされます。出力メディアよりも大きな dump は複数のボリュームに分割されます。大部分のメディアでは、ボリュームの大きさはメディア終了 (end-of-media) が返ってくるまで書き続けることで決まります。」
dump と対になるプログラムが restore です。restore はダンプされたイメージからファイルを復元します。
restore コマンドの機能は dump の逆です。ファイルシステムの全バックアップを復元し、増分バックアップはその上に積み重ねられます。単一ファイルやディレクトリ・サブツリーは、全バックアップまたは部分バックアップいずれかから復元することができます。
dump も restore もネットワークにまたがって実行することができるので、遠隔のデバイスをバックアップしたり復元したりすることができます。dump も restore もテープデバイスほかのファイルデバイスが使え、オプションも豊富です。ただし、両者とも対象は ext2 ファイルシステムと ext3 ファイルシステムに限定されています。JFS や Reiser などのファイルシステムを使っている場合には tar のような別のユーティリティを使う必要があります。
dump でバックアップを実行するのはごく単純です。次のコマンドは Linux の ext2 ファイルシステムと ext3 ファイルシステムのすべてを SCSI テープデバイスにバックアップします。
dump 0f /dev/nst0 /boot dump 0f /dev/nst0 / |
この例では、システムに 2 つのファイルシステムがあります。/boot が一つと、もう一つが/で、ごく普通の構成です。バックアップを実行する時には両者を個別に指定する必要があります。/dev/nst0 は最初の SCSI テープデバイスを、非巻き戻し (non-rewind) モードで指定します。これでボリュームがテープに次から次に置かれることになります。
dump の面白い特徴として、増分バックアップ機能が元から備わっていることが挙げられます。0はレベル 0、つまり基本レベルのバックアップです。これは全バックアップで、定期的にシステム全体をとらえるために行うものです。その後行うバックアップでは 0 の代わりにほかの数 (1-9) を使ってバックアップのレベルを変えることができます。レベル 1 のバックアップは、レベル 0 のバックアップが行われた後に変更されたすべてのファイルを保存します。レベル 2 はレベル 1 バックアップが行われた後に変更されたすべてのファイルを保存し、・・以下同様、です。 tar でも同じことをスクリプトを使って行うこともできますが、スクリプトの中に最後のバックアップがいつ行われたかを知る機構を備えておく必要があります。dump ではその機構を内蔵しており、バックアップを実行する時に更新ファイル (/etc/dumpupdates) に書き込むのです。この更新ファイルはレベル 0 のバックアップが実行されるとリセットされます。レベル 1 以降はもう一度レベル 0 が行われるまで記録を保持します。テープ・ベースのバックアップを行う場合、dump は自動的に複数ボリュームに番号付けします。
dump で保存された情報を復元するには restore コマンドを使います。 tar と同じように、dump にはリストアップする機能 ( -t ) やアーカイブと現在のファイルを比較する機能 ( -C ) があります。dump で注意すべきなのはデータの復元の時です。大きく異なる 2 つの方法があり、想定した結果を得るには正しい方法を選ぶ必要があります。
dump は個別のファイルよりもファイルシステムを想定して作られていることを思い出してください。つまりファイルを復元するのに 2 つの異なった手法があるのです。ファイルシステムを再構築するには -r スイッチを使います。再構成は空のファイルシステムに対して行い、保存された状態に復元するように作られています。再構成を実行する前にファイルシステムを生成し、フォーマットし、マウントしておく必要があります。ファイルを含んでいるファイルシステムに対して再構成を実行すべきではありません。
上で実行した dump から、完全な再構成を行う例を次に示します。
restore -rf /dev/nst0 |
上のコマンドは、復元しようとするファイルシステムそれぞれに対して実行する必要があります。
増分バックアップが必要な場合は、この手順を繰り返します。
ファイルシステム全体ではなく、個別のファイルを操作する必要がある場合には -x スイッチを使って抽出する必要があります。例えば、テープバックアップから /etc ディレクトリのみを抽出するには次のコマンドを使います。
restore -xf /dev/nst0 /etc |
restore にあるもう一つの機能が対話型モードです。
restore -if /dev/nst0 |
上のコマンドを使うと対話型シェルになり、アーカイブに含まれるアイテムを表示します。「help」をタイプするとコマンドのリストが表示されます。アイテムをざっと見て抽出したいアイテムを選びます。復元したファイルはすべて現在のディレクトリに入ることを頭に入れておいてください。
dump も tar どちらにも支持者がいます。どちらも長所・短所があります。ext2 または ext3 以外のファイルシステムを扱っているのであれば、 dump は使えません。それ以外の場合には dump は最小のスクリプトで実行することができ、復元を補助する対話型モードも備えています。
私は独自レベルのコントロールができるスクリプトを使うのが好きなので、たいてい tar を使います。.tar ファイルを扱う、マルチ・プラットフォームのツールもあります。
Linux でファイル・コピー機能を持つプログラムならば、ほとんどが何らかのバックアップ動作を行うことができます。cpio や dd を使ってバックアップをしている人もいます。 cpio は tar と似たような筋の圧縮ユーティリティですが、tar ほど一般的ではありません。dd はファイルシステムをコピーするユーティリティで、ファイルシステムのバイナリ・コピーを作ります。dd は Symantec の Ghost のように、ハードドライブ・イメージのコピーをするのに使えるかもしれません。ただし dd はファイルベースではないので、全く同一のハードドライブ・パーティションに復元することしかできません。
Linux 用の商用バックアップ製品もいくつかあります。dump や tar のようなツールでは自分で細かな細工が必要ですが、商用製品は普通、使いやすいインターフェースとレポート機能を備えています。商用製品がもたらすものは幅広く、機能も豊富です。商用製品の一番の利点は、あらかじめバックアップ方針が用意されており、それをただ動かしさえすれば良いということでです。商業製品の開発者はありがちな失敗を既に経験しているので、その知恵を反映した製品を使うのも、貴重なデータを失うことに比べれば安いものと言うことができます。
Linux 用の商用バックアップ・保存管理ユーティリティとして、今のところおそらく最高のものが Tivoli ストレージ・マネージャでしょう。Tivoli ストレージ・マネージャ・サーバーは Linux を含む他のプラットフォーム上でも動作し、Tivoli のクライアントはさらに多くのプラットフォームで動作します。
本質的にストレージ・マネージャ・サーバーは、環境をバックアップするのに適切なデバイスに合わせて設定されます。バックアップに参加しようとするシステムは、サーバーと通信するクライアントをつなぎます。バックアップはスケジュールに従って実行することも、Tivoli ストレージ・マネージャのクライアント・インターフェースから手動で行うこともでき、または Web ベースのインターフェースを使って遠隔から行うこともできます。
ポリシーベースという TSM の特徴により、バックアップの振る舞いに関する中心的なルールが、常時ファイルリストを調整することなく決められます。さらに IBM の Tivoli ストレージ・リソース・マネージャでは企業でのストレージ財産の利用状況を把握し、評価、制御、予測することができます。また潜在的な問題を検出し、自己復元のための自動調整も行うのです。詳しくは Tivoli の Web サイト (参考文献) を見てください。
図 1. Tivoli ストレージ・マネージャのメニュー
次にバックアップとリストアが遠隔のデバイスから操作されます。
図 2. Tivoli ストレージ・マネージャのインターフェース
適切なバックアップを行う第一歩は計画を立てることです。保存する必要のあるデータが何か、復元の方針はどうあるべきかをきちんと理解することです。それができたら次はその方針に一番適切なツールを使えば良いのです。
Linux には使い道の広いバックアップツールが初めから付属しています。一番普通なのは tar と dump/restore の 2 つです。どちらもシステムの全バックアップをすることができます。スクリプトを工夫することでカスタム化したバックアップを行うことができ、それをローカルで行うことも遠隔から行うこともできます。
ただ、自分で独自のバックアップ・スクリプトを書くのは、特に複雑な企業環境では大きな責任を伴います。Tivoli ストレージ・マネージャのような商用のソフトウェアを使えばバックアップ技術を習得する時間が短縮され、すぐにバックアップのコントロールができるようになります。その代わり、ツールにできることに合わせてバックアップの方針を調整する必要があります。
- Windows から Linux へのロードマップシリーズの他の記事も参考にしてください。 (developerWorks, 2003年 11月)
- Linux Administrator's Security Guideはセキュリティに関する案内ですが、Linux でのバックアップと復元の実際についても非常に良い説明がされています。
- Introduction to Backing Up and Restoring Dataはオペレーティング・システムやシステム構成とは独立したバックアップや復元の概説です。著者はこの記事でバックアップの技法と計画の立て方について説明しています。
- Linux Administration Made Easyは古くなっていますが、Linux の一般的な手順や手法は変わっていないので、今でも有益な資料です。
- Linux System Administrator's Guideは初心者向けの、Linux システムを使ったシステム管理入門です。
- Securing and Optimizing Linux - A Hands on Guide (Red Hat 版) Chapter 7. Backup and Restore には
tarベースの増分バックアップをするためのスクリプトがあるので、参考になります。 - The TAO of Backupは面白いバックアップ哲学の紹介で、バックアップを哲学として説明しています。商用製品に関連付けた説明ですが、情報としてよく書かれています。
- IBMdeveloperWorks のチュートリアル「Backing up your Linux machines」ではバックアップ方針を定め、それに従う手順を説明しています。
- バックアップ・データやその他を CD に保存するのは簡単です。CD をどう焼くか、IBMdeveloperWorks の記事「Linux で CD を焼く」で学んでください。
- Tivoli ストレージ・マネージャはBest Data Storage Solution at LinuxWorld 2003に選ばれました。
- Tivoli product pageにはセキュリティやプライバシー機能を含めて Tivoli に関する情報が豊富に用意されています。
- ファイル・パーミッションやセキュリティについては Linux ドキュメンテーション・プロジェクトのChapter 3 of theIntroduction to Linux guideに説明されています。
- developerWorks のLinux ゾーンには、Linux 開発に関する情報が豊富にあります。
Chris Walden は IBM Developer Relations Technical Consulting (dragonslayers としても知られています) の e ビジネス・アーキテクトです。テキサス州オースチン在住で教育、設置使用指導、IBM ビジネス・パートナーへのコンサルティングにあたっています。自他共に認める半 Linux 狂発症途中で、聞く耳持つ人がいれば誰にでも良い知らせを広めています。e ビジネス・アーキテクトとしての仕事以外に彼の地域にある、すべて Linux による基幹サーバーを管理しており、そこでは多種多様なユーザー環境でのファイル、印刷その他のアプリケーション・サービスを扱っています。コンピューター業界でフィールド・サポートから Web アプリケーション開発やコンサルティングまで 10 年の経験があります。