Text Size
   

DAT からリストア

"dump を使ったバックアップ"で取得したバックアップからリストアするcshスクリプト。 /boot / /home /var の4つのディスクスライスのリストアを前提とし、リストア用のパーティションは作成が済んでいることを前提としています。レスキューディスクから、linux rescue で起動してから実行します。
#!/bin/csh
######################################################
##### パーティション作成は事前に完了しておくこと #####
######################################################
set WORKDIR = "/usr/local/backup"  ##### 作業ディレクトリを指定
mkdir /usr/local/backup
echo "This script is for restore."
echo "Did you make partition for restore (y/n) ?"
set yes = $<
if ( "$yes" == "y" || "$yes" == "Y" || "$yes" == "yes" || "$yes" == "YES" ) then
####################################################
##### パーティションをフォーマット・ラベル作成 #####
####################################################
mkfs.ext3 /dev/sda1
mkfs.ext3 /dev/sda2
mkfs.ext3 /dev/sda3
mkfs.ext3 /dev/sda7
e2label /dev/sda1 /boot1
e2label /dev/sda2 /1
e2label /dev/sda3 /home
e2label /dev/sda7 /var
mkswap -L SWAP-sda6 /dev/sda6
##################################
##### 作業用ディレクトリ作成 #####
##################################
mkdir /mnt/boot
mkdir /mnt/root
mkdir /mnt/home
mkdir /mnt/var
######################################
##### ディスク情報を調べるには   #####
##### df -k                      #####
##### テープデバイスを調べるには #####
##### cat /proc/scsi/scsi        #####
##### ls -l /dev/*st[0-9]        #####
######################################
set LOG = "$WORKDIR/restore.log" ##### ログファイルを指定
set DEV = "/dev/nst0"                     ##### nst0 は巻き戻ししない方式
set TAPESTATUSLOG = "$WORKDIR/tapestatus.log" 
#######################################################
##### テープが挿入されているかどうかチェックする。#####
#######################################################
echo "============================================================" |& tee -a $LOG
echo "Tape check: `date`" |&tee -a $LOG
echo "------------------------------------------------------------" |& tee -a $LOG
mt -f $DEV status   |& tee $TAPESTATUSLOG
grep -R "BOT ONLINE" $TAPESTATUSLOG
set MTRET = $status
if ( $MTRET != 0 ) then
    echo "Error: Tape not found \!\! ErrorCode = ${MTRET}" |& tee -a $LOG
echo "============================================================" |& tee -a $LOG
    exit 0
endif
############################################################
##### テープが挿入されていなかったらプログラムを終了。######
############################################################

############################################################
##### Tape block size が 512 以外だったら 512 にセット #####
############################################################
grep -R "Tape block size 512 bytes" $TAPESTATUSLOG
set TAPERET = $status
if ( $TAPERET != 0 ) then
    mt -f $DEV setblk 512 |&tee -a $LOG
endif
###################################################
##### テープを巻き戻してテープのたるみを取る。#####
###################################################
mt -f $DEV rewind |& tee -a $LOG
#########################################################
###### File number=0 /boot のリストア File number=0 #####
#########################################################
echo "------------------------------------------------------------" |& tee -a $LOG
echo "restore /boot" |& tee -a $LOG
mount -t ext3 /dev/sda1 /mnt/boot |&tee -a $LOG
cd /mnt/boot |&tee -a $LOG
grep -R "File number=0" $TAPESTATUSLOG
set TAPERET = $status
if ( $TAPERET != 0 ) then
    exit
endif
restore rf $DEV |&tee -a $LOG
    if ( $RET != 0 ) then
        echo "Error: Restore Failed \!\!\! ErrorCode = ${RET} " |& tee -a $LOG
    endif
 sleep 5
cd /
umount /mnt/boot
echo "------------------------------------------------------------" |& tee -a $LOG
#########################################################
###### File number=1 /root のリストア File number=1 #####
#########################################################
echo "------------------------------------------------------------" |& tee -a $LOG
echo "restore /root" |& tee -a $LOG
mount -t ext3 /dev/sda2 /mnt/root |&tee -a $LOG
cd /mnt/root |&tee -a $LOG
mt -f $DEV status |& tee $TAPESTATUSLOG
grep -R "File number=1" $TAPESTATUSLOG
set MTRET = $status
if ( $MTRET != 0 ) then
    mt -f $DEV asf 1 |&tee -a $LOG
endif	
	mt -f $DEV status |& tee $TAPESTATUSLOG
	grep -R "File number=1" $TAPESTATUSLOG
	set MTRET = $status
	if ( $MTRET != 0 ) then
    	exit
	endif
restore rf $DEV |&tee -a $LOG	
    if ( $RET != 0 ) then	
        echo "Error: Restore Failed \!\!\! ErrorCode = ${RET} " |& tee -a $LOG	
    endif	
 sleep 5	
cd /	
umount /mnt/root	
echo "------------------------------------------------------------" |& tee -a $LOG
#########################################################
###### File number=2 /fd のリストア File number=2 #####
#########################################################
echo "------------------------------------------------------------" |& tee -a $LOG
echo "restore /home" |& tee -a $LOG
mount -t ext3 /dev/sda3 /mnt/home |&tee -a $LOG
cd /mnt/fd |&tee -a $LOG
mt -f $DEV status |& tee $TAPESTATUSLOG
grep -R "File number=2" $TAPESTATUSLOG
set MTRET = $status
if ( $MTRET != 0 ) then
    mt -f $DEV asf 2 |&tee -a $LOG
endif
	mt -f $DEV status |& tee $TAPESTATUSLOG
	grep -R "File number=2" $TAPESTATUSLOG
	set MTRET = $status
	if ( $MTRET != 0 ) then
    	exit
	endif
restore rf $DEV |&tee -a $LOG	
    if ( $RET != 0 ) then	
        echo "Error: Restore Failed \!\!\! ErrorCode = ${RET} " |& tee -a $LOG	
    endif	
 sleep 5	
cd /	
umount /mnt/home	
echo "------------------------------------------------------------" |& tee -a $LOG	
#########################################################	
###### File number=3 /var のリストア File number=3 #####	
#########################################################	
echo "------------------------------------------------------------" |& tee -a $LOG	
echo "restore /var" |& tee -a $LOG	
mount -t ext3 /dev/sda7 /mnt/var |&tee -a $LOG	
cd /mnt/work |&tee -a $LOG	
mt -f $DEV status |& tee $TAPESTATUSLOG	
grep -R "File number=3" $TAPESTATUSLOG	
set MTRET = $status	
if ( $MTRET != 0 ) then	
    mt -f $DEV asf 3 |&tee -a $LOG	
endif	
	mt -f $DEV status |& tee $TAPESTATUSLOG
	grep -R "File number=3" $TAPESTATUSLOG
	set MTRET = $status
	if ( $MTRET != 0 ) then
    	exit
	endif
restore rf $DEV |&tee -a $LOG	
    if ( $RET != 0 ) then	
        echo "Error: Restore Failed \!\!\! ErrorCode = ${RET} " |& tee -a $LOG	
    endif	
 sleep 5	
cd /	
umount /mnt/var	
echo "------------------------------------------------------------" |& tee -a $LOG	
################################	
##### リストアが終わったら #####	
################################	
echo "remove restoresymtable" |& -a $LOG
echo "Server Restore Finished\!\! `date`" |& tee -a $LOG
echo "============================================================" |& tee -a $LOG
echo "" |& tee -a $LOG
echo "" |& tee -a $LOG
mt -f $DEV offline |& tee -a $LOG
##### リストア用パーティション作成確認 else
else
    echo "Make partition before restore."
    echo "sfdisk で /dev/sda のパーティションテーブルを作成してある場合は、"
    echo "sfdisk /dev/sda < sda.out でパーティション作成ができます。"
  exit
endif
exit