NILFS2 な /home をバックアップするスクリプトを書いたよ

[2010-03-06 Sat] 追記:スクリプトにおいて mkcp をするのは本質的ではない。スクリプトを実行したときの最新のチェックポイントをマウントすればいい話。

[2010-02-24 Wed] 追記:スクリプトを修正。(追記ここまで)

/home を NILFS2 にしたのは書いたけど、NILFS2 のスナップショット機能を利用して、簡単なバックアップスクリプトを書いてみた。

原理は簡単だ。/home が乗っている /dev/md0 のスナップショットを作り、それを /mnt/snapshot にマウント。そして、/mnt/snapshot 以下のファイルを pdumpfs で /mnt/backup 以下へ (差分) バックアップするだけだ。詳しくは以下の例を読んでもらいたい。

#!/bin/bash
mkcp -s /dev/md0
CNO=`lscp -r -s | egrep  '^[[:space:]]+[[:digit:]]' | awk '{ print $1 }' | head -1`
mount -t nilfs2 -r -o "cp=$CNO" /dev/md0 /mnt/snapshot
pdumpfs \
    (ここでいろいろと --exclude や --exclude-by-glob をするが省略)
    /mnt/snapshot/toshiharu /mnt/backup/home \
    > /mnt/backup/home/log 2> /mnt/backup/home/error-log
umount /mnt/snapshot
chcp cp $CNO

念のため、最後に mkcp -s で作成したスナップショットを chcp cp でチェックポイントへ戻すようにしている。

とりあえず、これで充分なのではないかと思っている。LVM2 を用いても同じことができるはずだとは思うけど、僕は LVM2 とはおさらばしたのでもう知らない。