Mondo Rescueを使い、物理マシンを仮想マシン化する方法
こんにちは。那由多屋の加藤です。
2009年1月23日に『Fedora Core 6にMondo Rescueをインストール』という記事を書いて以来、試行錯誤していたリストア作業ですが、やっと成功しましたので、簡単にまとめたいと思います。
目標
作業の流れ
今回は、下記の流れで仮想マシンへの移行を行いました。
物理マシンの構成を記録
リストアを効率的に行うため、物理マシンのディスク構成などを記録しておきました。
今回、仮想マシン化を行った物理マシン(以下、対象マシン)は、下記のような構成です。
$ cat /etc/redhat-release Fedora Core release 6 (Zod) $ sudo /sbin/fdisk -l Disk /dev/sda: 73.4 GB, 73407865856 bytes 255 heads, 63 sectors/track, 8924 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 8924 71577607+ 8e Linux LVM $ df -ha Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 65G 7.5G 54G 13% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts /dev/sda1 99M 16M 78M 18% /boot tmpfs 1014M 0 1014M 0% /dev/shm none 0 0 0 - /proc/sys/fs/binfmt_misc sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs $ sudo /sbin/lvm pvscan PV /dev/sda2 VG VolGroup00 lvm2 [68.25 GB / 32.00 MB free] Total: 1 [68.25 GB] / in use: 1 [68.25 GB] / in no VG: 0 [0 ] $ sudo /sbin/lvm vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 $ sudo /sbin/lvm lvscan ACTIVE '/dev/VolGroup00/LogVol00' [66.28 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inherit
物理マシンにMondo Rescueをインストール
対象マシンにMondo Rescueをインストールしました。
各ディストリビューション向けのインストール方法については、Web上に豊富な情報がありますので、それらを参考にしてください。また、過去記事『Fedora Core 6にMondo Rescueをインストール』も参考にどうぞ。
物理マシンをMondo Rescueでバックアップ
対象マシンでMondo Rescueを実行して、バックアップを行いました。今回は、DVD-R用のISOイメージとしてバックアップしました。
SELinuxを有効にしている場合は、バックアップ時に無効にしておくと問題が少ないようです。(SELinuxを有効な状態でバックアップを行うと、リストア時にLVMの構成に失敗する、との情報をどこかで見かけました)
また、可能であればシングルユーザモード(init 1)で実行してください。今回はサーバが稼働中だったため、マルチユーザモード(init 3)で実行しました。
$ sudo mkdir /backup $ sudo /usr/sbin/setenforce 0 $ /usr/sbin/getenforce Permissive $ sudo /usr/sbin/mondoarchive -Oi -g -L -N -s 4200m -d /backup -E /backup $ sudo /usr/sbin/setenforce 1 $ /usr/sbin/getenforce Enforcing
なお、mondoarchiveコマンドで生成されるISOイメージは自動的にバックアップ対象から除外されるため、バックアップ先(今回は/backup)が空ディレクトリであれば、-Eオプションを指定する必要はありません。
仮想マシンを構築
今回は、Microsoft Virtual PC 2007 (6.0.756.0)上に仮想マシンを構築しました。割当メモリは256MB、仮想ディスクは少々キツキツではありますが8GBとしました。
仮想マシンにバックアップをリストア
リストア時には、罠が満載です。:-) 詳細は後述の「ハマったところ」をご参照ください。
今回は、下記の方法でリストアしました。
- 仮想マシンにmondoarchiveコマンドで生成されたISOイメージをセット
- 仮想マシンを起動
- ブートプロンプト(boot:)に[expert]を入力
- fdiskコマンドでパーティションを作成(詳細は後述)
- lvmコマンドでLVMを構成(詳細は後述)
- mkfsコマンドでパーティションをフォーマット(詳細は後述)
- mondorestoreコマンドでリストア(詳細は後述)
- X Windowの設定を調整(詳細は後述)
- SELinuxのラベルを再設定(詳細は後述)
fdiskコマンドでパーティションを構成
今回はバックアップ時とは異なるディスク環境にリストアするため、fdiskコマンドを用いて手動でパーティションの構成を行いました。
# fdisk /dev/hda
対象マシンと同様、ブート用のパーティションと、LVM用のパーティションの合計2つのプライマリパーティションを作成しました。また、ブート用はブート可能としました。
下記の2つの表は、将来の参考用です。:-)
コマンド | 説明 |
---|---|
p | パーティションテーブルを表示 |
d | パーティションを削除 |
n | パーティションを作成 |
t | パーティションのシステムIDを変更 |
a | パーティションにブート可能フラグを変更 |
w | パーティションテーブルを書き込んで終了 |
システムID | システム名 |
---|---|
83 | Linux |
8e | Linux LVM |
lvmコマンドでLVMを構成
パーティションと同様、LVMも手動で構成を行いました。論理ボリュームのサイズは、ルート用が6.5GB、swap用が1GBとしました。
# lvm pvscan # lvm vgscan # lvm lvscan # lvm pvcreate /dev/hda2 # lvm pvscan # lvm pvdisplay /dev/hda2 # lvm vgcreate VolGroup00 -s 32m /dev/hda2 # lvm vgscan # lvm vgdisplay # lvm lvcreate -L 6500m -n LogVol00 VolGroup00 # lvm lvcreate -L 1000m -n LogVol01 VolGroup00 # lvm lvscan # lvm lvdisplay
mkfsコマンドでパーティションをフォーマット
fdisk、lvmコマンドで作成したパーティション、論理ボリュームを手動でフォーマットしました。
# mkfs.ext3 -j /dev/hda1 # mkfs.ext3 -j /dev/VolGroup00/LogVol00 # mkswap /dev/VolGroup00/LogVol01
mondorestoreコマンドでリストア
ディスクの構成が完了した後、リストアを行いました。
# mondorestore
テキストによるGUI画面が表示され、選択肢はそれぞれ下記の通り入力しました。
- モードは[Interactively]
- 読み込み元は[DVD disks]
- mountlistは、/dev/sdaを/dev/hdaに、サイズを0MBにそれぞれ変更
- 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]
- Did you change the mountlist? [Yes]
- Boot device [/dev/hda]
- fstabは、そのまま保存
- mtabは、[/dev/sda1]になっている箇所を[/dev/hda1]に変更
- grub.confは、そのまま保存
- device.mapは、[/dev/sda]になっている箇所を[/dev/hda]に変更
- Label/Identify your ext2 and ext3 paritions if necessary? [Yes]
mountlistには、下記の通り入力しました。
/dev/hda2 lvm lvm 0 /dev/VolGroup00/LogVol00 / ext3 0 /dev/hda1 /boot ext3 0 /dev/VolGroup00/LogVol01 swap swap 0
上記の作業が完了後、仮想マシンを再起動すると、仮想化された対象マシンのブートが始まります。
X Windowの設定を調整
今回は移行先にVirtual PCを使用したため、下記の設定を行いました。
カーネルパラメータの変更は、シングルユーザモードにて起動後、grub.confを編集して「vga=788 i8042.noloop」を追加しました。
# vi /etc/grub.conf
「vga=788」はコンソール画面を800x600x16bitで動作させるための、「i8042.noloop」はX Windowにてマウスを使用するための指定です。
また、X Windowの設定を変更して、800x600x16bitモードで動作するように変更しました。
# vi /etc/X11/xorg.conf
変更後のxorg.confは下記の通りです。(修正箇所のみ抜粋)
Section "Device" Driver "s3" EndSection Section "Screen" DefaultDepth 16 SubSection "Display" Depth 16 Modes "800x600" "640x480" EndSubSection EndSection
ハマったところ
バックアップよいよい、リストア怖い・・・。バックアップは簡単なMondo Rescueですが、リストアは一筋縄では行きませんでした。
下記に合致する場合、expertモードで作業を行った方が早そうです。
- バックアップ時とは異なるディスク構成にリストアする場合
- SELinuxを有効にしている場合
- LVMを使用している場合
nukeモードにて「Switch to Interactive Mode?」
そもそも、nukeモード(全自動モード)は、バックアップしたマシンにリストアする場合しか使えません。今回はディスク構成が異なるため、interactiveモードへの移行を促されましたが、最終的にはexpertモードでリストアしました。
LVMの初期化にて「Failed to initialize LVM」
interactiveモードにてリストアする際、パーティションテーブルの編集はできるのですが、LVM構成の編集はできません。そのため、バックアップ元と同様のLVMを構成しようとしてしまい、失敗します。
/tmp/i-want-my-lvmというスクリプト(?)が内部で実行されているようなのですが、そのファイルを修正しても反映されませんでした。
今回は、手動でLVMを構成することで対処しました。
パーティショニングで「Segmentation fault」
interactiveモードでパーティショニングを行うと、Segmentation faultが発生してしまいました。
今回は、手動でパーティションを構成することで対処しました。
フォーマットで「Segmentation fault」
interactiveモードでフォーマットを行うと、Segmentation faultが発生してしまいました。その際のエラーメッセージは、下記の通り。
Failed. Errors occurred during the formatting of your had drives. Segmentation fault
今回は、手動でフォーマットすることで対処しました。
LVMを使用しないと書き換え箇所多数
LVM関連で色々と問題が発生したため、リストア時にLVMを使用しない構成としてみました。しかし、各種設定ファイルの書き換えが必要だったため、結局はLVMを使用する構成としました。
Virtual PC上でブート画面、X Windowの画面が乱れる
Virtual PC上でLinuxを動かす場合の共通の問題です。