【backup】ローカルのコンテンツをバックアップする

先日、珠玉のエロ画像たちがなくなりかけて軽くショックだった (っ´∀`)っ ゃー ですこんばんは。珠玉のエロ画像だけじゃなくて、やはりバックアップは大事なのです。というわけで、作業ミスなどでうっかりファイルやディレクトリを消してしまっても大丈夫なように、ローカルにバックアップをとることにしました。サーバ全体のバックアップはまた別のお話ということで、まずはバックアップ対象を3世代ぶん、tar.gzで固めることにしました。

作業ミスなどでうっかりファイルやディレクトリを消してしまっても大丈夫なように、ローカルにバックアップをとることにしました。サーバ全体のバックアップはまた別のお話ということで、まずはバックアップ対象を3世代ぶん、tar.gzで固めることにしました。

■■ 設計思想

・ バックアップ対象は、/home、/etc、/rootの3ディレクトリ
・ ただし、sambaで共有している領域は時間がかかるので除外する
(/home/shared がsambaで共有している領域)
・ また、バックアップディレクトリも対象から除外

■■ バックアップスクリプト記述

■ まずはスクリプトを置くディレクトリを作成

[root@intra1 ~]# mkdir -p bin/backup_pg
[root@intra1 ~]# cd bin/backup_pg

■ スクリプト記述

[root@intra1 backup_pg]# touch local_backup.sh
[root@intra1 backup_pg]# chmod 755 local_backup.sh
[root@intra1 backup_pg]# vi local_backup.sh
#!/bin/sh
# backup2local for home root etc.
BACKUPDIR=/home/backup/intra1
### バックアップディレクトリが存在しなかったら作成する
if test -d $BACKUPDIR/'(home|etc|root)'
    then
        :
    else
        mkdir -p $BACKUPDIR/{home,etc,root}
fi
### /homeディレクトリのうち、sharedとbackup以外を日付で3世代バックアップする.
### もし、4日前のファイル名のものがあったら削除する.
echo
echo "--------------------------------------------------------------------------------"
echo "/home backup"
echo
cd /home
for target_home in `ls /home|egrep -v '(shared|backup)'`
do
    #変数の後の「_」はエスケープしてやらないとだめ
    tar cvzf $BACKUPDIR/home/$target_home'_'`date +%Y%m%d`.tar.gz $target_home
    chown shasta. $BACKUPDIR/home/$target_home'_'`date +%Y%m%d`.tar.gz
    if test -f $BACKUPDIR/home/$target_home'_'`date +%Y%m%d -d '3day ago'`.tar.gz
        then
        rm -f $BACKUPDIR/home/$target_home'_'`date +%Y%m%d -d '3day ago'`.tar.gz
    fi
done
### /etcディレクトリを日付で3世代バックアップする.
### もし、4日前のファイル名のものがあったら削除する.
echo
echo "--------------------------------------------------------------------------------"
echo "/etc backup"
echo
cd /etc
    tar cvzf $BACKUPDIR/etc/etc_`date +%Y%m%d`.tar.gz .
    chown root. $BACKUPDIR/etc/etc_`date +%Y%m%d`.tar.gz
    chmod 600 $BACKUPDIR/etc/etc_`date +%Y%m%d`.tar.gz
    if test -f $BACKUPDIR/etc/etc_`date +%Y%m%d -d '3day ago'`.tar.gz
        then
        rm -f $BACKUPDIR/etc/etc_`date +%Y%m%d -d '3day ago'`.tar.gz
    fi
### /rootィレクトリを日付で3世代バックアップする.
### もし、4日前のファイル名のものがあったら削除する.
echo
echo "--------------------------------------------------------------------------------"
echo "/root backup"
echo
cd /root
    tar cvzf $BACKUPDIR/root/root_`date +%Y%m%d`.tar.gz .
    chown root. $BACKUPDIR/root/root_`date +%Y%m%d`.tar.gz
    chmod 600 $BACKUPDIR/root/root_`date +%Y%m%d`.tar.gz
    if test -f $BACKUPDIR/root/root_`date +%Y%m%d -d '3day ago'`.tar.gz
        then
        rm -f $BACKUPDIR/root/root_`date +%Y%m%d -d '3day ago'`.tar.gz
    fi

ここまでできたら保存します。

■■ cronに自動実行登録

■ 毎朝5時に自動実行するように登録する

[root@intra1 backup_pg]# cd /etc/cron.d
[root@intra1 cron.d]# vi local_backup
00 05 * * * root /root/bin/backup_pg/local_backup.sh | mail -s "[$HOSTNAME] `date` local_backup" root

以上で終了です。

ね、簡単でしょ?