さくらVPSをMondo rescueでバックアップしてVMwareにリカバリして検証環境を構築する手順
www.drk7.jp と app.drk7.jp は、さくら VPS 2G を使って運用してます。自宅サーバ運用時には VMware で同一環境を持っていたので、リニューアルする前にいろいろと検証してから本番適用できたのですが、さくら VPS に移行してからはそのような検証環境を持ちあわせていません。なので年末年始の時間を利用してちょいとリニューアルしようと思い立つも、そもそも検証環境がないから作らなきゃってところにいます。でもいろいろミドルウェアを入れてる都合上、新規に OS からインストールなんて考えられない。
そこで Mondo rescue という無料のバックアップツールを利用して、さくら VPS 環境をバックアップし、OSX 上の VM Fusion にリカバリして検証環境を作ることにしました。これがネットに出てるいろんな情報を参考にトライするも正常起動せず、えらい苦労したので備忘録として残しておきます。VM が起動するまでに実に 20 時間ほど費やしてしまった・・・
この手順で説明する環境の前提。ご自分の環境に合わせて適宜読み替えて下さい。
OS:CentOS 5.5 final
VM:VM Fusion6
※使っている OS のバージョンがわからなければ、RedHat 系列なら下記のコマンドで確認できます。
[root@localhost drk7.jp]# cat /etc/redhat-release CentOS release 5.5 (Final)
手順1. さくら VPS に Mondo rescue, lzo, lzop をインストールする
mondorescue のバージョンが 3.0.1 だと失敗するとかなんとか情報を見かけますが、初めて mondorescue をインストールするなら、下記の方法でうまくいきます。
リポジトリは ftp://ftp.mondorescue.org からご自分の環境にあったものを選択します。
cd /usr/local/src wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mondorescue.repo mv mondorescue.repo /etc/yum.repos.d/ sudo yum install -y mondo
ちなみに /etc/yum.repos.d/mondorescue.repo のファイルの内容は下記のとおりなので、ftp できなければ、下記の内容でファイルを作ってもOKです。
/etc/yum.repos.d/mondorescue.repo
echo '[mondorescue] name=rhel 5 x86_64 - mondorescue Vanilla Packages baseurl=ftp://ftp.mondorescue.org//rhel/5/x86_64 enabled=1 gpgcheck=1 gpgkey=ftp://ftp.mondorescue.org//rhel/5/x86_64/mondorescue.pubkey ' > /etc/yum.repos.d/mondorescue.repo
mondorescue は圧縮しながらバックアップすることが可能です。圧縮してバックアップファイルを小さくしたほうが速度低下よりメリットが大きいです。素の状態では gzip, bzip2 による圧縮になり遅いので、高速に圧縮するために lzo, lzop をインストールしておきます。
まずはリポジトリ情報を yum に登録します。
/etc/yum.repos.d/dag.repo
echo '[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 ' > /etc/yum.repos.d/dag.repo
お次に lzo, lzop をインストール。これにて前準備は完了です。
sudo yum install -y lzop lzo --enablerepo=dag
手順2. さくら VPS を SELinux 無効化する
SELinux が有効にした状態でバックアップすると、SELinux の全ファイルのラベルの情報が欠落してしまい、リカバリ時にラベルを振り直す作業が必要になり面倒です。したがって SELinux は無効化しておくのがベターです。
※ラベル振り直しは、fixfiles restore もしくは fixfiles relabel を使います。
SELinux の状態を確認
sudo getenforce
SELinux を無効化
sudo setenforce 0
手順3. さくら VPS をバックアップする
バックアップディレクトリを適当な場所に作成して、mondoarchive でバックアップします。今回はバックアップ条件は下記のとおりです。
ディレクトリ:/backup
分割サイズ:4.2GB(DVDサイズ)※逆に 100g とかにすればリカバリ時に楽
オプションの意味
- -O: iisoイメージを生成
- -gF: GUIを出力しブートフロッピーを作成しない
- -L: lzoを利用して圧縮
- -N: ローカルディスクのみがバックアップ対象
- -s: メディアのサイズを指定
- -d: バックアップイメージを保管するディレクトリやデバイスの指定
- -E: バックアップ対象から除外するディレクトリを指定
sudo mkdir /backup sudo mondoarchive -Oi -L -N -s 4200m -d /backup -E /backup
バックアップが終わるまでひたすら待ちます。僕の場合、80GB の対象で 65GB 程のバックアップファイルになりました。取得したバックアップは ftp, sftp, scp などを使って、さくら VPS からローカルの PC に転送しておいてください。
手順4. VM Fusion 上の VM にリカバリする
さくら VPS のディスク使用量以上のサイズで VM をカスタム作成します。今回の場合は、100GB 程度で足りますが、さくら VPS 2G プラント同じく、200GB の SCSI ディスク容量を準備。後はデフォルトの状態です。
4-1. さくら VPS の状態を把握しておきます。
df -h
[root@www ~]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 190G 102G 79G 57% / /dev/vda1 99M 20M 75M 21% /boot tmpfs 1006M 0 1006M 0% /dev/shm
fdisk -l
[root@www ~]# fdisk -l Disk /dev/vda: 214.7 GB, 214748364800 bytes 255 heads, 63 sectors/track, 26108 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 26108 209608087+ 8e Linux LVM
lvm pvscan
[root@www ~]# lvm pvscan PV /dev/vda2 VG VolGroup00 lvm2 [199.88 GB / 0 free] Total: 1 [199.88 GB] / in use: 1 [199.88 GB] / in no VG: 0 [0 ] [root@www ~]# lvm vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 [root@www ~]# lvm lvscan ACTIVE '/dev/VolGroup00/LogVol00' [195.97 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [3.91 GB] inherit
4-2. mondorescue-1.iso で VM を起動する
cdrom に転送したバックアップファイルの mondorescue-1.iso を選択して cdrom から VM を起動します。
4-3. boot: expert で起動する
VM を起動すると boot: と表示されるので、expert と入力します。
4-4. 仮想 hdd を fdisk でパーティションを作成する
SCSI タイプの仮想 HDD は /dev/sda になります。fdisk でパーティションを作成します。パーティンションの区切り方はさくら VPS に合わせて、ブートと LVM 領域に区切ります。
さくら VPS のパーティション情報
デバイス Boot Start End Blocks Id System /dev/vda1 * 1 13 104391 83 Linux /dev/vda2 14 26108 209608087+ 8e Linux LVM
ブロック 1-13 でブート領域を作成してブートフラグを立てます。
fdisk /dev/sda Command(m for help):n p 1 1 13 Command(m for help):a 1
続いて、ブロック 14-最後までで LVM 領域を作成し、最後に情報を書き込みます。
Command(m for help):n p 2 14 2610 Command(m for help):t 2 8e Command (m for help): w
4-5. LVM を構成する
lvm コマンドを使ってさくら VPS と同じような LVM を構成します。基本は swap 領域を決めて LVM 容量から引算して LogVol00 の容量を決めます。ざっくり計算して下記の通り。
LogVol01: swap 領域としてメモリ 2GB の2倍の 4GB 確保
LogVol00: 200GB のディスク容量から、ブート領域と 4GB を減算し 195 GBを確保
物理ボリューム PhysicalVolume(PV) 物理的なディスク領域で、/dev/hda2など
ボリュームグループ VolumeGroup(VG) PVをグループにした(ハードディスク的な)領域
論理ボリューム LogicalVolume(LV) VGから作成した論理的なパーティション領域
まずは pvcreate で PV(Physical Volume、物理ボリューム)を作成します。
lvm pvcreate /dev/sda2
次に vgcreate で VG(Volume Group、ボリュームグループ)を作成します。VG 名はさくら VPS に合わせます。
lvm vgcreate VolGroup00 -s 32m /dev/sda2
最後に lvcreate で LV(Logical Volume、論理ボリューム)を作成します。LV 名はさくら VPS に合わせます。
lvm lvcreate -L 195g -n LogVol00 VolGroup00 lvm lvcreate -L 4g -n LogVol01 VolGroup00
※上記画像はトライ&エラーで頑張っていた時の、論理ボリュームサイズなので説明と異なります。
ひと通り設定してきた内容を確認するには下記のコマンドを使います。
lvm pvscan lvm vgscan lvm lvscan lvm vgdisplay 以下実行結果のサンプルです [root@localhost drk7.jp]# lvm pvscan PV /dev/sda2 VG VolGroup00 lvm2 [199.88 GB / 896.00 MB free] Total: 1 [199.88 GB] / in use: 1 [199.88 GB] / in no VG: 0 [0 ] [root@localhost drk7.jp]# lvm vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 [root@localhost drk7.jp]# lvm lvscan ACTIVE '/dev/VolGroup00/LogVol00' [195.00 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [4.00 GB] inherit [root@localhost drk7.jp]# lvm vgdisplay --- Volume group --- VG Name VolGroup00 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 199.88 GB PE Size 32.00 MB Total PE 6396 Alloc PE / Size 6368 / 199.00 GB Free PE / Size 28 / 896.00 MB VG UUID hWmQLk-28HI-eM2X-6DsA-1n4G-FtqC-OrA17P
4-6. mkfs.ext3 コマンドでパーティションをフォーマットする
mkfs.ext3, mkswap を使って構成してきた各パーティションをフォーマットします。
mkfs.ext3 -j /dev/sda1 mkfs.ext3 -j /dev/VolGroup00/LogVol00 mkswap /dev/VolGroup00/LogVol01
4-7. mondorestore でリカバリを開始する
やっとリカバリする準備が整いました。mondorestore コマンドを用いて Interactively でリカバリを開始します。
4-7-1. How should I restore?
手動のinteractiveを選択します。非常にわかりづらいですが、選択している部分がグレーになります。(※下記画像は Automatically が選択状態)
4-7-2. Editing mountlist
mountlist を /dev/vda を全て/dev/sda に変更する
4-7-3. Are you sure you want to save your mountlist and continue? [Yes]
Yes を選択して変更内容を反映
4-7-4. Do you want to erase and partition your hard drives? [No]
すでにパーティションを手動定義済みなので No を選択
4-7-5. Do you want to format your hard drives? [No]
すでにフォーマット済みをなので No を選択
4-7-6. Do you want me to restore all of your data? [Yes]
全データをレストアするかと効かれるので当然 Yes を選択。リカバリが進むに連れてディスクの入れ替えを求められるので、VM Fusion のメニューから順次 .iso を指定してディスクを入れ替えていきます。
4-7-7. Initialize the boot loader? [Yes]
boot loader を初期化するか聞かれるので Yes を選択
4-7-8. You will now be able to re-generate your initrd. [Yes]
initrd を再作成するか聞かれるので Yes を選択
これにてリカバリ完了です。
65GB のリカバリもおおよそ 30 分程度と意外と速く完了します。
手順5. もう一度 boot:expert で起動して /boot をラベル付けする
SELinux を無効にしても /dev/sda1 = /boot のラベル情報が消えてしまい起動できませんでした。したがって、boot: expert でもう一度 cdrom から起動してラベル付を行います。
起動したら mount -l でラベル情報を確認してみる。確かに /boot がありません。
[root@localhost drk7.jp]# mount -l /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
e2label で /dev/sda1 = /boot のラベル付を行う。
e2label /dev/sda1 /boot
ちなむにラベル付けしないと、下記の場所でハング(フリーズ)して先に進まなくなります。他の人が公開している手順通りにやったけど、どうにもここでハングして困ってましたが自力で解決にたどり着きました。
EXT3-fs: INFO: recovery required on readonly filesystem. EXT3-fs: write access will be enabled during recovery. kjournald starting. Commit interval 5 seconds EXT3-fs: recovery complete. EXT3-fs: mounted filesystem with ordered data mode. SELinux: Disabled at runtime. type=1404 audit(1388310836.776:2): selinux=0 auid=4294967295 ses=4294967295
手順7. cdrom を切り離して VM を起動し検証環境を構築する
これで起動する状態にリカバリできているはずです。ログイン画面が現れたら root でログインします。ログイン後にすることは下記のとおりです。本項の詳細は割愛しますがポイントだけ書き残します。
1. VMware tools をインストールして VM 再起動する
メニューから VMware tools をインストールを実行して VM 再起動
mount /dev/cdrom /mnt/cdrom mkdir /usr/local/src/vmtools cp -rf /mt/cdrom/* /usr/local/src/vmtools cd /usr/local/src/vmtools/ tar xvfz VMwareTools-9.6.1-1378637.tar.gz cd vmware-tools-distrib vmware-install.pl reboot -f
2. etc/sysconfig/network-scripts/ifcfg-eth0 の編集して network 再起動
vi etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR 行を削除 /etc/init.d/network restart
3. /etc/resolv.conf を環境に合わせて編集
4. /etc/hosts に自 IP を検証ドメインに紐付け
5. OSX 側に dnsmasq をインストールして VM とドメインを紐付け
MacOS 10.7,10.8でhostsファイルが無効になる « 大阪のアンドロイド開発会社 ノーティス あたりを参考にする
以上で、VM を起動し、OSX 側から本番環境のドメインで VM にアクセスして検証環境を触ることができるようになります。
参考にしたページ
- 琴線探査: さくらのVPSをMond Rescueで丸ごとバックアップしてVMWare Fusionでリストアしてみた
- [ThinkIT] 第1回:オープンソースMondo Rescueによるバックアップ手法
- さくらVPS環境をMondorescueでバックアップしてVmwareにリカバリする - temitaの不思議空間
- Mondo Rescueを使い、物理マシンを仮想マシン化する方法 - 那由多屋 開発日誌
- CentOS6.3フルバックアップツール(Mondo Rescue)のインストール « MARU's Blog
- Stray Penguin - Linux Memo (Mondo)
- SELinux と Mondo Rescue その2 - 北海道でSEとパパのあいだに・・・
コメントやシェアをお願いします!