btrfs で複数のデバイスを使うときにやったことメモ

1TB の HDD のおさがりをもらったのでさっそく Linux PC に搭載して、前から気になっていた btrfs でフォーマットして使ってみました。

この記事に書く予定のシナリオとしては、

1. ディスク単体で btrfs フォーマットしてマウントして使用開始
2. ディスクを増設して一つのボリューム(?)として使用継続

という程度のもので、スナップショットがどうしたとか透過的圧縮がこうしたとかルートファイルシステムをどうのこうのとかいったような高度な話は一切出て来ません。

それでも例によっていろいろハマったので、後の自分のためにハマりポイントなどをメモ。

環境は Ubuntu 12.04.3 LTS。




最初に btrfs-tools パッケージをインストールした気がします。
(記憶があやふや)


それからディスクを btrfs でフォーマット。

$ sudo mkfs.btrfs <device file>

な感じですね。ここまではちょっとググればすぐにわかります。

<device file> には /dev/sdb とかそんな感じのデバイスファイル名を指定します。
ここからは /dev/sdb で話を進めます。(この記事を読んでくださっている皆さんはご自身の環境にあわせて読み替えてください。)

ちなみに、最初 /dev/sdb1 とかのパーティション?を指定してしまってエラーになってしまいました。よく考えたら当たり前なのかもしれませんが・・・。
(おさがりだったので事前になんらかのファイルシステムでフォーマットされていたのかもしれません)



次にこのディスクを単体でマウントします。
このあたりまでは旧来のファイルシステムと同じ感覚でやってたのですが問題なくできてました。

$ mkdir /mnt/btrfs_test
$ sudo mount /dev/sdb /mnt/btrfs_test

/mnt/btrfs_test はマウントポイントですね。
もしファイルシステムのタイプがどうのこうのというエラーになったら -t btrfs をつけると良いと思います。

これでもう /mnt/btrfs_test 以下には好き放題にファイルを作ったりできちゃうのですが、便利に使うためにもうあといくつか作業をします。



このままでは、PC を再起動するたびにマウントしなおさないといけなくなるので、/etc/fstab に以下の内容を書いておきましょう。

/dev/sdb    /mnt/btrfs_test    btrfs  noatime,nodiratime  0  0

/dev/sdb は最初に初期化したデバイスファイル名なのでみなさんの環境にあわせて変えてください。
/mnt/btrfs_test はマウントポイントです。
つぎの btrfs はファイルシステムのタイプで、
その次の noatime,nodiratime はパフォーマンスがよくなる(ファイルやディレクトリの最終アクセス日時をいちいち更新するのをやめる)ということです。これらのオプションはつけても付けなくても良いと思います。




さらに、サブボリュームと呼ばれるものを作っておくと、そのサブボリューム単位でスナップショットをとったりすることができて便利になるようです。

$ cd /mnt/btrfs_test
$ sudo btrfs subvolume create <subvolume name>


マウントするときは、このサブボリュームの単位でマウントすることもできるようです。




しばらくこの状態で使っていたら、もう一台 1TB HDD のおさがりをもらいました。
いったん PC をシャットダウンしてその HDD を接続したあと PC を起動し、/dev/sdc が認識されていることを確認しました。

この /dev/sdc も btrfs でフォーマットしました。

これを単体でマウントして別々のディスクとして扱うのではせっかく btrfs にした意味がないので、既存の /mnt/btrfs_test の容量を増やすようにしたいと思います。

それには、以下のコマンドでファイルシステムにデバイスを追加します。

$ sudo btrfs device add /dev/sdc /mnt/btrfs_test

これだけで完了です。簡単ですね。

ただ、この状態では、古い方(/dev/sdb)の 1TB のディスクにばかりデータが書きこまれていて、新しい方(/dev/sdc)にはまったくデータが書きこまれていないというアンバランスな状態となっていますので、これをバランスさせます。

$ sudo btrfs filesystem balance /mnt/btrfs_test

このコマンドは実行にかなり時間がかかります。

このコマンドが完了してから df コマンドを実行すると、無事 /mnt/btrfs_test の容量が約 2TB になっていることが確認できました。


なお、デバイスを追加しても、fstab は書き換えなくても大丈夫なようです。ファイルシステムに追加されたデバイスのうちどれか一つを指定してマウントすると、すべてのデバイスがまとめて使用可能になるようです。





以上、僕が知りたかった情報(なぜサブボリュームを作るのか、等の理由も含めて)があまりまとめられていなかったのでまとめてみました。

間違いの指摘やアドバイス等、よろしくおねがいします。