DAR(Disk ARchive)のインストール

DAR(Disk ARchive)は、ディレクトリツリーとファイルをバックアップするtarコマンドに似たソフトウェアです。
ただし、差分バックアップもできます。


パッケージ版のインストール

1. yumでのインストール

dnfでインストールを行います。
# dnf install --enablerepo=epel dar
※リポジトリの「epel」を利用する方法は、yumのリポジトリの追加登録方法 (CentOS 7)を参照して下さい。



コマンド、オプション

1. 主なオプション

darコマンドの主なオプションを記載します。
※詳細のオプションは、「dar --help」もしくは「man dar」で表示されます。
オプション 内   容
−c, −−create [<path>/]<basename> 作成するバックアップファイルのベースの名前を指定
※<basename>.1.darのように連番でファイルが作成されます。
−x, −−extract [<path>/]<basename> バックアップファイルを復元
※カレントディレクトリに復元されます。
−R, −−fs−root <path> ルートディレクトリを指定
※「-P」、「-g」オプションは相対パスでしか指定できないため、このオプションと組み合わせます。
※また、「-P」、「-g」オプションが指定されていない場合は、ここで指定されたディレクトリ以下が対象となります。
−g, −−go−into <path> バックアップするディレクトリ名を指定
※相対パスで指定します。またワイルドカード指定はできません。
−P, −−prune <path> 除外するディレクトリ名を指定
※相対パスで指定します。
−X, −−exclude <mask> 除外するファイル名のパターン文字列
※ここで指定するパターンに合致する名前のファイルは除外されます。ワイルドカードも使用できます。
−A, −−ref [<path>]/<basename> 差分バックアップを行う場合の参照元のバックアップファイルを指定
−zbzip2[:level] bzip2で圧縮。
圧縮レベルは1~9まで(デフォルトは9)
−z[level] gzipで圧縮。
圧縮レベルは1~9まで(デフォルトは9)
−w ファイルを上書きする場合に警告メッセージを表示しない
−v 詳細な処理経過を画面に表示
-az, --alter=zeroing-negative-dates 一部のシステムは、特定のファイル(1970年より前の日付のファイル)のUnix時間として負の数を返す場合があり、この場合一時停止し日付をゼロと見なすかどうかをユーザーに質問します。
ただし、-azオプションを使用すると、そのような負の日付を自動的にゼロと見なし、そのまま処理を続行します。(警告は表示される。)
※オプションは、バージョンアップによって変更される場合がありますので、「dar --help」等で実行前に確認して下さい。

2. コマンド実行例

(1) フルバックアップの場合
# dar -c backup-full -R / -g etc -g www -zbzip2:9
「/etc」、「/www」ディレクトリをbzip2の圧縮レベル9でバックアップ。作成されるファイル名は、backup-full.1.dar。

(2) 差分バックアップの場合
# dar -c backup-diff -A backup-full -R / -g etc -g www -zbzip2:9
「/etc」、「/www」ディレクトリをbzip2の圧縮レベル9で、「backup-full」を参照して、差分バックアップ。作成されるファイル名は、backup-diff.1.dar。
(3) 復元する場合
# dar -x backup-full
カレントディレクトリに復元される。

# dar -x backup-full
# dar -x backup-diff -wa
差分バックアップがある場合。
※「-wa」を付けると、差分ファイルの上書きの際の確認メッセージが表示されない。

3. 実行時にエラーが発生する場合

実行環境によっては、希にエラーが発生することがあります。
例えば、良く見かけるエラーとしては、共有ライブラリーファイルが見つからないというようなメッセージが表示されることがあります。
dar: error while loading shared libraries: libdar.so.5: cannot open shared object file: No such file or directory

この場合には、2つの対処方法があります。
(a) 環境変数LD_LIBARARY_PATHの設定
環境変数LD_LIBRARY_PATHに「/usr/local/lib」ディレクトリを設定します。
# LD_LIBRARY_PATH=/usr/local/lib
# export LD_LIBRARY_PATH
# dar -c backup-full -R / -g etc -g www -y

(b) インストール時のオプション設定
configureのインストールオプションに「--disable-shared」を加えます。
# cd dar-2.5.x
# ./configure --prefix=/usr/local --disable-shared
# make
# make install

4. DARを利用したバックアップスクリプト(例)

(1) 差分バックアップ
DARを利用した差分バックアップの参考例を掲載します。
バックアップ先 /var/__backup__/daily/backup.0
backup.1~backup.6は世代管理用フォルダ
バックアップ対象 /var/www/html
/var/www/data
フルバックアップファイル名 /var/__backup__/daily/backup-full-html.1.dar
/var/__backup__/daily/backup-full-data.1.dar
差分バックアップファイル名 /var/__backup__/daily/backup.0/backup-full-html.1.dar
/var/__backup__/daily/backup.0/backup-full-data.1.dar
MySQLバックアップ mysqldumpでバックアップ
※ユーザID、パスワードはセキュリティのため、「/root/.mysql_config」ファイルに記述。
ログファイル /var/log以下をバックアップ

#!/bin/bash

#----- backup file save base directory -----
BACKUP_BASE_DIR=/var/__backup__/daily
WWW_BASE_DIR=/var/www
CHECK_BACKUP_FILENAME=apache_log.tar.gz
LOG_DIR=/var/log
BACKUP_MAX_COUNT=7
#-------------------------------------------

cd $BACKUP_BASE_DIR
 
#----- backup file shift directory -----
SEARCH_FILENAME=backup.$(($BACKUP_MAX_COUNT - 1))/$CHECK_BACKUP_FILENAME
if [ -f $SEARCH_FILENAME ]
then
  rm -f backup.$(($BACKUP_MAX_COUNT - 1))/*.*
fi
for (( i=$BACKUP_MAX_COUNT - 2; i>=0; i-- ))
do
  PATH1=$BACKUP_BASE_DIR/backup.$i
  if [ -f $PATH1/$CHECK_BACKUP_FILENAME ]
  then
    PATH2=$BACKUP_BASE_DIR/backup.$(($i + 1))
    mv $PATH1/*.* $PATH2
  fi
done
 
/usr/bin/sleep 2
 
#----- MySQL Backup -----
cd $BACKUP_BASE_DIR/backup.0
 
#----- get serial date value -----
TODAY_DATE_VAL="$(date "+%Y%m%d")"
SERIAL_DATE_VAL="$(date "+%s")"
 
for DBNAME in `ls -p /var/lib/mysql | grep / | tr -d /`
do
  # mysqldump
  if [ "$DBNAME" = 'performance_schema' ]
  then
    /usr/bin/mysqldump --defaults-extra-file=/root/.mysql_config --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
  else
    /usr/bin/mysqldump --defaults-extra-file=/root/.mysql_config --events --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
  fi
done
if [ -f mysql.dump ]
then
 
  #----- compress log files -----
  FILENAME=mysql_dump_${TODAY_DATE_VAL}.tar.gz
  if [ -f $FILENAME ]; then
    TEMP_FILENAME=${FILENAME}.${SERIAL_DATE_VAL}
    mv $FILENAME $TEMP_FILENAME
  fi
  tar cvfz $FILENAME *.dump
  rm -f *.dump
 
fi
 
#----- Log Backup -----
# Apache Log
cd /var/log
tar cvfz $BACKUP_BASE_DIR/backup.0/apache_log.tar.gz httpd
# Log
cd /var
tar cvfz $BACKUP_BASE_DIR/backup.0/var_log.tar.gz log
 
/usr/bin/sleep 2
 
#----- dar Backup -----
cd $BACKUP_BASE_DIR
# [html][data] Directory Backup
#-------------------
# When dar full backup file does not exist
if [ ! -f backup-full-html.1.dar ]
then
  /usr/bin/dar -c backup-full-html -az -R $WWW_BASE_DIR -g html -zbzip2:9
fi
 
/usr/bin/sleep 2
 
if [ ! -f backup-full-data.1.dar ]
then
  /usr/bin/dar -c backup-full-data -az -R $WWW_BASE_DIR -g data -zbzip2:9
fi
 
/usr/bin/sleep 10
 
# Get dar differential backup file
/usr/bin/dar -c backup.0/backup-diff-html -A backup-full-html -az -R $WWW_BASE_DIR -g html -zbzip2:9
/usr/bin/sleep 2
/usr/bin/dar -c backup.0/backup-diff-data -A backup-full-data -az -R $WWW_BASE_DIR -g data -zbzip2:9

(2) フルバックアップ
DARを利用したフルバックアップの参考例を掲載します。
バックアップ先 /var/__backup__/daily/backup.0
backup.1~backup.6は世代管理用フォルダ
バックアップ対象 /var/www/html
/var/www/data
フルバックアップファイル名 /var/__backup__/daily/backup.0/backup-full-html.1.dar
/var/__backup__/daily/backup.0/backup-full-data.1.dar
MySQLバックアップ mysqldumpでバックアップ
※ユーザID、パスワードはセキュリティのため、「/root/.mysql_config」ファイルに記述。
ログファイル /var/log以下をバックアップ

#!/bin/bash

#----- backup file save base directory -----
BACKUP_BASE_DIR=/var/__backup__/daily
WWW_BASE_DIR=/var/www
CHECK_BACKUP_FILENAME=apache_log.tar.gz
LOG_DIR=/var/log
BACKUP_MAX_COUNT=7
#-------------------------------------------

cd $BACKUP_BASE_DIR
 
#----- backup file shift directory -----
SEARCH_FILENAME=backup.$(($BACKUP_MAX_COUNT - 1))/$CHECK_BACKUP_FILENAME
if [ -f $SEARCH_FILENAME ]
then
  rm -f backup.$(($BACKUP_MAX_COUNT - 1))/*.*
fi
for (( i=$BACKUP_MAX_COUNT - 2; i>=0; i-- ))
do
  PATH1=$BACKUP_BASE_DIR/backup.$i
  if [ -f $PATH1/$CHECK_BACKUP_FILENAME ]
  then
    PATH2=$BACKUP_BASE_DIR/backup.$(($i + 1))
    mv $PATH1/*.* $PATH2
  fi
done
 
/usr/bin/sleep 2
 
#----- MySQL Backup -----
cd $BACKUP_BASE_DIR/backup.0
 
#----- get serial date value -----
TODAY_DATE_VAL="$(date "+%Y%m%d")"
SERIAL_DATE_VAL="$(date "+%s")"
 
for DBNAME in `ls -p /var/lib/mysql | grep / | tr -d /`
do
  # mysqldump
  if [ "$DBNAME" = 'performance_schema' ]
  then
    /usr/bin/mysqldump --defaults-extra-file=/root/.mysql_config --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
  else
    /usr/bin/mysqldump --defaults-extra-file=/root/.mysql_config --events --skip-lock-tables --skip-extended-insert $DBNAME > $DBNAME.dump
  fi
done
if [ -f mysql.dump ]
then
 
  #----- compress log files -----
  FILENAME=mysql_dump_${TODAY_DATE_VAL}.tar.gz
  if [ -f $FILENAME ]; then
    TEMP_FILENAME=${FILENAME}.${SERIAL_DATE_VAL}
    mv $FILENAME $TEMP_FILENAME
  fi
  tar cvfz $FILENAME *.dump
  rm -f *.dump
 
fi
 
#----- Log Backup -----
# Apache Log
cd /var/log
tar cvfz $BACKUP_BASE_DIR/backup.0/apache_log.tar.gz httpd
# Log
cd /var
tar cvfz $BACKUP_BASE_DIR/backup.0/var_log.tar.gz log
 
/usr/bin/sleep 2
 
#----- dar Backup -----
cd $BACKUP_BASE_DIR/backup.0
# [html][data] Directory Backup
#-------------------
/usr/bin/dar -c backup-full-html -az -R $WWW_BASE_DIR -g html -zbzip2:9
 
/usr/bin/sleep 2
 
/usr/bin/dar -c backup-full-data -az -R $WWW_BASE_DIR -g data -zbzip2:9



最終更新:2024年02月29日 14:44