darによるバックアップ(フル・差分)

サーバーを使っているうちに段々とデータ量が多くなってきたので、
そろそろ差分バックアップをしたくなってきたので、今回はdarを使ってみました。

まずはdarをインストールします。
Fedoraのリポジトリーですが、CentOSでも問題ないです

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
rpm -ivh epel-release-5-2.noarch.rpm
yum install -y dar

続いてバックアップのコマンドです

dar -c バックアップ先のパスとファイル名 -R バックアップ対象

となるので、「/home/backup」に「full-backup」という名前で「/etc」のバックアップを取得すると

dar -c /home/backup/full-backup -R /etc

となり、生成されるデータは「full-backup.1.dar」と後に「1.dar」が付いたものができます。

差分バックアップは、これにフルバックアップのファイル指定があるので
今度は差分ファイルを「part-backup」として取得してみます。

dar -c /home/backup/part-backup -R /etc -A /etc/backup/full-backup
#full-backup.1.darではWarningが出るので、full-backupにするのがポイント

これで取得したバックアップデータは、簡単に復元できます

dar -x /backup/full-backup.1.dar

続いて、これをシェルで作成して定時バックアップとして仕込みたいと思います。
内容:毎日差分バックアップ(前日の物を削除)、毎週月曜日にフルバックアップ(1週間前の物を削除)
このサイトを参考にしました

#!/bin/sh

DIR=/root/Desktop/backup

case X”$1″ in
  “X-f”)
  BASENAME=`date -I`-full
  dar -c $DIR/$BASENAME-home -R /home
  dar -c $DIR/$BASENAME-etc -R /etc
  dar -c $DIR/$BASENAME-html -R /var
  dar -c $DIR/$BASENAME-usr -R /usr
  LASTDAY=`date -I –date ‘7 day ago’`
  rm $DIR/$LASTDAY-full*
  ;;
  “X-p”)
  BASENAME=`date -I`-part
  FULLHOMENAME=`ls /root/Desktop/backup/*.dar | grep full-home | tail -n1 | awk -F ‘.’ ‘{print $1;}’`
  FULLETCNAME=`ls /root/Desktop/backup/*.dar | grep full-etc | tail -n1 | awk -F ‘.’ ‘{print $1;}’`
  FULLHTMLNAME=`ls /root/Desktop/backup/*.dar | grep full-html | tail -n1 | awk -F ‘.’ ‘{print $1;}’`
  FULLUSRNAME=`ls /root/Desktop/backup/*.dar | grep full-usr | tail -n1 | awk -F ‘.’ ‘{print $1;}’`
  echo home-backup
  dar -c $DIR/$BASENAME-home -R /home -A $FULLHOMENAME
  echo etc-backup
  dar -c $DIR/$BASENAME-etc -R /etc -A $FULLETCNAME
  echo html-backup
  dar -c $DIR/$BASENAME-html -R /var -A $FULLHTMLNAME
  echo usr-backup
  dar -c $DIR/$BASENAME-usr -R /usr -A $FULLUSRNAME
  YESTERDAY=`date -I –date ‘1 day ago’`
  rm $DIR/$YESTERDAY-part*
  ;;
esac

cronへの登録はこんな感じで

0 2 * * * /root/Desktop/backup/backup.sh -p
0 5 * * 1 /root/Desktop/backup/backup.sh -f

もっとシェルがわかれば、フルバックアップの日に差分バックアップをしないで済む処理が
書けるのですが、まだよくわからないので妥協してみました

カテゴリー: Linux パーマリンク