Text Size
   

DAT へバックアップ

dump を使って、DAT にバックアップするためのcshスクリプト。 Red Hat Enterprise Linux ES release 4 ならびに CentOS5.2 で検証済み。 /boot / /home /var の4つのディスクスライスのバックアップを前提としています。
#!/bin/csh
#####################################
##### Single User Mode 起動確認 #####
#####################################
set WORKDIR = "/usr/local/backup"  ##### 作業ディレクトリを指定
echo "This script is for backup."
echo "Are you starting Single User Mode? (y/n) ?"
set yes = $<
if ( "$yes" == "y" || "$yes" == "Y" || "$yes" == "yes" || "$yes" == "YES" ) then

    if ( -d $WORKDIR ) then
        echo "$WORKDIR exists and next..."
    else
        mkdir $WORKDIR
        echo "made $WORKDIR and next..."
    endif
##################################
##### ディスク情報を調べる   #####
##### df -k                  #####
##### テープデバイスを調べる #####
##### cat /proc/scsi/scsi    #####
##### ls -l /dev/*st[0-9]    #####
##################################
set LOG = "$WORKDIR/backup.log"  ##### ログファイルを指定
set array = ( /boot / /home /var )         ##### バックアップするディスクスライスを指定
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
###################################################
###### ディスクスライス情報をログに書き込む。######
###################################################
echo "============================================================" |& tee -a $LOG
df -k >>$LOG
echo "------------------------------------------------------------" |& tee -a $LOG
cat /etc/fstab |& tee -a $LOG
echo "------------------------------------------------------------" |& tee -a $LOG
fdisk -l |& tee -a $LOG
echo "------------------------------------------------------------" |& tee -a $LOG
sfdisk -d /dev/sda > $WORKDIR/sda.out |& tee -a $LOG
###########################
#### バックアップ開始 #####
###########################
foreach FSYSTEM (`echo $array`)
    echo "------------------------------------------------------------" |& tee -a $LOG
    echo "$FSYSTEM" |& tee -a $LOG
    echo "START TIME: `date`" |& tee -a $LOG
    echo "------------------------------------------------------------" |& tee -a $LOG
    dump 0uf $DEV $FSYSTEM |& tee -a $LOG
    set RET = $status
    echo "------------------------------------------------------------" |& tee -a $LOG
    echo "END TIME: `date`" |& tee -a $LOG
    echo "------------------------------------------------------------" |& tee -a $LOG
    echo "" |& tee -a $LOG
    if ( $RET != 0 ) then
        echo "Error: Backup Failed \!\!\! ErrorCode = ${RET} " |& tee -a $LOG
    endif
  sleep 10
end
####################################
##### バックアップが終わったら #####
####################################
  if ( $RET != 0 ) then
    echo "Error: Server Backup Failed\!\! `date`" |& tee -a $LOG
    echo "============================================================" |& tee -a $LOG
    echo "" |& tee -a $LOG
    echo "" |& tee -a $LOG
    mt -f $DEV offline |& tee -a $LOG
  else
    echo "Server Backup Success\!\! `date`" |& tee -a $LOG
    echo "============================================================" |& tee -a $LOG
    echo "" |& tee -a $LOG
    echo "" |& tee -a $LOG
    mt -f $DEV offline |& tee -a $LOG
  endif
##### Single User Mode 起動確認 else
else
    echo "Before use this Program, start Single User Mode."
    exit
endif
exit