こんにちは、tahara です。
おかげさまで、いこーよ 月間一千万ページビューこえました。ありがとうございます。 AWS のオートスケールの出番ができて嬉しいです。
今回は btrfs のスナップショットを使ったバックアップについて書いてみたいと思います。
以前は rsync の —link-dest オプションを使って、変更のないファイルは前日のバックアップからハードリンクをはって、差分バックアップを行っていました。 この方法だと前日のバックアップが失敗していた場合、フルバックアップになってしまい、あっとういまにディスクを使いきってしまいます。
その対策として btrfs のスナップショットを使った差分バックアップに切り替えました。
今回は既にバップアップディスクが ext4 になっていたので、それを btrfs に変換しました。
こんな感じのバックアップディスクになっていました。
/dev/sde1 on /backup type ext4 (rw,commit=0)
btrfs に変換します。
sudo apt-get install btrfs-tools sudo umount /backup/ sudo btrfs-convert /dev/sde1
これで btrfs に変換できました。
次にスナップショットをとるためにサブボリュームを作ります。
sudo mkdir /btrfs sudo mount -t btrfs -o compress /dev/sde1 /btrfs sudo btrfs subvolume create /btrfs/backup
確認してみます。
sudo btrfs subvolume list /btrfs ID 256 top level 5 path ext2_saved ID 257 top level 5 path backup
ext2_saved の方は ext4 から btrfs に変換した時に作られたバップアップファイルです。 きちんと変換できていればいらないので消してしまいます。
sudo btrfs subvolume delete /btrfs/ext2_saved/
sudo blkid で UUID を確認し sudo vi /etc/fstab を書き換えます。
UUID=b20c3f2a-37e0-47ac-96df-3051d30f917a /btrfs btrfs compress 0 0 UUID=b20c3f2a-37e0-47ac-96df-3051d30f917a /backup btrfs subvol=backup,compress 0 0
パックアップスクリプトはこんな感じのシンプルなものになります。 rsync でファイルをバックアップして、btrfs のスナップショットをとります。 /backup の下は常に最新のバックアップで、/btrfs/backup-snapshot の下に日毎にバックアップのスナップショットが作られます。
#!/bin/sh rsync -azv --delete foo@example.com:/var/www/app /backup rsync -azv --delete bar@hoge.jp:/var/www/hoge-ap /backup /sbin/btrfs subvolume snapshot /backup /btrfs/backup-snapshot/`date +%Y%m%d`
シンプルでディスク容量を節約できるバックアップになりました。
最後に、弊社ではエンジニアを募集しています。