システムリストアは最初の方でも書いたとおり、OSインストールメディアからブートして、レスキューモードで作業を行うことを想定している。
その中で、スクリプトで対応できる部分はスクリプト化してしまう。
3本のスクリプトと、それを束ねる親スクリプトの合計4本だ。
一つずつ作ってテストというわけには行かないので、全部一気に作ってしまおう。
(例によって、sudo su -をお忘れなく)
# cd
# cd backup/bin
# vi 1010_disk_rebuild
--ココから--
#!/bin/sh
BINDIR=`dirname $0`
ETCDIR=${BINDIR}/../etc
. ${ETCDIR}/config
for ROOTPV in ${ROOTPVS}
do
sfdisk /dev/${ROOTPV} < ${BINDIR}/../config/sfdisk.${ROOTPV}
done
while read i j k
do
eval $i
eval $j
eval $k
pvcreate --uuid=${LVM2_PV_UUID} --norestorefile ${LVM2_PV_NAME}
done < ${BINDIR}/../config/vgs.pvid
vgcfgrestore -f ${BINDIR}/../config/vgcfgbackup.${ROOTVG} ${ROOTVG}
vgchange -a y ${ROOTVG}
--ココまで--
# vi 1020_create_filesystem
--ココから--
#!/bin/sh
BINDIR=`dirname $0`
ETCDIR=${BINDIR}/../etc
. ${ETCDIR}/config
# Get Filesystem Metadata
for FSCONFIG in ${ETCDIR}/fsconfig/*
do
TYPE=""
UUID=""
LABEL=""
DEVNAME=""
. ${FSCONFIG}
. ${BINDIR}/../config/blkid/${VOLNAME}
if [ x${TYPE} = "xext2" \
-o x${TYPE} = "xext3" \
-o x${TYPE} = "xext4" ]
then
mkfs.${TYPE} -U ${UUID} ${DEVNAME}
elif [ x${TYPE} = "xvfat" ]
then
mkfs.fat ${DEVNAME}
if [ x${LABEL} != "x" ]
then
fatlabel ${DEVNAME} ${LABEL}
fi
elif [ x${TYPE} = "xswap" ]
then
mkswap ${DEVNAME}
fi
done
--ココまで--
# vi 1030_data_restore
--ココから--
#!/bin/sh
BINDIR=`dirname $0`
ETCDIR=${BINDIR}/../etc
. ${ETCDIR}/config
# File Restore Start
for FSCONFIG in ${ETCDIR}/fsconfig/*
do
VOLNAME=""
. ${FSCONFIG}
. ${BINDIR}/../config/blkid/${VOLNAME}
if [ x${TYPE} != "xswap" ]
then
mount -o rw ${DEVNAME} ${BINDIR}/../snapshot
tar -xj \
-f ${BINDIR}/../archive/${VOLNAME}.tbz \
-C ${BINDIR}/../snapshot
umount ${BINDIR}/../snapshot
fi
done
--ココまで--
# vi 1000_restore
--ココから--
#!/bin/sh
BINDIR=`dirname $0`
cd ${BINDIR}
BINDIR=`pwd`
${BINDIR}/1010_disk_rebuild
${BINDIR}/1020_create_filesystem
${BINDIR}/1030_data_restore
--ココまで--
全部、実行パーミッションを付与しておこう。
# chmod +x 1000_restore
# chmod +x 1010_disk_rebuild
# chmod +x 1020_create_filesystem
# chmod +x 1030_data_restore
中身については、特に大きな解説は不要だろう。
1010でディスクパーティション情報を書き戻し、さらにLVM PV情報と、LVM VG情報の書き戻しを行っている。
1020で、swap領域を含めてファイルシステムの再作成を行っている。
1030で、アーカイブファイルを各ファイルシステムに書き戻す、とまぁこんな具合だ。
本当なら、1010はもう少し細かく分割しておくべきだったかもしれない。
次回はこれを使って、リストアを行おう。
リストアを行う前に、これまでの手順どおりにバックアップを取っておくように。
ではまた次回。