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ファイルから起動
interactive → DVD と選択
# or もっと細かい作業を行う場合はboot: expertで起動


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


必要であればフォーマット(例 以下deviceは適宜読み替えてください
# 通常次のステップのmountlist CUIからフォーマットとスワップ作成はしてもらえるのでスキップ
#mkfs -t ext3 -j /dev/hda1
#mkfs -t ext3 -j /dev/hda5
## swap領域作成
#mkswap /dev/hda2


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

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

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

Do you want to format your hard drives?
→ 自分でやってなければYesでフォーマット

Do you want me to restore all of your data?
→ データはすべて戻すのでYes
# kvmなどにインストールする場合、isoが複数に渡る場合は都度 umount /mnt/cdrom してからCDの切断と接続を行う

Initialize the boot loader?
→ No initrdの再作成などは後でまとめて行うためパス
# mondorescue標準の手順だとデバイスやUUIDが変わっている場合起動できないケースが多いので以下手作業


# alt + →キーでコンソール画面に移動
# 以降、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の変更
#

cd /etc
cp -pi fstab fstab.orig[YYMMDD]
# YYMMDDは日付など適宜

vi fstab
>>> # 以下例
#
# ここでマウントポイントがUUID指定されている場合、blkidコマンドなどでUUIDを調べ、新しいUUIDに書き換える
# (tune2fs -l /dev/hda1 | grep UUID などでもよいがswapが表示できなかった)
# ラベル指定がある場合は e2label /dev/hda1 /boot のように対応するラベルをデバイスに指定しておく
#
UUID=b2a4aa95-b5bd-4a65-a8cb-565c016f6195 / ext4 defaults 1 1
UUID=40c7b758-bb8f-4dff-8dad-5bc5a4fa2b95 /boot ext4 defaults 1 2
UUID=afef20ee-9972-44c1-8bad-15ca7ff41681 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
<<<


#
# mtabの変更
# mtabは以前のデバイスと移行先デバイスが違う場合、該当箇所を修正する
#

cp -pi mtab mtab.origYYMMDD
vi mtab
>>> # 以下例
#
# デバイス名などが変わっている場合書き換えておく
# 例) 以前のマウントポイントと変更されている点を修正
# /dev/md1 / -> /dev/vda3 /
# /dev/scd1 /boot -> /dev/vda1 /boot
#
/dev/vda3 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/vda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
<<<

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


#
# grub.confの修正
#

cd /boot/grub
cp -pi grub.conf grub.conf.origYYMMDD

vi grub.conf
>>> # 以下例
#
# 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
#
# また、rootをUUID指定されている場合、fstabの/のマウントポイントのUUIDに置換する
# 例)
# title CentOS (2.6.32-754.6.3.el6.x86_64)
# root (hd0,0)
# kernel /vmlinuz-2.6.32-754.6.3.el6.x86_64 ro root=UUID=b2a4aa95-b5bd-4a65-a8cb-565c016f6195 rd_NO_LUKS rd_NO_MD crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
# initrd /initramfs-2.6.32-754.6.3.el6.x86_64.img
#
<<<

併せてdevice.mapはデバイス名が違う箇所を変更
cp -pi device.map device.map.origYYMMDD
vi device.map
>>>
# 例)
# (hd0) /dev/sda → /dev/hda
<<<


#
# initrd or initramfsを移行先環境に合わせて再構築します
# grub.confのカーネルイメージがinitramfsの場合、dracutをオプション無しで実行することで現在の最新のkernelに合わせたinitramfsを作成し直してくれる模様。
#

cd /boot

# initrdの場合 -----
# backup
mv -i initrd-X.Y.Z-NNN.elN.img initrd-X.Y.Z-NNN.elN.img.bkYYMMDD

# initrd再作成
# 基本 uname -a して出たkernelパラメータを利用すればOK
# 例) 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

# initramfsの場合 -----
# backup
mv -i initramfs-X.Y.Z-NNN.A.B.elV.ARCH.img initramfs-X.Y.Z-NNN.A.B.elV.ARCH.img.bkYYMMDD
# 再作成
dracut


#
# grubを再インストール
#

cd /boot/grub
# 移行先デバイス名を指定、以下/dev/vdaがインストール先diskの場合
grub-install /dev/vda

# 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


# 以降は変更が加わる質問にはNoとしてrebootすればOK
# rebootがうまくかからない場合はリセットが必要かもしれない

Did you change the mountlist?
→ No 自分で調整したので維持

Label/Identify your ext2 and ext3 paritions if necessary?
→ No 自分で調整したので維持


# 再起動
reboot