6.4. 複数デバイスの統合ボリューム管理

BTRFS ファイルシステムは、多くのデバイスの上に作成することができ、ファイルシステムの作成後に複数のデバイスを追加することができます。デフォルトでは、メタデータが 2 つのデバイス間でミラー化され、データは表示されるすべてのデバイス間でストライプ化されます。ただし、デバイスが 1 つしかない場合、メタデータはそのデバイス上に複製されます。

6.4.1. 複数デバイスによるファイルシステムの作成

「Btrfs ファイルシステムの作成」で詳細に説明されているように、mkfs.btrfs コマンドではオプションとして、データ -d とメタデータ -m を指定できます。有効な仕様は以下の通りです。
  • raid0
  • raid1
  • raid10
  • dup
  • single
-m single オプションは、メタデータの複製を行なわないことを通知します。この機能は、ハードウェア RAID を使用する場合に必要になることがあります。

注記

RAID 10 を正しく実行するには、最低でも 4 台のデバイスが必要です。

例6.1 RAID 10 btrfs ファイルシステムの作成

4 つのデバイスにわたるファイルシステムを作成します (ミラー化されたメタデータ、ストライプ化されたデータ)。
# mkfs.btrfs /dev/device1 /dev/device2 /dev/device3 /dev/device4
ミラー化せずにメタデータをストライプ化します。
# mkfs.btrfs -m raid0 /dev/device1 /dev/device2
データとメタデータの両方に raid10 を使用します。
# mkfs.btrfs -m raid10 -d raid10 /dev/device1 /dev/device2 /dev/device3 /dev/device4
単一デバイス上でメタデータを複製しません。
# mkfs.btrfs -m single /dev/device
ドライブのサイズが異なる場合に、各デバイスの容量を完全に使用するには single オプションを使用します。
# mkfs.btrfs -d single /dev/device1 /dev/device2 /dev/device3
新規デバイスを、すでに作成されたマルチデバイスファイルシステムに追加するには、以下のコマンドを使用します。
# btrfs device add /dev/device1 /mount-point
Btrfs モジュールの再起動または再読み込みの後に、btrfs device scan コマンドを使用して、すべてのマルチデバイスファイルシステムを検出します。詳細は、「btrf デバイスのスキャン」 を参照してください。

6.4.2. btrf デバイスのスキャン

btrfs device scan を使用して、/dev 以下のすべてのブロックデバイスをスキャンし、BTRFS ボリュームをプローブします。ファイルシステム内で複数のデバイスと共に実行されている場合、Btrfs モジュールの読み込み後に実行されます。
すべてのデバイスをスキャンするには、以下のコマンドを使用します。
# btrfs device scan
1 つのデバイスをスキャンするには、以下のコマンドを使用します。
# btrfs device scan /dev/device

6.4.3. 新規デバイスの btrfs ファイルシステムへの追加

btrfs filesystem show コマンドを使用して、すべての btrfs ファイルシステムと、そのファイルシステムに含まれるデバイスを一覧表示します。
btrfs device add コマンドは、マウントされたファイルシステムに新規のデバイスを追加するために使用されます。
btrfs filesystem balance コマンドは、すべての既存デバイス間で割り当てられたエクステントのバランスを取ります (再ストライピング)。
新規デバイスを追加する上記のコマンド例は以下の通りです。

例6.2 新しいデバイスの btrfs ファイルシステムへの追加

最初に、btrfs ファイルシステムの作成とマウントを行います。btrfs ファイルシステムを作成する詳細な方法は 「Btrfs ファイルシステムの作成」、btrfs ファイルシステムをマウントする詳細な方法は 「Btrfs ファイルシステムのマウント」を参照してください。
# mkfs.btrfs /dev/device1
# mount /dev/device1
次に、マウントされた btrfs ファイルシステムに 2 つ目のデバイスを追加します。
# btrfs device add /dev/device2 /mount-point
これらのデバイス上のメタデータとデータは、依然として /dev/device1 にのみ保存されます。これがすべてのデバイスに広がるようにバランスを取る必要があります。
# btrfs filesystem balance /mount-point
ファイルシステムのバランスの調整には時間がかかります。ファイルシステムにあるデータとメタデータをすべて読み取り、それを新規デバイス全体に再度書き込むためです。

6.4.4. btrfs ファイルシステムの変換

非 RAID ファイルシステムを RAID に変換するには、デバイスを追加し、チャンク割り当てプロファイルを変更するバランスフィルターを実行します。

例6.3 btrfs ファイルシステムの変換

この場合のように、既存の単一デバイスシステムの /dev/sdb1 を raid1 システムの 2 つのデバイスに変換し、単一ディスクの障害から保護するには、以下のコマンドを使用します。
# mount /dev/sdb1 /mnt
# btrfs device add /dev/sdc1 /mnt
# btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

重要

メタデータが単一デバイスのデフォルトから変換されない場合、それは DUP のままになります。これは、ブロックのコピーが別々のデバイスに置かれることを保証するものではありません。データが変換されない場合、重複コピーは全く存在しません。

6.4.5. btrfs デバイスの削除

btrfs device delete コマンドを使用して、オンラインデバイスを削除します。また、安全に削除するために使用中のすべてのエクステントをファイルシステムの他のデバイスに再配信します。

例6.4 btrfs ファイルシステム上でのデバイスの削除

最初に、いくつかの btrfs ファイルシステムを作成し、マウントします。
# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mount /dev/sdb /mnt
一部のデータをファイルシステムに追加します。
最後に、必要なデバイスを削除します。
# btrfs device delete /dev/sdc /mnt

6.4.6. btrfs ファイルシステムでの障害のあるデバイスの置き換え

「btrfs デバイスの削除」 は、障害のあるデバイスを削除するために使用できます。ただし、これはスーパーブロックが依然として読み込み可能な場合に限られます。デバイスが見つからなかったり、スーパーブロックが壊れていたりすると、ファイルシステムは低下モードでマウントする必要があります。
# mkfs.btrfs -m raid1 /dev/sdb /dev/sdc /dev/sdd /dev/sde


  ssd is destroyed or removed, use -o degraded to force the mount
  to ignore missing devices


# mount -o degraded /dev/sdb /mnt


  'missing' is a special device name


# btrfs device delete missing /mnt
コマンド btrfs device delete missing は、ファイルシステムのメタデータで記述されているものの、ファイルシステムのマウント時には表示されない最初のデバイスを削除します。

重要

デバイスが見つからないことがあることを考慮しても、特定の RAID レイアウトに必要なデバイスの最小数を下回ることは考えられません。障害のあるものを削除するために、新たなデバイスを追加することが必要になる場合があります。
たとえば、2 つのデバイスからなる raid1 レイアウトで、デバイスが失敗した場合には、以下を実行する必要があります。
  1. 低下モードでのマウント
  2. 新規デバイスの追加
  3. 見つからないデバイスの削除

6.4.7. btrfs ファイルシステムの /etc/fstab への登録

initrd がない場合、または btrfs デバイススキャンを実行しない場合、ファイルシステムのすべてのデバイスを mount コマンドに明示的に渡すと、マルチボリューム btrfs ファイルシステムをマウントすることができます。

例6.5 /etc/fstab エントリーの例

適切な /etc/fstab エントリーの例は、以下のようになります。
/dev/sdb    /mnt    btrfs    device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde    0
UUID (universally unique identifier) を使用することもできます。UUID は、デバイスパスよりも安定性が高くなります。