MondoRescueを使ってCentOS6をP2V

今回は MondoRescue というP2Vツールを用いて、[物理]→[仮想]といった移行をしました。
物理サーバが邪魔だし、仮想に移したい場合などに使えるのではないでしょうか。

## バックアップ 
### 環境
- 物理側：CentOS 6.9 、 物理パーティション
- 仮想側：VirtualBox 

### インストール
物理側にMondoRescueをインストールします。 レポジトリを追加し、yumでインストール。

````
レポジトリの取得
# wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo

レポジトリの追加
# mv ./mondorescue.repo /etc/yum.repos.d/

yumでのインストール
# yum install mondo
````
これでインストールが完了。
最後の方に記載するが、CentOSでも`ftp://ftp.mondorescue.org/centos`のレポジトリを追加しないのがコツです。
(でもCent 7ならcentosから取得する記述を見た… 暇があったら検証してみます)

### バックアップ
バックアップ前にSELinuxを無効にしたほうがうまくいく。

````
SELinuxの一時無効化
# setenforce 0
````

バックアップを行っていきます。

````
バックアップ用ディレクトリ作成
# mkdir /backup

いざ、バックアップ
# mondoarchive -Oi -g -L -N -s 4200m -d /backup -E /backup
````
オプションはこちらの方が詳しく書かれているのでそちらを参照
http://qiita.com/mozo/items/55574d7039bacfa8d8c8


バックアップには時間がかかりますので、コーヒーでも飲んで待ちましょう。終わると`/backup`以下に`mondorescue-1.iso`ができているはずです。
ここまで終了したら、物理サーバをいじることはもう殆ど無いでしょう。
ここでエラーが発生してバックアップ処理が止まってしまった場合には、後述するエラーの項目を参照してください。

## リストア
先ほど作成したisoファイルをscpなどで仮想環境があるPCへ送ります。
VirtualBoxを起動し、GUIでポチポチ仮想マシンを作ります。
物理マシンと全く同じ構成にする必要はありませんが、バックアップしたOSの要求する最低スペックぐらいはしてください。

### 仮想マシンの作成
今回は RAM:8192MB  , HDD:500GB
RAMだけ元のマシンに同じにしました。
仮想マシンを作り終えたら、マシンの設定画面を開いて光学ドライブに先ほどscpで送ってきたisoファイルをセットしましょう。

マシンの設定画面を終了し、マシンの起動。

### リストア準備
リストア作業はこちらのサイトを参照しながら行いました。
http://d.hatena.ne.jp/nayutaya/20090204/1233735588

仮想マシン起動後、ブートプロンプトで`expert`を入力。
※ここでkernel panicが発生する場合は、正しくバックアップが取れていないと思います。
`fdisk`コマンドでパーティション作成。

````
参照サイトはhdaだったが、自分はsdaだった
# fdisk /dev/sda
````
以下の構成でパーティションを組んだ。

| デバイス名 | システムID | システム名 | サイズ|備考|
|:---------:|:---------:|:------------:|:------------:|:-:|
| /dev/sda1 | 83       | Linux     | 500 MB         | /boot用|
| /dev/sda2 | 8e       | Linux LVM | 残りすべて       | LVM用|

LVMのパーティションを組む。

````
物理ボリュームの作成
# lvm pvcreate /dev/sda2
# lvm pvscan
正しくできているか確認
# lvm pvdisplay /dev/sda2

ボリュームグループの作成
# lvm vgcreate Vol00 -s 32m /dev/sda2
# lvm vgscan
正しくできているか確認
# lvm vgdisplay

論理ボリュームの作成
ルート用
# lvm lvcreate -L 491000m -n LV00 Vol00
スワップ領域の作成
# lvm lvcreate -L 8000m -n LV01 Vol00
# lvm lvscan
# lvm lvdisplay
````

`lvm lvdisplay`をした時に気づいたが、普通に8000mより8192mのほうがよかったかなあって

パーティションをフォーマットする。

````
# mkfs.ext3 -j /dev/sda1
# mkfs.ext3 -j /dev/Vol00/LV00
# mkswap /dev/Vol00/LV01
````

### リストア作業
ここで失敗して何度かやり直すことがあった。
以下のコマンドでリストアの開始。

````
# mondorestore
````

ここから画面が変わり、選択肢を選んでいく。

- モードは`Interactively`
- 読み込みデバイスは`DVD disks`
- Editing mountlistは下の表のにあるように記述した
- Are you sure you want to save your mountlist and continue? → `Yes`
- Do you want to erase and partition your hard drives? →`No`
- Do you want to format your hard drives? →`No`
- Do you want me to restore all of your data? →`Yes`
- Initialize the boot loader? →`Yes`
- You will now be able to regenerate your initrd. →`No`
- Did you change the mountlist or cloned the system? →`Yes`
- Please confirm/enter the boot device. →`/dev/sda`
- fstabは変更点を下にまとめます。
- mtabは変更点を下にまとめます。
- grub.confは変更点をまとめます。
- device.mapはそのまま
- Label/Identify your ext2/ext3/ext4 partitions if necessary? →`Yes`

Editing mountlistの例

| Device | Mountpoint | Format | Size |
|:-------|:-----------|:-------|:-----|
| /dev/sda2 | lvm | lvm  | 0  |
| /dev/Vol00/LV00 | /  | ext3 | 0 |
| /dev/sda1 | /boot  | ext3 | 0 |
| /dev/Vol00/LV01  | swap  | swap | 0 |


#### fstab、mtabの変更点
1.`/dev/mapper/xxxx_yyyy` となっているところを直接参照させる (rootなら `/dev/Vol00/LV00`に変更する )
2.`/home`の記述がある行を消す ( 環境に応じて消したり消さなかったりしてください )
3.`ext4` と記述されているところを `ext3`に変更

#### grab.confの変更点
`kernel` の行を変更
`kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/Vol00/LV00 rhgb quite selinux=0 enforcing=0`

すべて問題なく終わったら、マシンを再起動する。isoファイルを取り除くのを忘れないように。

おそらくこれで問題なく起動するはずです。

### 遭遇したエラーたち
を書きたいんですが、思いの外記事を書くのに時間がかかってしまったので、近いうちに更新するか、別の記事にまとめたいと思います。
はい、本当にすいません。