バックアップの基本
Mondo Rescueの前に、ひとまずバックアップの基本的なお話を。バックアップの対象
多くの場合、データはコンピューターの中でファイルとして保存されており、これを別の場所に複製して退避することがバックアップです。ただし、RDBMSなどがデータ保存先としてファイルシステムを介さずにパーティションやディスクを使用している場合は、それに応じたバックアップが必要になります。また、RDBMSがデータ保存用に作成する巨大なファイルは実質上は単にデータの入れ物となっていて、一般的な意味でデータと言える粒度のものはファイルの中に独自フォーマットで保存されているため、これについても独自の対応が必要です。
加えて、ディスクのパーティションに関する情報(パーティションテーブル)はディスクの先頭部分(MBRやGPT)に保存されていますので、OS環境のバックアップを行う場合はこれらのバックアップも必要になります。
バックアップの注意点
どんなに小さなファイルでも、バックアップ(ファイルのコピー)には一定の時間がかかります。そのため、頻繁な更新があるファイルをバックアップした場合、以下のような問題が発生します。- バックアップ中にファイルの内容が更新され、一貫性が保たれない。
- バックアップ中に一部のファイルが更新され、バックアップを行ったファイル同士の一貫性が保たれない。
「一貫性が保たれない」とは、ある部分についてはバックアップ開始時刻の時点の内容となり、別のある部分についてはバックアップ終了時刻の時点の内容となるような状況を意味します。バックアップ対象に更新が無ければそれらは同じ内容となり問題は起きませんが、更新がある場合にはファイル内やファイル同士が矛盾した状態でバックアップされてしまうことになります。
クライアントPCなどのように、あまりファイルが更新されない場合には上記のような問題はありませんので、いつでも自由にバックアップを行うことができます。
サーバーのように頻繁に更新されるファイルがある場合は、以下のような方法でバックアップを行います。
- コンピューターを停止してバックアップを行う。
- OSをシングルユーザーモード等で実行し、最小限のサービス状態でバックアップを行う。
- スナップショット機能を使用してバックアップを行う(LVM、外部ストレージ、仮想環境)。
- 通常のバックアップとは別に、頻繁に更新されるファイル専用の方法でバックアップを行う(ログの転送や、データベースの複製からのバックアップなど)。
更新頻度からみたバックアップ対象
前項で記載したように、更新があるファイルのバックアップには気を遣う必要がありますが、更新頻度の面から一般的なサーバーにおけるバックアップ対象を分類すると、以下のようなものになります。No | 種別 | 更新頻度 | バックアップ対象 |
---|---|---|---|
1 | プログラム | 更新されない | 各種プログラム |
2 | データ | 更新されない | 画像データなど |
3 | データ | 稀 | 設定ファイルなど |
4 | データ | 頻繁 | ログファイル、作成中のドキュメントファイルなど |
5 | データ | 常時 | ログファイル、データベースファイルなど |
バックアップの方法
用途に応じて様々なバックアップが行われていますが、以下のような方法が代表的です。No | バックアップ方法 | 説明 |
---|---|---|
1 | ファイルやフォルダ単位のバックアップ |
|
2 | ファイルシステム(ドライブ)単位のバックアップ |
|
3 | OS環境とファイルなどシステムに関する全てのバックアップ |
|
4 | データベースなど特定のアプリケーションのバックアップ |
|
バックアップ先
バックアップを行ったデータをどこに保存すべきかも重要です。これについても、用途に応じて選ぶ必要があります。No | バックアップ先 | 安全度 | 保護対象 | 備考 |
---|---|---|---|---|
1 | 同一ハードディスク | 1 | データ誤削除 | |
2 | 別ハードディスク | 2 | (上記+) ハードディスク障害 |
|
3 | 別サーバー | 3 | (上記+) サーバー障害 サーバークラック |
|
4 | 別サーバー (別の場所) |
4~ | (上記+) 災害~大規模災害 |
バックアップ先のサーバーは、バックアップ元のサーバーから物理的な距離を離すほど、大きな災害にでも影響を受けにくくなります(東京と大阪など)。 |
Mondo Rescueによるシステムバックアップ
Mond Rescueでできること
Mond Rescueではシステム全体のバックアップを行うことができますが、前節で記載したように、更新があるファイルのバックアップにいろいろと制約があること自体は変わりません。そのため、Mond Rescueによるバックアップは、以下のようなものとなります。
- 更新が無いファイルについて、システム全体のバックアップを行うことができる。
- 更新があるファイルについては、別途、適切な方法でバックアップを行う必要がある。
インストール
Mondo Rescueの公式サイトから下記のバイナリをダウンロードしてインストールします。- afio
- buffer
- mindi-busybox
- mindi
- mondo
インストールの様子。
# 依存パッケージのインストール
yum install mkisofs cdrecord
# ダウンロード
wget ftp://ftp.mondorescue.org/rhel/5/i386/afio-2.5-1.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/i386/buffer-1.19-4.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/i386/mindi-busybox-1.7.3-1.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/i386/mindi-2.0.7.7-1.rhel5.i386.rpm
wget ftp://ftp.mondorescue.org/rhel/5/i386/mondo-2.2.9.6-1.rhel5.i386.rpm
# 確認
ls -1
afio-2.5-1.rhel5.i386.rpm
buffer-1.19-4.rhel5.i386.rpm
mindi-2.0.7.7-1.rhel5.i386.rpm
mindi-busybox-1.7.3-1.rhel5.i386.rpm
mondo-2.2.9.6-1.rhel5.i386.rpm
# インストール
rpm -ivh ./*.rpm
バックアップ
Mondo Rescueの「mondoarchive」コマンドでバックアップを行います。オプションはこちらのサイトを参照。さらに詳しくは「man mondoarchive」にて。緊急時に備えてリカバリDVDを作る(3/3) - @IT
オプション 機能 -O バックアップを実行 -V バックアップを検証 -E [ディレクトリ] バックアップ対象から除外するディレクトリを指定 -I バックアップ対象にディレクトリを追加
(初期設定では/)-i バックアップ生成物をISOファイルにする -p [名前] ISOファイルの名前を指定 -d [ディレクトリ/デバイス] バックアップイメージの出力先を指定 -s ISOファイルのサイズを指定 -A [コマンド] バックアップ前にコマンドを実行 -B [コマンド] バックアップ後にコマンドを実行 -S スクラッチディレクトリの指定 -T tmpディレクトリの指定 表 mondoarchiveコマンドの主要なオプション
バックアップの様子。
# バックアップ先 /mnt/backup
mondoarchive -Oi -d /mnt/backup -E /mnt -s 4480m -S /tmp -T /tmp -p `hostname`_`date +%Y%m%d`
Initializing...
See /var/log/mondoarchive.log for details of backup run.
Checking sanity of your Linux distribution
Done.
BusyBox's sources are available from http://www.busybox.net
Making catalog of files to be backed up
---evalcall---1--- Making catalog of /
---evalcall---2--- TASK: [*...................] 3% done; 1:04 to go
---evalcall---E---
(snip)
---evalcall---1--- Making catalog of /
---evalcall---2--- TASK: [********************] 98% done; 0:03 to go
---evalcall---E---
Done.
Dividing filelist into sets
Dividing filelist into sets. Please wait.
---evalcall---1--- Dividing filelist into sets
---evalcall---2--- TASK: [*...................] 3% done; 0:32 to go
---evalcall---E---
(snip)
---evalcall---1--- Dividing filelist into sets
---evalcall---2--- TASK: [********************] 99% done; 0:00 to go
---evalcall---E---
Your backup will probably occupy a single ISO. Maybe two.
Done.
Copying Mondo's core files to the scratch directory
Done.
Calling MINDI to create boot+data disks
Your boot loader is GRUB and it boots from /dev/hda
Waiting for 'echo hi > /tmp/mondo.tmp.q8aVJB/mojo-jojo.bla.bla ; mindi --custo
Boot+data disks were created OK
Done.
Preparing to archive your data
Done.
Archiving regular files to media
Archiving regular files
---progress-form---1--- I am backing up your live filesystem now.
---progress-form---2--- Please wait. This may take a couple of hours.
---progress-form---3--- Working...
---progress-form---E---
---progress-form---4--- TASK: [*...................] 1% done; 0:00 to go
---progress-form---1--- I am backing up your live filesystem now.
---progress-form---2--- ISO 1: [*...................] 1% used
---progress-form---3--- Please wait. This may take a couple of hours.
---progress-form---E---
(snip)
---progress-form---1--- I am backing up your live filesystem now.
---progress-form---2--- ISO 1: [****................] 17% used
---progress-form---3--- Please wait. This may take a couple of hours.
---progress-form---E---
---progress-form---4--- TASK: [********************] 100% done; 0:00 to go
Your regular files have been archived successfully.
Done.
Archiving large files to media
Done.
Writing any remaining data to media
Please be patient. Do not be alarmed by on-screen inactivity.
---evalcall---1--- Running mkisofs to make ISO #1
---evalcall---2--- TASK: [**..................] 6% done; 2:05 to go
---evalcall---E---
(snip)
---evalcall---1--- Running mkisofs to make ISO #1
---evalcall---2--- TASK: [********************] 99% done; 0:01 to go
---evalcall---E---
Call to mkisofs to make ISO (ISO #1) ...OK
Done.
Done.
Backup and/or verify ran to completion. Everything appears to be fine.
/var/cache/mindi/mondorescue.iso, a boot/utility CD, is available if you want it
Data archived OK.
Mondoarchive ran OK.
See /var/log/mondoarchive.log for details of backup run.
Execution run ended; result=0
Type 'less /var/log/mondoarchive.log' to see the output log
リストア
上記の方法によるバックアップが正常に終了すると、-dオプションで指定したディレクトリにisoファイルが作成されます。本来であれば、バックアップを行ったサーバーでリストアが可能かどうかを検証すべきではありますが、予備のHDDが無いと難しいため、VMware Playerで作成した仮想マシンにリストアを行いました。バックアップを行ったサーバーはPATA (IDE)のハードディスクと光学ドライブを使用しているため、仮想マシンも同じ構成にしていますが、ディスク容量は少し大きなサイズで作成しました。
isoファイル光学ドライブに指定して起動。
下記のメッセージが表示されるので、「nuke」を入力。
- To format and restore all files automatically, tipe 'nuke' <enter>
- To restore some/all files interactively, type 'interactive' <enter>
- To compare the archives with your filesystem, type 'compare' <enter>
- To boot to a command-line promptl (expert mode), type 'expert' <enter>
ハードディスクの内容が消去されるので、中止したい場合は10秒以内に「Ctrl+Alt+Del 」を押して下さいというメッセージ。
リストア中のメッセージ。
残り97%で3分半程度と表示されていますが、実際には5分程度かかりました(再起動の前まで)。リストアにかかる時間はデータ量やサーバーの性能によって大きく変わるものと思います。
リストアの時間を短くするには、データ量を少なくすることと、使用するハードディスクのパーティションサイズを、不必要に大きくしないことでしょうか(フォーマットに時間がかかるため)。
状況表示です。
- Partitioning hard drives Done.
- Formatting partitions Done.
- Mounting devices Done.
- Restoring OS and data from CD/USB
- Restoring from archives Done.
- Reassembling large files
リストア完了のメッセージです。「OK」をクリックするとコマンドプロンプトが表示されます。
コマンドプロンプトが表示されました。
「Type 'exit' to reboot the PC」と書かれています。
よく読まずに「shutdown -r now」と入力してしまいましたが、問題無く再起動しました。
OSの起動画面です。
無事にOSが起動しました。
まとめ
今回のケースでは特別な問題もなく、無事にリストアが完了しました。またリストア時間も非常に短く、リストア自体も全自動であるため、とても簡単です。
もし実際に重要なサーバーで障害が発生してリストアが必要になった場合、ハードディスク障害では無くても、ハードディスクを交換した上でリストアを行うのが良いと思います。そうすれば後から障害の原因究明が可能であり、また仮にリストアに失敗したとしても、元のハードディスクからデータを取り出すなどの対応ができるからです。
Mondo Rescueを使用してLinux/FreeBSDサーバーのシステムバックアップをしてみてはいかがでしょうか。