btrfs のスナップショットを使った差分バックアップ

区分
バックアップ
報告者

こんにちは、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`

シンプルでディスク容量を節約できるバックアップになりました。

最後に、弊社ではエンジニアを募集しています。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa