backup sh

データのバックアップを外付けUSBへ作成

**************************************

バックアップスクリプト作成

[root@falcon21 ~]# vi data-backup.sh

#!/bin/bash
#
# ローカル内でバックアップ
#
LANG=C
#
# 設定開始
#
# バックアップ対象リスト名
# ※バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/data-backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && exit 1

# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/data-backupnolist

# バックアップ先ディレクトリ名
#BACKUPDIR=/backup
BACKUPDIR=/media/usb/backup
mkdir -p $BACKUPDIR

# バックアップ保存世代数
# ※当日分を含めた過去分バックアップを保存する世代数
# ※過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=5

# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''

# バックアップログファイル名
BACKUPLOG=/var/log/data-backup.log

#
# 設定終了
#

# バックアップ先ディレクトリをバックアップ対象外リストに追加
# ※バックアップ先ディレクトリをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo $BACKUPDIR >> $TMPBACKUPNOLIST

# 前回バックアップをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls data-backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi

# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# バックアップ実行
echo "`date` data-backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/data-backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1
[ $? -ne 0 ] && cat $BACKUPLOG | mail -s "BACKUP NG" root && exit 1
echo "`date` data-backup end" >> $BACKUPLOG

# バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/data-backup.tar.bz2 > /dev/null 2>&1
    [ $? -ne 0 ] && cat $BACKUPLOG | mail -s "BACKUP NG" root && exit 1
    rm -f $BACKUPDIR/data-backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls /media/usb/backup/data-backup.tar.bz2|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls /medi/usb/backup/data-backup.tar.bz2|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR|tail -n $OLDBACKUPCNT`
    do
        rm -f $BACKUPDIR/$file
    done
fi

# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST

[root@falcon21 ~]# chmod 700 data-backup.sh

バックアップ対象リスト作成
[root@falcon21 ~]# echo "/home" >> backuplist
[root@falcon21 ~]# echo "/root" >> backuplist
[root@falcon21 ~]# echo "/var/www" >> backuplist
[root@falcon21 ~]# echo "/var/lib/mysql" >>backuplist


--------------
バックアップ対象外リスト作成
[root@falcon21 ~]# echo "/var/www/error" >> backupnolist
[root@falcon21 ~]# echo "/var/www/icons" >> backupnolist
[root@falcon21 ~]# echo "/var/www/manual" >> backupnolis


バックアップスクリプト確認
[root@falcon21 ~]# ./data-backup.sh
しばらく、かなり、時間がかかる。

--------------------
バックアップ内容確認 (解凍ではない。)
[root@falcon21 ~]# tar tjvf /media/usb/backup/backup.tar.bz2



--------------------
バックアップ定期自動実行設定
[root@falcon21 ~]# echo "0 3 * * * /root/data-backup.sh" > /etc/cron.d/backup


*******************************************

/home ディレクトリの復元例
[root@falcon21 ~]# tar jxvfP /media/usb/backup/data-backup.tar.bz2 / /home


----------------------

1つのファイルのみを復元したい場合は、

# tar tjvf /media/usb/backup/data-backup.tar.bz2 | more

で確認したファイルを元のパスに指定して実行


 

投票数:4 平均点:10.00

 
Back to Top