FreeBSD 4.10 + pdumpfs
はじめに
ファイルバックアップ手段のひとつとして pdumpfs を実験してみました。
pdumpfs は、最初のバックアップの時だけ対象ディレクトリ全体をコピーして、2日目以降は差分をバックアップします。
その時に、前日から更新されなかったファイルは前日のファイルへのハードリンクとすることで、
ディスクの消費量を節約する仕組みになっています。
また、Rubyスクリプトで作られています。
ハードリンクの理解も含め、実験してみましょう。
インストール
pdumpfs と Ruby をインストールする必要があります。各々最新のソースをコンパイルしてインストールするのが一番ですが、
手を抜いて /stand/sysinstall でインストールしちゃいます。加えて保存されたディレクトリツリーを確認しやすいように tree もインストールしておきます。
jhon# /stand/sysinstall
jhon# rehash
jhon# pkg_info
pdumpfs-0.8 A daily backup system similar to Plan9's dumpfs
ruby-1.8.1_2 An object-oriented interpreted scripting language
tree-1.3_1 Display a tree-view of directories with optional color or H
jhon#
jhon# pdumpfs -h
Usage: pdumpfs [destination basename]
-e, --exclude=PATTERN exclude files/directories matching PATTERN
-s, --exclude-by-size=SIZE exclude files larger than SIZE
-w, --exclude-by-glob=GLOB exclude files matching GLOB
-v, --version print version information and exit
-h, --help show this help message
jhon#
バックアップ環境
バックアップ対象は /root ディレクトリ内、バックアップ先は /tmp にします。
バックアップ対象のファイルサイズが少ないので、/etc を tar.gz したファイルを置きました。
etc.tgz は、md5 を取っておきます。
jhon# pwd
/root
jhon# tar zcvf etc.tgz /etc
jhon# ls -la
total 252
drwxr-xr-x 2 root wheel 512 Oct 4 22:39 .
drwxr-xr-x 17 root wheel 512 Oct 4 22:35 ..
-rw-r--r-- 2 root wheel 802 May 26 06:28 .cshrc
-rw-r--r-- 1 root wheel 142 May 26 06:28 .klogin
-rw-r--r-- 1 root wheel 297 May 26 06:28 .login
-rw-r--r-- 2 root wheel 251 May 26 06:28 .profile
-rw-r--r-- 1 root wheel 223520 Oct 4 22:39 etc.tgz
jhon#
jhon# md5 etc.tgz
MD5 (etc.tgz) = ed1dffa47c68a65825177f69a98436e1
jhon#
バックアップ先の /tmp ディレクトリになにも保存されていないことを確認します。
jhon# pwd
/tmp
jhon# ls -la
total 4
drwxrwxrwt 2 root wheel 512 Oct 4 22:51 .
drwxr-xr-x 17 root wheel 512 Oct 4 22:35 ..
jhon# du -s /tmp
2 /tmp
jhon#
バックアップ 1 回目
とりあえず実行。
jhon# pdumpfs /root /tmp
jhon#
tree コマンドでバックアップ先のディレクトリ構成を確認。
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
`-- 04
`-- root
`-- etc.tgz
4 directories, 1 file
jhon# ls -la /tmp/2004/10/04/root/
total 252
drwxr-xr-x 2 root wheel 512 Oct 4 22:39 .
drwx------ 3 root wheel 512 Oct 4 22:51 ..
-rw-r--r-- 1 root wheel 802 May 26 06:28 .cshrc
-rw-r--r-- 1 root wheel 142 May 26 06:28 .klogin
-rw-r--r-- 1 root wheel 297 May 26 06:28 .login
-rw-r--r-- 1 root wheel 251 May 26 06:28 .profile
-rw-r--r-- 1 root wheel 223520 Oct 4 22:39 etc.tgz
jhon#
jhon# du -s /tmp
258 /tmp
jhon#
jhon#
jhon# md5 /tmp/2004/10/04/root/etc.tgz
MD5 (/tmp/2004/10/04/root/etc.tgz) = ed1dffa47c68a65825177f69a98436e1
jhon#
etc.tgz ファイルも正しいことを確認。
バックアップ 2 回目
一日一回しかバックアップできないので、日付を一日進めます。
jhon# date
Mon Oct 4 23:00:30 JST 2004
jhon# date 0410052300
Tue Oct 5 23:00:00 JST 2004
pdumpfs を実行すると、前回とのファイルチェックが行われます。ファイルを操作していないので、unchanged です。
jhon# pdumpfs /root /tmp
directory /root
unchanged /root/etc.tgz
unchanged /root/.profile
unchanged /root/.login
unchanged /root/.klogin
unchanged /root/.cshrc
jhon#
バックアップ先のディレクトリツリーはこのようになります。
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 04
| `-- root
| `-- etc.tgz
`-- 05
`-- root
`-- etc.tgz
6 directories, 2 files
jhon#
ファイルサイズは etc.tgz が二つ分にはなりません。
jhon# du -s /tmp
262 /tmp
jhon#
jhon# md5 /tmp/2004/10/05/root/etc.tgz
MD5 (/tmp/2004/10/05/root/etc.tgz) = ed1dffa47c68a65825177f69a98436e1
jhon#
ファイルを追加
etc.tgz をコピーして hoge.tgz を作成します。
jhon# cp /root/etc.tgz /root/hoge.tgz
jhon# pwd
/root
jhon# ls -la
total 492
drwxr-xr-x 2 root wheel 512 Oct 5 23:04 .
drwxr-xr-x 17 root wheel 512 Oct 4 22:35 ..
-rw-r--r-- 2 root wheel 802 May 26 06:28 .cshrc
-rw-r--r-- 1 root wheel 142 May 26 06:28 .klogin
-rw-r--r-- 1 root wheel 297 May 26 06:28 .login
-rw-r--r-- 2 root wheel 251 May 26 06:28 .profile
-rw-r--r-- 1 root wheel 223520 Oct 4 22:39 etc.tgz
-rw-r--r-- 1 root wheel 223520 Oct 5 23:04 hoge.tgz
jhon#
日を進めて pdumpfs を行います。
jhon# date 0410062300
Wed Oct 6 23:00:00 JST 2004
jhon#
jhon# pdumpfs /root /tmp
directory /root
new file /root/hoge.tgz
unchanged /root/etc.tgz
unchanged /root/.profile
unchanged /root/.login
unchanged /root/.klogin
unchanged /root/.cshrc
jhon#
hoge.tgz が new file と識別されます。
tree でバックアップ先を確認。
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 04
| `-- root
| `-- etc.tgz
|-- 05
| `-- root
| `-- etc.tgz
`-- 06
`-- root
|-- etc.tgz
`-- hoge.tgz
8 directories, 4 files
jhon#
jhon# du -s /tmp
506 /tmp
jhon#
バックアップ先のファイルを削除
最初にバックアップしたディレクトリ(04)を削除してみます。
jhon# rm -R /tmp/2004/10/04
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 05
| `-- root
| `-- etc.tgz
`-- 06
`-- root
|-- etc.tgz
`-- hoge.tgz
6 directories, 3 files
jhon#
jhon# du -s /tmp
502 /tmp
jhon#
jhon# md5 /tmp/2004/10/05/root/etc.tgz
MD5 (/tmp/2004/10/05/root/etc.tgz) = ed1dffa47c68a65825177f69a98436e1
jhon# md5 /tmp/2004/10/06/root/etc.tgz
MD5 (/tmp/2004/10/06/root/etc.tgz) = ed1dffa47c68a65825177f69a98436e1
jhon#
05 , 06 ディレクトリ内の etc.tgz が 04 ディレクトリからのスタティックリンクの場合はリンク切れを起こしますが、
これらはハードリンクなので、実体は残ります。
バックアップ元のファイルを削除
jhon# rm /root/hoge.tgz
jhon#
jhon# date 0410072300
Thu Oct 7 23:00:00 JST 2004
jhon#
jhon# pdumpfs /root /tmp
directory /root
unchanged /root/etc.tgz
unchanged /root/.profile
unchanged /root/.login
unchanged /root/.klogin
unchanged /root/.cshrc
jhon#
jhon# du -s /tmp
506 /tmp
jhon#
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 05
| `-- root
| `-- etc.tgz
|-- 06
| `-- root
| |-- etc.tgz
| `-- hoge.tgz
`-- 07
`-- root
`-- etc.tgz
8 directories, 4 files
jhon#
バックアップ元のファイル更新
バックアップ元のファイルが編集された時にバックアップされると、こんな感じ。
jhon# echo "hoge" > /root/hoge.txt
jhon#
jhon# md5 /root/hoge.txt
MD5 (/root/hoge.txt) = c59548c3c576228486a1f0037eb16a1b
jhon#
日付を変更し、pdumpfs を実行。
jhon# date 0410082300
Fri Oct 8 23:00:00 JST 2004
jhon#
jhon# pdumpfs /root /tmp
directory /root
new file /root/hoge.txt
unchanged /root/etc.tgz
unchanged /root/.profile
unchanged /root/.login
unchanged /root/.klogin
unchanged /root/.cshrc
jhon#
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 05
| `-- root
| `-- etc.tgz
|-- 06
| `-- root
| |-- etc.tgz
| `-- hoge.tgz
|-- 07
| `-- root
| `-- etc.tgz
`-- 08
`-- root
|-- etc.tgz
`-- hoge.txt
10 directories, 6 files
jhon#
ファイルを編集する。pdumpfs を実行すると、updated と表示される。
jhon# echo "hogehoge" >> /root/hoge.txt
jhon# cat hoge.txt
hoge
hogehoge
jhon# md5 /root/hoge.txt
MD5 (/root/hoge.txt) = 36e055f9e8922e9163f9293ea0920b10
jhon#
jhon# date 0410092300
Sat Oct 9 23:00:00 JST 2004
jhon#
jhon# pdumpfs /root /tmp
directory /root
updated /root/hoge.txt
unchanged /root/etc.tgz
unchanged /root/.profile
unchanged /root/.login
unchanged /root/.klogin
unchanged /root/.cshrc
jhon#
jhon# tree /tmp
/tmp
`-- 2004
`-- 10
|-- 05
| `-- root
| `-- etc.tgz
|-- 06
| `-- root
| |-- etc.tgz
| `-- hoge.tgz
|-- 07
| `-- root
| `-- etc.tgz
|-- 08
| `-- root
| |-- etc.tgz
| `-- hoge.txt
`-- 09
`-- root
|-- etc.tgz
`-- hoge.txt
12 directories, 8 files
jhon#
pdumpfs は便利だなー。
そのた
バックアップ元ディレクトリとバックアップ先ディレクトリの指定を、 /root/ のように終わりを / にした時でも、
/ が無い時と同じ動作をします。
戻る