こんにちは。松本です。
今回は、Btrfsの使い方と基本的なスナップショットの取り方についてです。
CentOS7では、OSのインストーラでBtrfsの領域を作成できます。
この記事では、VirtualBox上のCentOS7を使っていくことにします。
CentOS7をインストールする際、次の画面のタイミングで「パーティション構成を行いたい」を指定することで、デフォルトファイルシステムであるxfs以外を設定することが出来ます。
私は、次のように設定してみました。
マウントポイント | ファイルシステム |
---|---|
/home | btrfs |
/boot | xfs |
/var | btrfs |
/ | btrfs |
swap | swap |
これで、/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のより便利な使い方を見ていきます。
よろしくお願いします。