さくらVPSをMondo rescueでバックアップしてVMwareにリカバリして検証環境を構築する手順

www.drk7.jp と app.drk7.jp は、さくら VPS 2G を使って運用してます。自宅サーバ運用時には VMware で同一環境を持っていたので、リニューアルする前にいろいろと検証してから本番適用できたのですが、さくら VPS に移行してからはそのような検証環境を持ちあわせていません。なので年末年始の時間を利用してちょいとリニューアルしようと思い立つも、そもそも検証環境がないから作らなきゃってところにいます。でもいろいろミドルウェアを入れてる都合上、新規に OS からインストールなんて考えられない。

そこで Mondo rescue という無料のバックアップツールを利用して、さくら VPS 環境をバックアップし、OSX 上の VM Fusion にリカバリして検証環境を作ることにしました。これがネットに出てるいろんな情報を参考にトライするも正常起動せず、えらい苦労したので備忘録として残しておきます。VM が起動するまでに実に 20 時間ほど費やしてしまった・・・

img021.png

- スポンサーリンク -

この手順で説明する環境の前提。ご自分の環境に合わせて適宜読み替えて下さい。

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 を起動します。

img001.png

4-3. boot: expert で起動する
VM を起動すると boot: と表示されるので、expert と入力します。

img002.png

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

img003.png

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

img005.png

最後に lvcreate で LV(Logical Volume、論理ボリューム)を作成します。LV 名はさくら VPS に合わせます。

lvm lvcreate -L 195g -n LogVol00 VolGroup00
lvm lvcreate -L 4g -n LogVol01 VolGroup00

img006.png
※上記画像はトライ&エラーで頑張っていた時の、論理ボリュームサイズなので説明と異なります。

ひと通り設定してきた内容を確認するには下記のコマンドを使います。

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

img008.png

4-7. mondorestore でリカバリを開始する

やっとリカバリする準備が整いました。mondorestore コマンドを用いて Interactively でリカバリを開始します。

4-7-1. How should I restore?
手動のinteractiveを選択します。非常にわかりづらいですが、選択している部分がグレーになります。(※下記画像は Automatically が選択状態)

img009.png

4-7-2. Editing mountlist
mountlist を /dev/vda を全て/dev/sda に変更する

img010.png

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 を指定してディスクを入れ替えていきます。

img014.png

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 分程度と意外と速く完了します。

img018.png

手順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)

img022.png

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

img020.png

手順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 にアクセスして検証環境を触ることができるようになります。

参考にしたページ

- スポンサーリンク -