mondorescueによるバックアップとレストア

日付 2021.02.20
タイトル mondorescueによるバックアップとレストア
本文
サイト : http://www.mondorescue.org/

# 以下よりDL
http://www.mondorescue.org/ftp/
or
http://ftp.mondorescue.org/


#
# バックアップ ------------------------------------------------
#

# mondorescueのインストール
#
# 該当OS/ver/archのディレクトリからパッケージをDL
# CentOS 5.x系列はrhel/5を利用したほうが良いらしい
#
# 実作業にてCentOS 5で利用したのは
# rhel
# 5
# i386
# afio-2.4.7-1.i386.rpm
# buffer-1.19-1.i386.rpm
# mindi-2.0.5-1.rhel5.i386.rpm
# mindi-busybox-1.7.3-1.rhel5.i386.rpm
# mondo-2.2.8-1.rhel5.i386.rpm
#



# /path/to/work -> バックアップの保存先を確保、準備
# 吸い出しターゲットに影響を与えずに作業する場合はnfsなど外部メディアに保存する
# work直下にiso, chnk, tmpディレクトリを作成
# 'backup_prefix'は生成されるバックアップ名を指定

# 実行
( mondoarchive -Oi -d /path/to/work/iso -E /path/to/work -s 4480m -S /path/to/work/chnk -T /path/to/work/tmp -p 'backup_prefix' ) &

# 負荷が上がりすぎて困る場合は以下も実行
# uptimeから負荷を取得して5以上の場合にmondoarchive関連のプロセスにSIGSTOPを送る
# 5未満でSIGCONTによる再開
(while true; do
uptime | awk 'gsub(",", "") { print ; }' | xargs -I'{}' sh -c '
#set -x
#set +o posix

if [ `echo "{} < 5" | bc` -eq 1 ]; then
echo "ok go {} " `date`
for PID in `pidof mondoarchive afio bzip2 mindi`; do
echo $PID
#renice 1 $PID
#ionice -c 1 -p $PID
kill -s SIGCONT $PID
done
else
echo "busy rest {}" `date`
for PID in `pidof mondoarchive afio bzip2 mindi`; do
echo $PID
kill -s SIGSTOP $PID
done
fi
#set -o posix'
sleep 15
done)



#
# レストア ----------------------------------------------------
#

# バックアップ作業で出来上がったisoファイルから起動

boot: で expert と入力、起動

interactive → DVD と選択

fdiskでパーティションを定義
# alt + → / ← でターミナルを切り替えられるので、別ターミナルにてfdiskコマンドを実行
# fdisk /dev/hda (例
# aで/boot予定パーティションにbootフラグを建てるのを忘れずに
# 拡張予定のあるパーティションは最後に配置
# swapをt : 82でswapに変更しておく
# mdraidやlvm利用時はそれぞれの作成手順を別途行う

# フォーマットを作成(例 以下deviceは適宜読み替えてください
mkfs -t ext3 -j /dev/hda1
mkfs -t ext3 -j /dev/hda5
# swap領域作成
mkswap /dev/hda2


元画面に戻り、mountlist CUI画面で
デバイス/パーティション→マウントレイアウトとファイルシステムを先のfdiskと合わせる
パーティションサイズは0MBでOK

Are you sure you want to save your mountlist and continue?
→ Yesで保存


Do you want to erase and partition your hard drives?
Do you want to format your hard drives?
→ パーティションはfdiskで作成したのでNoでパス


Do you want me to restore all of your data?
→ データはすべて戻すのでYes


Initialize the boot loader?
→ Yes initrdの再作成などは後でまとめて行うため、パスしてもOK

Did you change the mountlist?
→ Yes
Boot device
→ 移行先デバイス名を指定 例) /dev/hda

# /etc/multipath.confはそのままでOK

# fstabは要注意、ここでラベル指定がある場合は
# e2label /dev/hda1 /boot
# のように対応するラベルをデバイスに指定しておく
# また、UUID指定がある場合は後述のchroot作業にて移行先デバイスのUUIDを取得し書き換える

# mtabは以前のデバイスと移行先デバイスが違う場合、該当箇所を修正する
# 例) 以前のマウントポイントと変更されている点を修正
# /dev/md1 / -> /dev/hda5 /
# /dev/scd /boot -> /dev/hda1 /boot

# grub.confはカーネルブートパラメータ中にデバイス名が記載されている場合、移行先デバイス名に修正する。
# ラベル方式の場合はそのまま保存
# 例)
# #boot=/dev/sdc → /dev/hda
# default=0
# timeout=5
# splashimage=(hd0,0)/grub/splash.xpm.gz
# hiddenmenu
# title CentOS (2.6.18-417.el5)
# root (hd0,0)
# kernel /vmlinuz-2.6.18-417.el5 ro root=/dev/md1 rhgb quiet → root=/dev/hda5
# initrd /initrd-2.6.18-417.el5.img


# device.mapはデバイス名が違う箇所を変更
# 例)
# (hd0) /dev/sda → /dev/hda


Label/Identify your ext2 and ext3 paritions if necessary?
→ 一応リラベルしてくれるみたいなのでYes


# 以降、chrootしてブートの調整
# chrootの準備、デバイスやproc, sysなどをバインドします
mkdir /mnt/tgt
mount /dev/hda5 /mnt/tgt
mount /dev/hda1 /mnt/tgt/boot
mount --bind /dev /mnt/tgt/dev
mount --bind /dev/pts /mnt/tgt/dev/pts
mount -t proc none /mnt/tgt/proc
mount --bind /sys /mnt/tgt/sys

# 以下、chrootするので移行ターゲットOSの実際のファイルパスになります
chroot /mnt/tgt /bin/bash

# 先のfstabでUUIDを利用されている場合
# tune2fs -l /dev/hda1 | grep UUID
# として、調べたUUIDをchroot下の/etc/fstabに記載

# initrdを移行先環境に合わせて再構築します
cd /boot
# バックアップ X Y Z NNNはuname -aして出たkernelパラメータを利用、el5などまで記載
mv -i initrd-X.Y.Z-NNN.elN.img initrd-X.Y.Z-NNN.elN.img.bkYYMMDD
# initrd再作成
# 例) mkinitrd initrd-2.6.18-417.el5.img 2.6.18-417.el5
mkinitrd initrd-X.Y.Z-NNN.elN.img X.Y.Z-NNN.elN


# grubを再インストール
cd /boot/grub
# 移行先デバイス名を指定、以下例
grub-install /dev/hda

# chroot抜ける
exit

# ターゲットシステムのマウントを開放
umount -l /mnt/tgt/sys
umount -l /mnt/tgt/proc
umount -l /mnt/tgt/dev/pts
umount -l /mnt/tgt/dev
umount -l /mnt/tgt/boot
umount -l /mnt/tgt


# 再起動
reboot