DAR でシステムのバックアップ
サーバの構築を一通り終えると、システムのバックアップが必要になります。
バックアップの目的は言うまでもなく、ファイルの消失やディスクの故障・トラブルに備えることです。
このページでは DAR (Disk ARchive) というソフトウェアを使い、
効率よくシステムのバックアップを行う方法をご紹介いたします。
このページでは対象OSをCentOS4.4として動作確認をしています。
当サイト内の「ファイルの自動バックアップ」でも自動的にファイルのバックアップを取る方法を紹介しておりますが、
こちらは単純にフルバックアップするだけのものになっています。
ページ内コンテンツ一覧
バックアップには大きく分けて3つの方法があります。
この項目ではそれらを簡単に説明いたします。
バックアップには
大まかな違いを下表に示します。
バックアップの種類と特徴
フルバックアップ | 増分バックアップ | 差分バックアップ | |
特徴 | 対象ファイル・ディレクトリの全てをバックアップする基本的な方法。 | 直前の「フル」または「増分」バックアップから、変更された部分のみをバックアップする。 | 前回の「フル」または「増分」バックアップ以後に変更されたすべてのファイルをバックアップする。 |
メリット | まるごとバックアップするので、1回の作業で復元が可能。 | コンパクトにバックアップが取れる。 | ファイルごとバックアップするので、復元作業が楽。 |
デメリット | まるごとバックアップするので時間、容量共に大きくなる。 | 元になる「フル」または「増分」バックアップに対して、順に復元して行くので、復元時の作業が複雑になる。 | 元になる「フル」または「増分」バックアップから時間が経つほど時間、容量がかかる。 |
このページではフルバックアップと差分バックアップを取り扱います。
rpmfind.net などでDARのパッケージを探します。
yum や apt-get で探しても構いません。
# wget ftp://rpmfind.net/linux/sourceforge/d/da/dar/dar-2.1.2-1.i386.rpm
# yum install dar-2.1.2-1.i386.rpm
■ インストール時にエラーや警告が表示される場合
とか警告: dar-2.1.2-1.i386.rpm: V3 DSA signature: NOKEY, key ID 1ac70ce6 1:dar 警告: user mockbuild does not exist - using root
Package dar-2.1.2-1.i386.rpm is not signed
こんなカンジの警告がでる場合、その場しのぎにはなりますが以下の方法で警告を回避します。
# vi /etc/yum.conf
----------------------
gpgcheck=1
↓
gpgcheck=0 <-- gpgcheck の値を「1」から「0」に変更
----------------------
で上書き保存し、再度インストールを試みます。
インストールは以上です。
これで DAR が利用可能になりました。
テスト用に以下のディレクトリ構成で説明いたします。
test/
├ hoge
├ hogehoge
└ foo
「test」はディレクトリです。「hoge」「hogehoge」「foo」はファイルです。
それでは早速フルバックアップを取ってみましょう。
以下の dar コマンドでバックアップを取ります。
test ディレクトリ以下をフルバックアップする。
下記コマンドは、 /home/user/test 以下を /backup/test_full という名でフルバックアップする、という意味になっています。
# dar -c /backup/test-full -R /home/user -g test
↓ 実行結果が表示されます。
--------------------------------------------
4 inode(s) saved
with 0 hard link(s) recorded
0 inode(s) not saved (no file change)
0 inode(s) failed to save (filesystem error)
32 files(s) ignored (excluded by filters)
0 files(s) recorded as deleted from reference backup
--------------------------------------------
--------------------------------------------
Total number of file considered: 36
上記、dar コマンドの引数の意味は以下の通りです。
-c (この例だと/backup/test_full )で指定したバックアップファイル(ファイル名は「test-full.1.dar」になっている)が生成されていることを確認します。
フルバックアップの次は差分バックアップを取ってみます。
/test/hogehoge を削除し、foofooを追加します。
test/
├ hoge
├ hogehoge 削除
├ foofoo 追加
└ foo
以下のコマンドで差分バックアップを取ります。
下記コマンドは、 /home/user/test 以下を /backup/test_full というバックアップファイルの差分を /backup/test-diff という名でバックアップする、という意味になっています。
# dar -c /backup/test-diff -A /backup/test-full -R /home/user -g test
↓ 実行結果が表示されます。
--------------------------------------------
2 inode(s) saved
with 0 hard link(s) recorded
3 inode(s) not saved (no file change)
0 inode(s) failed to save (filesystem error)
32 files(s) ignored (excluded by filters)
0 files(s) recorded as deleted from reference backup
--------------------------------------------
--------------------------------------------
Total number of file considered: 37
上記、dar コマンドの引数の意味は以下の通りです。
-A (この例だと/backup/test-diff )で指定した差分バックアップファイル(ファイル名は「test-diff.1.dar」になっている)が生成されていることを確認します。
フルバックアップ / 差分バックアップが出来たところで、次は復元をしてみましょう。
復元は復元のコマンドを実行した時にいるカレントディレクトリに展開されます。
復元には dar コマンドに「 -x 」オプションを付け、バックアップファイルを指定してやればオッケーです。
# dar -x /backup/test-full.1.dar
foofooがなくなり、hogehogeが復元されます。
つまり、一番最初の状態に戻ります。
お次は差分ファイルを復元します。
復元方法はフルバックアップの時と同様です。
# dar -x /backup/test-diff.1.dar
hogehogeがなくなり、foofooが復元されます。
つまり最後の状態に戻ります。
ここまでの項目でフルバックアップ、差分バックアップ、そして復元までが可能になりました。
バックアップのコマンドを定期的に手動で実行するのはしんどいので、
本格的に運用する場合は dar コマンドを記述したスクリプトを書いて、それをCronに登録し定期的にバックアップを実施します。
バックアップのルールはお好みで構いませんが、今回は以下の仕様にしたいと思います。
これらを踏まえた上で、以下の様なバックアップスクリプトを作成します。
その際、以下のサイトを参考にさせて頂きました。感謝です。
darでバックアップ
DARで賢くバックアップ
以下の記述を /usr/local/backup.sh などに保存します。
#!/bin/sh DIR=/backup TARGET="etc home var root usr/local usr/src" OPTIONS="-z -Z "*.gz" -Z "*.bz2" -R /" DELAFTER=1 case X"$1" in "X-f") BASENAME=`date -I`-full dar -c $DIR/$BASENAME $TARGET $OPTIONS > /dev/null ;; "X-d") FULLBKUP=`ls $DIR/*.dar | grep full | tail -n1 | awk -F '.' '{print $1;}'` BASENAME=`date -I`-diff dar -c $DIR/$BASENAME $TARGET -A $FULLBKUP $OPTIONS > /dev/null YESTERDAY=`date -I --date '1 day ago'`-diff rm $DIR/$YESTERDAY* ;; esac
作成後は実行権限を与えるのをお忘れなく。
コマンドを手打ちしてみてちゃんとバックアップファイルが作成できるかをチェックしてみてください。
# /usr/local/backup.sh -f ← フルバックアップの実施
# /usr/local/backup.sh -d ← 差分バックアップの実施
前項で作成したスクリプトをCronに登録します。
# crontab -e
↓ 以下の2つを追加します。
0 3 * * 1 /usr/local/backup.sh -f
0 3 * * 2-7 /usr/local/backup.sh -d
実際にCronが動作して、/backup ディレクトリにバックアップしたファイルが生成されているかを確認してください。
これで週に一回のフルバックアップ、毎日の差分バックアップが取ることができます。
このページのサンプル・スクリプトだと /backup にひたすら蓄積していきますので、定期的に吸い上げる作業が必要になります。