NAV_MENU
賽は投げられた。人事尽くして天命待つと言うか、転がりだした物は止められないというか。まぁ、ちょとは覚悟しとけよ。
基本的に毎日更新。出来なかったときは遡ってやります。多分。きっと。出来たら良いな

アーカイバを使った、差分バックアップ

クラウドストレージにどうやってバックアップするかって事なんだけど、ファイルを圧縮、暗号化してクラウドストレージにアップするってすると色々面倒。
回線も遅いし、毎回フルバックアップするわけには行かないし、何か良い方法無いかと考えた。
バックアップソリューション使えば簡単かも知れんけど、運用性に欠ける。

圧縮できて、暗号化できて、差分バックアップが取れて、環境選ばないと考えた結果、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.000からすべてのファイルをそろえれば、結合しなくても、解凍できる。
嘘書いてた

リストア時は、先に 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はデータを取り出すときが面倒で金掛かんのよね。それが微妙…