home_backupコマンド 解説

ポイントをかいつまんで簡単に説明しておく

基本的な機能

  1. バックアップ先をマウントする
  2. フルダンプの情報がなければfull dump & restore、なければincremental dump & restoreする
  3. rsyncを実行して、消去されているファイルがあれば、バックアップからも消去する

バックアップ先をマウントする

バックアップ用のHDDは通常マウントしないで使っているので、バックアップ時にマウントする。また、バックアップ終了後アンマウントする。ただし、既にマウントされている時はそのままバックアップを実行し、終了後もアンマウントしない。また他のパーティションがマウントされている場合は実行を中断する。

full dump & restore

過去のdumpの記録ファイル(上の例では /home/dumpdates を26行目で指定)を確認して、このファイルが無ければファイルシステム全体をフルダンプする。逆にフルダンプをしたい場合はこのファイルを削除してからhome_backupコマンドを実行すれば良い。

incremental dump & restore

過去のdumpの記録ファイル(上の例では /home/dumpdates)を確認し、"直近のダンプレベル + 1"のレベルで増分ダンプを行なう。例えば、過去に"4 ⇒ 6 ⇒ 5"という順番に増分ダンプして来ていたら、今回は直近の"5"+1でレベル"6"でダンプする。
また、環境変数MAX_DUMP_LEVELでダンプレベルの上限を設定でき(上の例ではdumpコマンド上限の65535)、前回のダンプレベルが上限レベルである場合、前回のレベルを強制的に"上限レベル −1"に書き換え、今回は上限レベルでダンプする。(61行目〜78行目) /home/dumpdatesを強制的に書換えないと、増分ダンプの期間は、以前の"上限レベル −1"の日からの差分となってしまい、ダンプレベルが上限に達してしまうと増分ダンプの期間がドンドン長くなってしまう。上限レベルを65535に設定してる場合は、毎日バックアップを取ったとしても約180年かかるので、気にしなくても良かったが、昔のdumpコマンドと互換性を持たせ上限レベルを"9"にする場合は、この様な工夫が必要になる。*1

rsyncの実行

dump & restore で増分ダンプは実行されるが、前回のダンプからの期間の間で消去されたファイルはそのまま残ってしまう。これを削除するためにrsyncを使う。また、何らかの原因で増分ダンプから漏れたファイルも最終的にrsyncで確実にバックアップを取ることができる。(勿論、そういったファイルのセキュリティ・コンテキストは正確にはコピーされないが、漏れを発生するよりはマシであり、また、その内フルダンプをした際には完全に同期が取れる。)

dump/restoreの実行結果

dumpおよびrestoreは88行目で実行している。しかし、86行目で似たようなコマンド行をコメントアウトしている。実際、やりたかったのは86行目の方なのだが、どうもdumpとrestoreの実行結果を変数に代入することが出来なかった。仕方ないので、あまりスマートな方法ではないが、実行結果を一旦ファイルに格納して後で読み出すことで代案としたのが88行目になる。86行目に関しては文法的にも意味的にも合っていると思うのだが....。また、その内、時間が出来たらトライしてみよう。

*1:実は、今のdumpコマンドの上限レベルが65535まで拡張されているとは知らなかった。上限レベルは昔のまま"9"だと思って、この機能を実装した。