アーカイバを使った、差分バックアップ
クラウドストレージにどうやってバックアップするかって事なんだけど、ファイルを圧縮、暗号化してクラウドストレージにアップするってすると色々面倒。
回線も遅いし、毎回フルバックアップするわけには行かないし、何か良い方法無いかと考えた。
バックアップソリューション使えば簡単かも知れんけど、運用性に欠ける。
圧縮できて、暗号化できて、差分バックアップが取れて、環境選ばないと考えた結果、7-zip(p7zip)アーカイバって結論。
Windows、UNIX、FreeBSD、Linux、試してないけどMacOSでも、コマンドライン版の7zさえ使えれば、どの環境でも差分バックアップが実現できて、どの環境でもリストアできる、クロスプラットホーム。
初回バックアップは、7zアーカイブで作れば、圧縮でも無圧縮でも、好きにオプションは指定すれば良い。
暗号化したいなら、(p7zipなのでスタティックリンクされた7za使ってるけど、7zの人は読み替えてね)
% 7za a -t7z -pPASSWORD -mhe=on backup_full.7z /hoge/data
つー感じ。
ただし、-vオプションのボリューム分割は使ってはダメ。
単一ファイルの、backup_full.7zを作りましょう。
翌日以降の差分バックアップは
% 7za a -t7z -pPASSWORD -mhe=on -u- -up0q3r2x2y2z0w2\!backup_diff_yyyymmdd.7z backup_full.7z /hoge/data
って感じ。
-uオプションがミソで、
-u-でアーカイブを上書きしない
-up0q3r2x2y2z0w2!backup_diff_yyyymmdd.7z で指定した'backup_diff_yyyymmdd.7z'に'backup_full.7z'からの差分が書き込まれる。
で、意味合いは
- p0 アーカイブに存在するか、ターゲット(この場合、/hoge/data)に指定されていないファイルは無視
- q3 アーカイブには存在するが、ディスクには存在しないファイルは、削除した記録を追加
- r2 ディスクにあってアーカイブに存在しないものは、追加
- x2 ディスクにあってアーカイブにもあるが アーカイブの方が新しいものは、追加
- y2 ディスクにあってアーカイブにもあるが ディスクの方が新しいものは、追加
- z0 ディスクにあってアーカイブにもあり、時間とサイズが同一のものは、無視
- w2 ディスクにあってアーカイブにもあり、時間が同一でサイズが不一致のものは、追加
vide http://sevenzip.sourceforge.jp/chm/cmdline/switches/update.htm
としてやると、backup_full.7z と現在のHDDの状態を比較して、新規ファイル、更新ファイル、日付を変更したファイルと、「ディスクから削除されたファイルの削除記録」がbackup_diff_yyyymmdd.7zに追加される。
増分バックアップじゃ無くて、差分バックアップなので、full.7zのアーカイブを作成した後の更新分が以後のdiff.7zに含まれるから、時間が経てば肥大化するけど、毎回数十GBのアーカイブを作るよりかはマシ。
年に1回とか半年に1回くらいでフルバックアップすれば
トラフィック大分減らせるんじゃ無いかなぁ…
あと、クラウドストレージの1ファイルあたりの制限に引っかかる様であれば
% split -d -a 3 -b1g backup_full.7z backup_full.7z.
vide http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=split&dir=jpman-10.0.2%2Fman§=0
こうしてやれば、規定サイズに分割されて、backup_full.7z.000 backup_full.7z.001って感じで分割されるので、これをアップロードすればOK。
嘘書いてた
リストア時は、先に backup_full.7zを展開してから、必要な時点のbackup_diff_yyyymmdd.7zを同一のディレクトリに展開すると、backup_full.7zからの更新差分と、backup_full.7zに有って、backup_diff_yyyymmdd.7zに存在しないファイルが削除されて、backup_diff_yyyymmdd.7zを作成した時のディレクトリ構造に戻る。
% cd /restore/data/
% 7za x backup_full.7z.000
% 7za x backup_diff_yyyymmdd.7z.000
Windowsでもリストアできるので、sambaとかCIFSの共有ファイルのバックアップにはもってこい。
あとはちょいとちょいとシェルスクリプト書けば、バックアップの自動化OK。
注意点としては、ファイルシステムで使っている文字コードに合わせて、LANG=ja_JP.UTF-8って感じで、文字コード絡みの環境変数設定しておかないと、7zに格納されるファイル名が化けます。
自分は、teracloud使ってるけど、amazon glacierとかに保存でも良いかもしれん。
amazon glacierはデータを取り出すときが面倒で金掛かんのよね。それが微妙…