月別アーカイブ: 7月 2013

mondorescue – Linuxシステムのフルバックアップとハード変更

 MondoRescueと言うツールがある。
 Linuxシステムのフルバックアップを行ってDVD等のメディアに保存して、DVDブートでフルリカバリしたり、あるいはファイル単位で復元も出来る便利なツールである。

 今回、開発に利用していたサーバの不調から、新しいサーバにシステム丸ごと移行するためにこのツールを使った。
 同一構成でのリストアでは何も気にすることなく、mondoarchiveコマンドで取ったバックアップをDVDに焼いて、DVDブートして全自動モードを選べばほぼ何も気にすることなく復元されるのだが、今回は、ハードウェアがだいぶ新しい物に変わったのと、非冗長ディスク構成だった環境からRAID1ミラーリング環境へと移行するため、色々と手順が必要だったので記録しておく。

旧環境
HP Proliant ML350 G5
HDD 250GBx2(LVMにより単一ボリューム化[JBOD]) IDE Native
/dev/sda1がブートパーティション
/dev/sda2, /dev/sdb2がVolGroup00のメンバーで、LogVol00がルート、LogVol01がスワップ。
CentOS 5.5 x86_64

新環境
HP Proliant ML110 G7
HDD 2TBx2(ソフトウェアRAID1構成) AHCI
CentOS 5.5 x86_64

 旧環境にてフルバックアップを実施した。
事前準備
MondoRescue導入
wget ftp://ftp.mondorescue.org/rhel/5/x86_64/mondorescue.repo
mv mondorescue.repo /etc/yum.repos.d/
yum install mondo
#バックアップ前にmdadmを入れておかないと、リカバリ時に使えなくて困る
yum install mdadm

バックアップメディアの準備(今回は2TBのHDDを接続して利用、/dev/sdcになった)
fdisk /dev/sdc
#全体をLinuxタイプのパーティションにした
mke2fs /dev/sdc1
mount /dev/sdc1 /mnt/backup

バックアップ実行
mondoarchive -Oi -g -L -N -s 4G -d /mnt/backup -E /mnt

・mondorescue-1.isoをDVDに焼く
・バックアップデータの入ったディスク(/dev/sdc)を新環境に接続

・新環境の構成を実施
新環境を先のDVD(mondorescue-1.isoのもの)からブートする。
 ブート時の選択でexpertで起動する。
 ハードディスクは/dev/sda, /dev/sdbにアレイ構築用、/dev/sdcにバックアップデータの入ったディスクが存在する状態。

fdisk /dev/sda
fdisk /dev/sdb
#/dev/sda1, /dev/sdb1を100MのLinux RAID Autodetect(type:fd)として作成、アクティブマークする。
#/dev/sda2, /dev/sdb2に残りを割り当て、同じくLinux RAID Autodetectにする。

mdadm –create –level=1 –metadata=0.9 –raid-devices=2 /dev/md0 /dev/sd[ab]1
mdadm –create –level=1 –metadata=0.9 –raid-devices=2 /dev/md1 /dev/sd[ab]2
#metadata1.2だとブートできなかった

lvm pvcreate /dev/md1
lvm vgcreate VolGroup00 /dev/md1
lvm lvcreate -L 1.8T -n LogVol00 VolGroup00
lvm lvcreate -L 8G -n LogVol01 VolGroup00
mke2fs -j /dev/md0
mke2fs -j /dev/VolGroup00/LogVol00
mkswap /dev/VolGroup00/LogVol01

#fstabを修正する
vi /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults,noatime
/dev/VolGroup00/LogVol01 swap swap defaults
/dev/md0 /boot ext3 defaults
#LABEL=boot /boot だったのを /dev/md0に変更

#mondoが使うマウントリストを修正
vi /tmp/mountlist.txt
/dev/md0 /boot ext3 0 /boot
/dev/md1 lvm lvm
/dev/VolGroup00/LogVol00 / ext3 lvm
/dev/VolGroup00/LogVol01 swap swap lvm

#リストアプログラムを起動する
mondorestore
モード選択>Interactive
ソース選択>Hard disk
プレフィクス設定>mondorescue
ディスクの場所の入力>/dev/sdc1
ディスクタイプの入力>ext3
External…? > Yes
ISO Mode – path > /
#プログラムがバックアップデータをマウントする
#マウントリストの編集画面やディスク構成関連の情報が出るが、先の手順で事前設定済みなので以下の通り進める
SaveMount List? > Yes
Do you want erase and partition your hard drives? No
Do you want format your hard drives? No
Do you want me to restore all of your data? Yes
#ファイルリストア処理が行われる(400GBで10時間程度かかった)
Initialize bootloader? No
#ブートローダを再構築しないといけないが、手動で実行するのでNo
#コマンドラインに落ちる

mkdir /mnt/root
mount /dev/VolGroup00/LogVol00 /mnt/root
mount /dev/md0 /mnt/root/boot
mdadm –examine –scan > /mnt/root/etc/mdadm.conf
#mdadm.confが無いとブート時にmdを見失う
chroot /mnt/root
mount /proc
#/proc/mdstatが無いとraid関係モジュールがmkinitrdで入ってこないので、必ず/procをマウントする
cd /boot
vi grub/device.map
#デバイスマッピングで/bootデバイスを指定しておく
(hd0) /dev/md0

vi grub/grub.conf
#grub設定のrootデバイス kernelオプションでrd_NO_DMやrd_NO_MDがある場合は削除する
#rootオプションを確認する(root=/dev/mapper/VolGroup00-LogVol00)、LVMがうまくいかないときは、rd_LVM_LV=VolGroup00/LogVol00とrd_LVM_LV=VolGroup00/LogVol01を追記する。

古い初期ファイルをリネームする
#grub.confにあったinitrdのファイル
#…はカーネルバージョン、2.6.el5.x86_64とか
mv initrd-…img initrd-…img.old
同名で新しい初期ファイルを構築する
mkinitrd -v -f initrd-…img …

ブートセクタを仕込む
grub
device (hd0) /dev/sda
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf

device (hd0) /dev/sdb
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
quit

ctrl+dでchrootを抜けて、shutdown -hする。
 ブートに使ったDVDや、バックアップデータのドライブを外して起動できることを祈りつつ電源On。

 まとめると簡単だが、諸々、設定しなきゃいけない項目、しなくても良い項目があったりして難しかった印象だ。
 この手順をベースにすれば、非RAIDからRAID、RAIDから非RAIDへの移動も出来る。
 お名前.com VPS(KVM)等、VPSでは基盤側が冗長化されているから、VPS上では単純ディスク構成であるが、そこで構築した環境を物理サーバに持ってきたいみたいな場合、非RAIDtoRAID構成のV2P(仮想から物理へ)変換を行わなければならないので、この手順をメモっておく。

(2174)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], サーバ設定 | コメントをどうぞ