レベル: 初級 Chris Walden, e-business Architect, IBM
2003年 11月 11日 IBM eビジネス・アーキテクトであるChris Waldenが、9回のdeveloperWorks シリーズで読者の運用スキルをWindows環境からLinux環境へ移行する道案内をしていきます。今回は、システムに入っているものを保管します。復元とセキュリティを考慮した定期的なバックアップをどのように計画し、実行するかを説明します。
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
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スイッチ(この例では示していません)を付加します。
 |
念のため Linuxでは大文字と小文字を区別します。例えば、tarコマンドは必ず小文字で実行する必要があります。スイッチは大文字の場合もあれば小文字の場合も、混在の場合もあります。例えば-tと-Tでは異なった機能を実行します。ファイル名やディレクトリ名は大文字小文字が混在している場合がありますが、コマンドやスイッチと同様、大文字小文字を区別します。 |
|
ファイルを復元するには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と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を使ったバックアップ
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は自動的に複数ボリュームに番号付けします。
restoreを使った復元
 |
ファイルをスキップする
dumpではファイルやディレクトリをスキップするように記号を付けることができます。このコマンドはchattrで、ext2ファイルシステムとext3ファイルシステムの拡張属性を変更します。
chattr +d <filename>
上のコマンドはファイルにフラグを付加し、バックアップを行う時にはそのファイルをスキップするようdumpに指示します。
|
|
dumpで保存された情報を復元するにはrestoreコマンドを使います。tarと同じように、dumpにはリストアップする機能(-t )やアーカイブと現在のファイルを比較する機能(-C )があります。dumpで注意すべきなのはデータの復元の時です。大きく異なる2つの方法があり、想定した結果を得るには正しい方法を選ぶ必要があります。
再構築(-r)
dumpは個別のファイルよりもファイルシステムを想定して作られていることを思い出してください。つまりファイルを復元するのに2つの異なった手法があるのです。ファイルシステムを再構築するには-r スイッチを使います。再構成は空のファイルシステムに対して行い、保存された状態に復元するように作られています。再構成を実行する前にファイルシステムを生成し、フォーマットし、マウントしておく必要があります。ファイルを含んでいるファイルシステムに対して再構成を実行すべきではありません。
上で実行したdumpから、完全な再構成を行う例を次に示します。
restore -rf /dev/nst0
上のコマンドは、復元しようとするファイルシステムそれぞれに対して実行する必要があります。
増分バックアップが必要な場合は、この手順を繰り返します。
抽出(-x)
ファイルシステム全体ではなく、個別のファイルを操作する必要がある場合には-xスイッチを使って抽出する必要があります。例えば、テープバックアップから /etcディレクトリのみを抽出するには次のコマンドを使います。
restore -xf /dev/nst0 /etc
対話型リストア( -i )
restoreにあるもう一つの機能が対話型モードです。
restore -if /dev/nst0
上のコマンドを使うと対話型シェルになり、アーカイブに含まれるアイテムを表示します。「help」をタイプするとコマンドのリストが表示されます。アイテムをざっと見て抽出したいアイテムを選びます。復元したファイルはすべて現在のディレクトリに入ることを頭に入れておいてください。
dump対tar
dumpもtarどちらにも支持者がいます。どちらも長所・短所があります。ext2またはext3以外のファイルシステムを扱っているのであれば、dumpは使えません。それ以外の場合にはdumpは最小のスクリプトで実行することができ、復元を補助する対話型モードも備えています。
私は独自レベルのコントロールができるスクリプトを使うのが好きなので、たいていtarを使います。.tarファイルを扱う、マルチ・プラットフォームのツールもあります。
他のツール
Linuxでファイル・コピー機能を持つプログラムならば、ほとんどが何らかのバックアップ動作を行うことができます。cpioやddを使ってバックアップをしている人もいます。cpioはtarと似たような筋の圧縮ユーティリティですが、tarほど一般的ではありません。ddはファイルシステムをコピーするユーティリティで、ファイルシステムのバイナリ・コピーを作ります。ddはSymantecのGhostのように、ハードドライブ・イメージのコピーをするのに使えるかもしれません。ただしddはファイルベースではないので、全く同一のハードドライブ・パーティションに復元することしかできません。
商用バックアップ製品
Linux用の商用バックアップ製品もいくつかあります。dumpやtarのようなツールでは自分で細かな細工が必要ですが、商用製品は普通、使いやすいインターフェースとレポート機能を備えています。商用製品がもたらすものは幅広く、機能も豊富です。商用製品の一番の利点は、あらかじめバックアップ方針が用意されており、それをただ動かしさえすれば良いということでです。商業製品の開発者はありがちな失敗を既に経験しているので、その知恵を反映した製品を使うのも、貴重なデータを失うことに比べれば安いものと言うことができます。
Tivoliストレージ・マネージャ
Linux用の商用バックアップ・保存管理ユーティリティとして、今のところおそらく最高のものがTivoliストレージ・マネージャでしょう。Tivoliストレージ・マネージャ・サーバーはLinuxを含む他のプラットフォーム上でも動作し、Tivoliのクライアントはさらに多くのプラットフォームで動作します。
本質的にストレージ・マネージャ・サーバーは、環境をバックアップするのに適切なデバイスに合わせて設定されます。バックアップに参加しようとするシステムは、サーバーと通信するクライアントをつなぎます。バックアップはスケジュールに従って実行することも、Tivoliストレージ・マネージャのクライアント・インターフェースから手動で行うこともでき、またはWebベースのインターフェースを使って遠隔から行うこともできます。
ポリシーベースというTSMの特徴により、バックアップの振る舞いに関する中心的なルールが、常時ファイルリストを調整することなく決められます。さらにIBMのTivoliストレージ・リソース・マネージャでは企業でのストレージ財産の利用状況を把握し、評価、制御、予測することができます。また潜在的な問題を検出し、自己復元のための自動調整も行うのです。詳しくはTivoliのWebサイト(参考文献)を見てください。
図1. Tivoliストレージ・マネージャのメニュー
次にバックアップとリストアが遠隔のデバイスから操作されます。
図2. Tivoliストレージ・マネージャのインターフェース
進め、そしてバックアップ!
適切なバックアップを行う第一歩は計画を立てることです。保存する必要のあるデータが何か、復元の方針はどうあるべきかをきちんと理解することです。それができたら次はその方針に一番適切なツールを使えば良いのです。
Linuxには使い道の広いバックアップツールが初めから付属しています。一番普通なのはtarとdump/restoreの2つです。どちらもシステムの全バックアップをすることができます。スクリプトを工夫することでカスタム化したバックアップを行うことができ、それをローカルで行うことも遠隔から行うこともできます。
ただ、自分で独自のバックアップ・スクリプトを書くのは、特に複雑な企業環境では大きな責任を伴います。Tivoliストレージ・マネージャのような商用のソフトウェアを使えばバックアップ技術を習得する時間が短縮され、すぐにバックアップのコントロールができるようになります。その代わり、ツールにできることに合わせてバックアップの方針を調整する必要があります。
参考文献
著者について  | |  | Chris WaldenはIBM Developer Relations Technical Consulting(dragonslayers としても知られています)のeビジネス・アーキテクトです。テキサス州オースチン在住で教育、設置使用指導、IBMビジネス・パートナーへのコンサルティングにあたっています。自他共に認める半Linux狂発症途中で、聞く耳持つ人がいれば誰にでも良い知らせを広めています。eビジネス・アーキテクトとしての仕事以外に彼の地域にある、すべてLinuxによる基幹サーバーを管理しており、そこでは多種多様なユーザー環境でのファイル、印刷その他のアプリケーション・サービスを扱っています。コンピューター業界でフィールド・サポートからWebアプリケーション開発やコンサルティングまで10年の経験があります。連絡先は
cmwalden-at-us.ibm.com
です。 |
記事の評価
|