btrfsのスナップショット使ってみた。
速度はまだわからないが、やっぱ便利そう。
バックアップスクリプト作ったが、事前準備としてバックアップ対象のwwwをサブボリューム化する必要があるが、ディレクトリが存在すると作れない。
mv www www1
sudo btrfs subvolume create www
sudo chown user:user www
mv www1/* www/
rmdir www1
一旦mvでリネームしてバックアップし、サブボリュームを作り、
rootになっちゃうからchownして、mvで中身を移動させる。
btrfsのコマンドは相対パスでやってるが、絶対パスでもいい。
とりあえずのバックアップスクリプトはこんな感じ。
backup.sh
#!/bin/sh
cd `dirname $0`
rm tar.gz/www.tar.gz
btrfs subvolume snapshot ../www snapshot/www
tar cfz tar.gz/www.tar.gz -C snapshot www
chown user:user tar.gz/www.tar.gz
btrfs subvolume delete snapshot/www
ディレクトリ構造は、
www
backup
backup/snapshot
backup/tar.gz
backup/backup.sh
で、backup/backup.shがバックアップスクリプトで、rootでcronする。
ローテは別の場所に転送してからやるんで、フルバックアップを1個だけで、tar.gzファイルにまとめる。
バックアップスクリプトのディレクトリに移動し、ローテはしないんで古いバックアップファイルを削除。
btrfs subvolume snapshotで、../wwwのスナップショットをsnapshot/wwwに作成。
スナップショットってのは、元のディレクトリと全く同じものだが、ハードリンクと違い更新されない。
だから、その時点の同じものを複製し、複製した方でバックアップ処理をすれば本来の場所で更新が行える。
今回のスクリプトは前後で鯖止めてないが、スナップショット作成前に鯖止めて、作成後に再開させる感じにしたほうがいいね。
スナップショットを元にtar.gz/www.tar.gzを作成し、
rootで動かしてるからchownで所有者変える。
バックアップが完了したらスナップショットは消す。