Btrfs (日本語)
| 概要 |
|---|
| Btrfs の概要と Arch Linux でのセットアップについて。 |
| 関連項目 |
| Installing on Btrfs root |
Btrfs は Linux 用の新しいコピーオンライト (COW) のファイルシステムであり、先進的な機能を実装することを目指しつつ、障害耐性を持ち簡単に管理することにフォーカスしています。Btrfs は Oracle, Red Hat, Fujitsu, Intel, SUSE やその他多くの人々によって共同で開発されており GPL でライセンスされ誰でも貢献できるように開かれています。
Contents |
最近の開発状況とニュースのリンク
- Avi Miller presenting BTRFS at SCALE 10x. Jan/2012.
- Summary of Chris Mason's talk from LFCS 2012
- 2012-03-28 時点で、btrfs-progs は btrfs ファイルシステムのエラーを修正するツールである btrfsck を含んでいます。
- Oracle がこのバージョンの btrfs-progs をパッケージ化していて Oracle Linux 6 やバックポート版を 5 でリリースしています。
- Arch Linux は core/btrfs-progs として提供しています (バージョン 0.19.20120328-1 から)。
インストール
Btrfs のサポートは linux (モジュールとして)パッケージに含まれています。ユーザースペースのユーティリティは btrfs-progs で利用可能です。
マルチデバイスのサポート (btrfs の RAID 機能) や、起動の初期段階での btrfs ボリューム を使うには、(mkinitcpio パッケージによって提供される) btrfs mkinitcpio フックを有効にして、root btrfs ボリュームなどを使えるようにする必要があります。 しかし、抜き身の btrfs パーティションを使うだけならば、このフックは必要ありません。
より多くのオプションや機能を使うために、AUR から mkinitcpio-btrfs をインストールすることも可能です。このパッケージでは自動ロールバック機能が欲しい人のために btrfs_advanced という mkinitcpio フックがインストールされます。
Btrfs パーティションを作成する
Btrfs のための新しいパーティションをフォーマットする
# mkfs.btrfs [options] dev [dev ...]
複数のデバイスを選択することで RAID を作ることができます。サポートしている RAID レベルには RAID 0, RAID 1, RAID 10 があります。デフォルトでは、メタデータがミラーされデータは省かれます。
Ext3/4 を Btrfs に変換する
- ライブ CD を起動します (例: Arch)
-
btrfs-convert <root-partition>を実行します - 変換するパーティションをマウントし
/etc/fstabを編集してパーティションタイプによりautoかbtrfsを指定します。また、btrfs では起動毎にファイルシステムをチェックする必要がないのでfs_passnoパラメータ (最後のフィールド) を0に設定するべきです。 - システムに Chroot して GRUB エントリをリビルドします (よくわからない場合は Install from Existing Linux や GRUB を見て下さい)。
btrfs-convert した後、全てが問題ないか確認してください。変更を適用するには、保存されたイメージを削除し、イメージがあるサブボリュームを削除し、スペースを回復するためにドライブを調整してください。例えば、/home を btrfs に変換した後:
rm /home/ext2_saved/* btrfs subvolume delete /home/ext2_saved
暗号化
Btrfs にはビルトインの暗号化サポートはありません(将来実装される予定です)が、mkfs.btrfs をする前にパーティションを暗号化することができます。Dm-crypt with LUKS を見て下さい。
(既に btrfs ファイルシステムを作成してしまっている場合、EncFS や TrueCrypt などを使うことができます。ただし btrfs の機能のいくつかが使えなくなるかもしれません。)
Btrfs の機能
コピーオンライト (CoW)
CoW にはアドバンテージがありますが、random write が少ない大きなファイルを扱うときのパフォーマンスについてはあまり良い影響を与えません。データベースファイルや仮想マシンメージについては CoW を無効化することが推奨されます。 "nodatacow" オプションを使ってマウントすることで全てのブロックデバイスで CoW を無効にできます。しかしながら、これではファイルシステム全体で CoW を無効にすることにはなりません。 ファイルやディレクトリ単体で CoW を無効化するには、次のコマンドを使って下さい:
# chattr +C [file/directory path]
chattr man ページより: btrfs では、新しい、または空のファイルには 'C' フラグがセットされます。既にデータブロックを持つファイルにフラグが設定してある場合、ファイルに対応したブロックが完全に安定状態の時にフラグの定義が消されます。ディレクトリに 'C' フラグがセットされている場合、そのディレクトリ自体には影響がなく、ディレクトリに作成された新しいファイルに No_COW 属性が付けられます。
マルチデバイスファイルシステムと RAID 機能
マルチデバイスファイルシステム
btrfs ファイルシステムを作成する際に、mkfs.btrfs したい分だけのパーティション・デバイスを指定することができます。ファイルシステムは指定された全てのデバイスにわたって作成されます。このように"マージ"することによって、複数のパーティションやデバイスを大きな btrfs ファイルシステムにできるのです。
また、既に存在している btrfs ファイルシステムからデバイスを追加・削除することも可能です(用心が必要ですが)。
(btrfs ボリュームとも呼ばれる)マルチデバイス btrfs ファイルシステムを確認するには次を実行します:
# btrfs device scan
btrfs mkinitcpio フックや /etc/rc.conf の USEBTRFS 変数を設定するときに使って下さい。
RAID 機能
マルチデバイスファイルシステムを作成するとき、ファイルシステムに追加したデバイス全体で RAID0, RAID1, RAID10 を使うように指定することもできます。
サブボリューム
btrfs の機能のひとつにサブボリュームがあります。サブボリュームは基本的にファイルとディレクトリを保持している名前の付いた b 木です。root ツリーのツリーの中に inode を持ち、root 以外の所有者やグループも設定できます。サブボリュームは任意でブロックを割り当てることもできます。ブロックとファイルエクステントの全ては参照カウントでありスナップショットを可能にしています。仮想マシンの動的な容量拡張に似て、必要な時に必要な分だけのデバイス上の容量を使います。また、サブボリュームを異なったマウントオプションを使ってマウントすることでセキュリティの柔軟性を持たせることもできます。
サブボリュームを作成するには:
# btrfs subvolume create [<dest>/]
柔軟性を向上させるために、あなたのシステムを指定したサブボリュームにインストールするには、カーネルブートパラメータに以下を加えて下さい:
rootflags=subvol=<whatever you called the subvol>
これでシステムロールバックも可能になります。
root パーティションで使う場合、/etc/mkinitcpio.conf で btrfs を HOOKS に加えるだけでなく crc32c (または Intel のマシン用の crc32c-intel) をモジュールに加えるのが推奨されます。
スナップショット
スナップショットを作成するには:
# btrfs subvolume snapshot <source> [<dest>/]<name>
スナップショットは再帰的ではありません、つまりサブボリューム内にある全てのサブボリュームはスナップショットでは空のディレクトリになります。
デフラグメンテーション
Btrfs はオンラインデフラグをサポートしています。root フォルダのメタデータをデフラグするには、次を実行してください:
# btrfs filesystem defragment /
上のコマンドはシステム全体のデフラグを行いません。詳しくは、btrfs wiki のこのページを見て下さい。 システム全体すべてをデフラグするには、次を実行してください:
# find / -xdev -type f -print -exec btrfs filesystem defrag '{}' \;
圧縮
Btrfs は透過圧縮をサポートしています、これはパーティション上の全てのファイルが自動的に圧縮されることを意味します。このことはファイルの容量を減らすだけでなく、特に lzo アルゴリズムを使っている場合はパフォーマンスを向上させることもできます。圧縮は compress=gzip か compress=lzo マウントオプションを使って有効にします。マウントオプションが追加された後に作成・変更されたファイルだけに圧縮が適用されるので、圧縮の効果を完全に享受するにはインストール中に有効にして下さい。ドライブの準備をした後、他のターミナルに切り替えて (Ctrl+Alt+number)、次のコマンドを実行してください:
# mount -o remount,compress=lzo /dev/sdXY /mnt/target
インストールが完了した後に、/etc/fstab の root ファイルシステムのマウントオプションに compress=lzo を加えて下さい。
資料
- Btrfs Wiki
- BTRFS Problem FAQ - 公式 FAQ
- Funtoo Btrfs wiki entry - Very well-written article