タダでバックアップ
〜tar、DARで曜日ごとのバックアップ〜


1.まえがき

  • システム全体のバックアップは「Partition Image」で不定期に実施しており、いざというときは再構築しなくても復元できるが、ちょっとしたミスでデータを消してしまったり、誤って上書きしてどうしても部分的な復元を量る場合に全面バックアップだけでは不便である。なるべく手間をかけず、直近のデータをバックアップする方法について検討した。
  • 一時保存先は同一のHDD内(複数HDD、複数パーテーションがあれば別HDDまたは別パーテーションへ保存)とし、定期的に手動でCD/DVDにコピーを残すこととする。
  • 対象ファイルは、システム設定データ、ユーザデータ、Webデータ、各種ログ等を対象とする。
  • バックアップ計画は、月ごとのバックアップファイルおよび曜日ごとのバックアップファイルを保存することとする。


2.tar(タ)でバックアップ

  • 簡単操作で圧縮可能なtarコマンドによるバックアップを紹介。
(1)バックアップスクリプトの作成
#!/bin/sh


tar -czf /home/backup/etc-`date +%Y%m`.tar.gz /etc

tar -czf /home/backup/kazuyoshi-`date +%Y%m`.tar.gz /home/kazuyoshi

tar -czf /home/backup/var-`date +%Y%m`.tar.gz /var --exclude /var/cache --exclude var/lib/apt --exclude /var/lib/dpkg --exclude /var/lib/postgres

tar -czf /home/backup/usr-`date +%Y%m`.tar.gz /usr/local/bin /usr/lib/cgi-bin


      図2−1 backup.mシェルの記述

  • 月ごとのバックアップファイルの形式は「ディレクトリ名-年月.tar.gz」。
#!/bin/sh


tar -czf /home/backup/etc-w`date +%w`.tar.gz /etc

tar -czf /home/backup/kazuyoshi-w`date +%w`.tar.gz /home/kazuyoshi

tar -czf /home/backup/var-w`date +%w`.tar.gz /var --exclude /var/cache --exclude var/lib/apt --exclude /var/lib/dpkg --exclude /var/lib/postgres

tar -czf /home/backup/usr-w`date +%w`.tar.gz /usr/local/bin /usr/lib/cgi-bin


      図2−2 backup.wシェルの記述
  • 曜日ごとのバックアップファイルの形式は「ディレクトリ名-w週番号.tar.gz」。
  • 週番号0は日曜日、6は土曜日。

(2)実行権の付与

# chmod 777 backup.m

# chmod 777 backup.w



      図2−3 シェルに実行権付与
  • バックアップ・シェルスクリプトに実行権を与える。

(3)バックアップスケジュールの設定

38 3 1 * * root /usr/local/bin/backup.m
08 3 * * * root /usr/local/bin/backup.w


       図2−4 crontabの記述

  • /etc/crontabの記述を追記。
  • 毎月1日3:38に月バックアップファイルを作成。
  • 毎日3:08に曜日バックアップファイルを作成。


3.DAR(ダ)でバックアップ
  • バックアップ計画は、月ごとのフルバックアップおよび、日々実施する曜日ごとの差分バックアップとする。週ごとのフルバックアップも考えられるが、それほど重要且つ、緊急性のあるファイルを扱っていないので、差分ファイルの復元ができない場合でも、最大1ヶ月前のフルバックアップで復元できればよい。
  • 曜日ごとのバックアップについては、容量が少なくなる増分バックアップではなく(日々の変更ファイルが多くないため)、復元時に2種類のバックアップファイルのみで簡単に復元できる差分ファイル方式とする。
(1)バックアップスクリプトの作成
#!/bin/sh


dar -z -c /home/backup/bkup-`date +%Y%m` -R / -g etc -g home/kazuyoshi -g var -g usr/local/bin -g usr/lib/cgi-bin -P var/cache -P var/lib/apt -P var/lib/dpkg -P var/lib/postgres



      図3−1 backup.wシェルの記述

  • 月ごとのバックアップの対象は2.tarと同様とするが、出力するフルバックアップファイルは1つにまとめる。出力ファイルは「bkup-年月.1.dar」。
  • 左記darコマンドは実際は1行。
  • オプションは以下のとおり。
    • -z :gzipで圧縮
    • -c :指定のベースネームでバックアップファイ利作成。
    • -R :指定のパスをルートパスとする。
    • -g :バックアップ対象ディレクトリ。
    • -P :指定のパスをバックアップ対象からはずす。
#!/bin/sh


dar -w -z -c /home/backup/bkup-w`date +%w` -A /home/backup/bkup-`date +%Y%m` -R / -g etc -g home/kazuyoshi -g var -g usr/local/bin -g usr/lib/cgi-bin -P var/cache -P var/lib/apt -P var/lib/dpkg -P var/lib/postgres


      図3−2 backup.wシェルの記述
  • 曜日ごとの差分バックアップファイルの形式は「bkup-w週番号」。出力ファイルは「bkup-w週番号.1.dar」。
  • 左記darコマンドは実際は1行。
  • 週番号0は日曜日、6は土曜日。
  • オプションは次のとおり。
    • -w :上書き等の確認(警告:warning)メッセージを出力しない。<曜日ごとの差分ファイルは1週間ローテーションのため上書きとなるため>
    • -A :差分バックアップの基となるファイルを指定する。

(2)実行権の付与

# chmod 777 backup.m

# chmod 777 backup.w



      図3−3 シェルに実行権付与
  • バックアップ・シェルスクリプトに実行権を与える。

(3)バックアップスケジュールの設定

38 3 1 * * root /usr/local/bin/backup.m
08 3 * * * root /usr/local/bin/backup.w


       図3−4 crontabの記述

  • /etc/crontabの記述を追記。
  • 毎月1日3:38にフルバックアップファイルを作成。
  • 毎日3:08に曜日ごとの差分バックアップファイルを作成。

(4)復元の実施
# cd /home/backup
# dar -x bkup-200804

# dar -x bkup-w0
  • バックアップファイルのディレクトリでdarコマンドに-xの復元オプションを指定する。左記は2008年4月のバックアップファイルを指定。
  • バックアップファイルはカレントディレクトリに復元される。
  • 曜日ごとの差分ファイルを復元する。左記は日曜日の差分ファイルを指定。



 
更新履歴
2008.04

作成


トップ アイコン
トップ