2012年6月28日木曜日

さくらのVPSをMondo Rescueで丸ごとバックアップしてVMWare Fusionでリストアしてみた

ホスティングでサーバーで運用しつつ、お手軽にバックアップする方法は無いのか?

ファーストサーバーの件から向こう、外部のホスティングでサーバーを運用しつつ、うまくバックアップする方法が無いかとぼんやり考えていた。

しかし、世の中の状況は「ぼんやりと」では済まされないらしい。企業はファーストサーバーの件に恐怖している。

確かに、こんな話は聞いたこと無い。しかし、福島原子力災害と同様「ありえない」と思っていたことが実際に起きてしまったのだから。

昔みたいにローカルに物理サーバーがあれば色々と方法はあるのだけど、世の中はクラウド時代。そして企業はコスト削減を余儀なくされている。だから、できるだけ社内に物理サーバーを持ちたくない。

かといって、さくらのVPSのようなホスティングでは当然物理サーバーが自由にならない。

しかし、VPSのようにソフトのインストール自体は自由にできるなら、サーバーを常時レプリケーションするようなバックアップソフトを導入することも考えられる。しかし、インストールと運用の手間と、何よりコストが・・・

そこでシンプルに考えて、重要な部分だけtarで固めてどっかにFTPしようかと考えていたけど、どうせならOS丸ごとできないものか?と思い直した。

ということで「Mondo Rescue」にあたる。どうやら、サーバーを稼働させながらサーバー丸ごとのディスクイメージを作れるオープンソースソフトらしい。
Mondo Rescue - GPL disaster recovery solution - http://www.mondorescue.org/

さくらのVPSで試して成功している人もいたようなので、自分も試してみた。


MondoRescueのインストール

[root@xxx ~]# wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mondorescue.repo
・・・
[root@xxx ~]# mv mondorescue.repo /etc/yum.repos.d/
[root@xxx ~]# yum install mondo
・・・
Dependencies Resolved

=====================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================
Installing:
mondo x86_64 3.0.2-1.rhel5 mondorescue 1.3 M
Installing for dependencies:
afio x86_64 2.5-1.rhel5 mondorescue 75 k
buffer x86_64 1.19-4.rhel5 mondorescue 22 k
cdrecord x86_64 9:2.01-10.7.el5 base 594 k
mindi x86_64 2.1.2-1.rhel5 mondorescue 303 k
mindi-busybox x86_64 1.18.5-1.rhel5 mondorescue 287 k
mkisofs x86_64 9:2.01-10.7.el5 base 608 k

Transaction Summary
=====================================================================================================================
Install 7 Package(s)
Upgrade 0 Package(s)

・・・
警告: rpmts_HdrFromFdno: ヘッダ V4 DSA signature: NOKEY, key ID 37db9883
mondorescue/gpgkey | 29 kB 00:00
Importing GPG key 0x37DB9883 "Bruno Cornec (primary address) " from ftp://ftp.mondorescue.org//rhel/5/x86_64/mondorescue.pubkey
Is this ok [y/N]: y

・・・
Installed:
mondo.x86_64 0:3.0.2-1.rhel5

Dependency Installed:
afio.x86_64 0:2.5-1.rhel5 buffer.x86_64 0:1.19-4.rhel5 cdrecord.x86_64 9:2.01-10.7.el5
mindi.x86_64 0:2.1.2-1.rhel5 mindi-busybox.x86_64 0:1.18.5-1.rhel5 mkisofs.x86_64 9:2.01-10.7.el5

Complete!


多少の警告は出たけど、問題なくインストール完了。


LZO圧縮ソフトのインストール

bzip2より圧縮速度が速いらしいlzoで圧縮するためのソフトもインストール。

その前に、yumの標準リポジトリにはlzoはあったけどlzopが無いようなのでDAGのリポジトリを使えるようにする。

[root@xxx ~]# vi /etc/yum.repos.d/dag.repo

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=0

[root@xxx ~]# yum install lzop lzo --enablerepo=dag
・・・
Dependencies Resolved

======================================================================================================
Package Arch Version Repository Size
======================================================================================================
Installing:
lzo x86_64 2.06-1.el5.rf dag 139 k
lzop x86_64 1.03-1.el5.rf dag 49 k

Transaction Summary
======================================================================================================
Install 2 Package(s)
Upgrade 0 Package(s)

Total download size: 188 k
Is this ok [y/N]: y
・・・
警告: rpmts_HdrFromFdno: ヘッダ V3 DSA signature: NOKEY, key ID 6b8d79e6
dag/gpgkey | 1.6 kB 00:00
Importing GPG key 0x6B8D79E6 "Dag Wieers (Dag Apt Repository v1.0) " from http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : lzo 1/2
Installing : lzop 2/2

Installed:
lzo.x86_64 0:2.06-1.el5.rf lzop.x86_64 0:1.03-1.el5.rf

Complete!


今回も多少警告が出たけど、無事インストール完了。


バックアップ先ディレクトリを作る

[root@xxx ~]# mkdir /backup

これは適当な場所。/autobackupとか適当な場所でいい。


mondoarchiveでバックアップしてみる

[root@xxx ~]# mondoarchive -Oi -L -N -s 5000m -d /backup -E /backup

コマンドラインオプションはここが参考になる。

[ThinkIT] 第1回:オープンソースMondo Rescueによるバックアップ手法 (3/3) - http://thinkit.co.jp/cert/article/0612/7/1/3.htm

ターミナルに進捗状況が表示される。

無事完了。

ディスク使用量7GBくらいで10分かからないくらいだった。もちろん環境によるだろう。

「-L」オプション(LZOを使う設定)を使わないとすごく時間かかった。lzoはbzip2より相当速いらしい。

出来たファイルはbzip2のが3.6GBくらい。lzoのが4.5GBくらい。lzoは速い分だけ圧縮率が低く、bzip2は遅い分だけ圧縮率が高いらしい。

また、「-s 5000m」オプションを付けないと640MB(CDサイズ)くらいのファイルがたくさんできた。

もっと大きなファイルを作りたい場合は想定されるサイズを指定してやればいい。今回のケースは4200mだとディスクイメージが2つになってしまって面倒だったので、5GBくらいかな?と思って5000mを指定した。

追記12.07.04:リカバリディスクが複数枚になったとしても正常にリカバリできることが確認できたので、後でDVDにバックアップするかもしれないことを考えるとやはり4200mが良いと思われ
----


VMWare Fusionでリストアしてみる

で、結果できた/backup/mondorescue-1.isoをFTPか何かでローカルに持ってきてVMWareで再現してみる。

VMWawa起動
新規作成
ディスクを使用せずに続行
ディスクイメージを選択
Linux/CentOS(64ビット)で続ける
設定のカスタマイズ
ハードディスク(SCSI)
詳細オプション
バスタイプをIDEに変更。これはさくらのVPSのディスクのマウントポイントがhda(IDE)になっているため。VMWareのデフォルトではSCSIなのでsdaとなる。これをやらないと後でパーティションがどうのとか言われて面倒なことになる。適用。
閉じる
VM起動
リカバリディスク(mondorescue-1.iso)のブートローダーが起動する
boot: nuke
後は待つ(10分くらい)
終了するとプロンプトに戻る
exitでVM再起動
OSが起動してログイン画面が出る!
ログインして内部を確認。

追記12.07.04:リカバリディスクが複数枚になったとしてもCD/DVDのアイコンからディスクイメージを差し替えることで正常にリカバリできることを確認した。
----

追記12.07.06:hda、hdb、と複数のディスクがマウントされていても正常にバックアップできることを確認した。
----

カンペキ。ディスクイメージを取ったんだから当たり前だけど。



これで毎日自動的にバックアップしてどっかのサーバーにアップすればデータの保全の面ではかなり安心になる。


できれば、さくらのVPS上でこのディスクイメージを使ってVMWareと同様にリストアできないものか?と思うけど、まだ試してない。できそうな感じはあるけど、どうだろう?