クラウド関連技術ブログ

Btrfsでバックアップ その2

投稿日:2014/10/12カテゴリー:

こんにちは。松本です。

今回は、Btrfsの使い方と基本的なスナップショットの取り方についてです。
CentOS7では、OSのインストーラでBtrfsの領域を作成できます。
この記事では、VirtualBox上のCentOS7を使っていくことにします。

CentOS7をインストールする際、次の画面のタイミングで「パーティション構成を行いたい」を指定することで、デフォルトファイルシステムであるxfs以外を設定することが出来ます。

btrfs001.png

私は、次のように設定してみました。

マウントポイント ファイルシステム
/home btrfs
/boot xfs
/var btrfs
/ btrfs
swap swap

btrfs002.png

これで、/boot 以外をBtrfsとして使えるようになります。
インストール完了後、fstab を見てみると次のようになっていました。

UUID=dd28d4c9-4b65-491e-922a-375a42997491 /                       btrfs   subvol=root00   1 1
UUID=38f78eef-ccc6-4202-b110-62f2f21a8912 /boot                   xfs     defaults        1 2
UUID=dd28d4c9-4b65-491e-922a-375a42997491 /home                   btrfs   subvol=home     1 2
UUID=dd28d4c9-4b65-491e-922a-375a42997491 /var                    btrfs   subvol=var      1 2
UUID=f10ce0b5-6098-4e25-81d2-f6c1e73ec253 swap                    swap    defaults        0 0

Btrfsのデバイス(パーティション)を準備する方法は他にもありますが、それはまたの機会に。
※コマンドで作る方法や、既存のext3やext4をbtrfsに変換する方法もあります。

続いて、スナップショットをとる方法です。

スナップショットは、サブボリューム単位で取得出来ます。
上記の fstab を見てみると、"subvol=" と書かれています。
ここに書かれた名前が、サブボリューム名です。

また、btrfsコマンドでも確認できます。
次のように実行してみてください。

# btrfs subvolume list -a /

次のように表示されます。

ID 257 gen 20 top level 5 path <FS_TREE>/home
ID 258 gen 27 top level 5 path <FS_TREE>/root00
ID 259 gen 22 top level 5 path <FS_TREE>/var

スナップショットをとるコマンドは、次のようになります。
/home のスナップショットを /.home_snap という名前でとってみます。

# btrfs subvolume snapshot /home /.home_snap

スナップショットは、メタデータのみをコピーします。
そのため、非常に高速です。

状態を確認してみます。

# btrfs subvolume show /home

結果は次のようになりました。

 /home
        Name:                   home
        uuid:                   44750afc-e27b-d640-a432-2e38a08f40e2
        Parent uuid:            -
        Creation time:          2014-10-11 23:05:12
        Object ID:              257
        Generation (Gen):       40
        Gen at creation:        6
        Parent:                 5
        Top Level:              5
        Flags:                  -
        Snapshot(s):
                                root00/.home_snap

最終行を見ると、/home に対するスナップショット .home_snap がとれていることがわかります。

スナップショットを削除するときは、サブボリュームの削除と同じ、次のコマンドを実行します。

# btrfs subvolume delete /.home_snap

このように、Btrfsのスナップショットは簡単に扱うことができますが、大切なのは、サブボリュームをどのように作るのかです。
例えば、先ほどの /home は、配下にユーザ毎のホームディレクトリを作ることが一般的ですが、ここをサブボリュームにしてみます。

# btrfs subvolume create /home/btruser
# chmod 700 /home/btruser
# useradd -M -d /home/btruser btruser

これで、btruser のホームディレクトリ /home/btruser はサブボリュームとして用意されました。
こうすることで、/home 配下に複数のユーザのホームディレクトリがあっても、btruserのみのスナップショットがとれます。

ただし、スナップショットは再帰的にとることが出来ないことに注意してください。
つまり、次のように取得したスナップショットでは、 /home/btruser のデータは含まれません。

# echo test > /home/btruser/testfile
# ls -l /home/btruser/
合計 4
-rw-r--r--. 1 root root 5 10月 12 19:36 testfile

# btrfs subvolume snapshot /home /.home-snap

# ls -l /.home-snap/btruser/
合計 0


次回は、可用性と拡張性をテーマに、Btrfsのより便利な使い方を見ていきます。
よろしくお願いします。

CONTACT

tel 092-986-2772
10:00〜17:00(土・日・祝日除く)
お問い合わせフォーム
page top