Humanity

Edit the world by your favorite way

pdumpfsによるバックアップ

このエントリでほんのり身の危険を感じたのでバックアップをしようと思い立った。
で、何を使ってバックアップするかなー(ソフトウェア的な意味で)と思ってたんだけど、とりあえず現状pdumpfsによるバックアップに落ち着いたので、その過程をメモしてみる。

最初はgitでやろうと思った

バックアップ、から何故か最初に思いついたのがgitでのバージョン管理だった。
ようするに
「/をgitで管理すればいいじゃん。そうすれば差分も楽に表示できるし、万一ファイルを削除してもgit revertとかすればいいし、しかもtest -z "$(git diff)"が真になればファイル改竄の検知も出来んじゃね?」
とか思ったんだけど、結局やっぱり速度的に話にならない。

# cd /
# git init
# git add .    # ここでかなり時間かかる
# git commit     # ここでもかなり(ry

しかもgit add .した時点で5GBのメモリをフルに使ってる\(^o^)/
それでもまだ足りないくらい。当たり前だけど。

なので、自分的に発想は面白いと思うんだけど、現実的に見て却下。


そんな中

たまたま哲さんHPを見てたら、pdumpfsというのを見つけた。これはいい。ということで即インストール。

$ wget http://0xcc.net/pdumpfs/pdumpfs-1.3.tar.gz
$ tar xzf pdumpfs-1.3.tar.gz
$ cd pdumpfs-1.3
$ make
$ sudo cp -R {doc,man} /usr/local; sudo cp pdumpfs /usr/local/bin  # 自分はpacoでインストールしたので正確にはsudo paco -lD 'cp -R {doc,man} /usr/local; cp pdumpfs /usr/local/bin'

これでインストール完了。(pacoについてはこちら)

あとは上のページを参考にこんなシェルスクリプトを書いてcronで回してみた。

#!/bin/sh

dirs="/root /home /bin /sbin /lib /etc /opt /usr /var/samba"
backup_dir="/backup"

pdumpfs "/root" "$backup_dir" --exclude="\/root\/build"
pdumpfs "/home" "$backup_dir" --exclude="\/home\/\w+\/build"
pdumpfs "/bin" "$backup_dir"
pdumpfs "/sbin" "$backup_dir"
pdumpfs "/lib" "$backup_dir"
pdumpfs "/etc" "$backup_dir"
pdumpfs "/opt" "$backup_dir"
pdumpfs "/usr" "$backup_dir"
pdumpfs "/var/samba" "$backup_dir"

chattr -R +i $backup_dir

cronの設定はこれ。

30 18 * * * /backup/backup.sh > /backup/stdout.log 2> /backup/stderr.log

こうやって一日間隔で回しても前日と同じ部分はハードリンクとして保存されるので、増えた分だけ/backup以下のサイズが増える。ハードリンクってこうやって使うのかー。

chattr -R +i $backup_dir

は、例えrootであっても削除できないディレクトリにするという意味。(削除する時はchattr -R -i $backup_dirとする必要がある)
存在は知ってたけど忘れてた。Linuxすげぇ。


それにしても哲さんの記事はどれも解説が丁寧で分かりやすい。wxWidgetsの記事なんか昔しょっちゅう見ながらなんか作ろうとしてた。HelloWorld程度のものしか作ってないし、なんかちゃんとしたもの作りたい。