btrfs raid1はすべてのディスクを使用しませんか?

btrfs raid1はすべてのディスクを使用しませんか?

Ubuntu 16.04には3つのディスクを持つBtrfs raid1があります。しかし、ディスク3つをすべて使うのではなく、2つだけ使っているようです。この問題をどのように解決するのですか?

root@one:~# btrfs fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
            Total devices 3 FS bytes used 54.77GiB
            devid    1 size 2.73TiB used 56.03GiB path /dev/sda2
            devid    2 size 2.73TiB used 56.03GiB path /dev/sdc2
            devid    3 size 2.59TiB used 0.00B path /dev/sdb3

変換フィルタを実行してみましたが、/dev/sdb3はまだ使用されていません。

root@one:~# btrfs balance start -dconvert=raid1 -mconvert=raid1 /top/raid/
Done, had to relocate 112 out of 112 chunks

root@one:~# btrfs fi df /top/raid/
Data, RAID1: total=55.00GiB, used=54.40GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=373.06MiB
GlobalReserve, single: total=128.00MiB, used=0.00B

最初は、Ubuntuサーバーが1つのディスクのみインストールされました。その後、ディスクを追加してraid1に変換しました。その後、3番目のディスク/dev/sdb3を追加し、再バランスを試みました。 3番目のディスクは使用されません。

root@one:~# btrfs --version
btrfs-progs v4.4

/dev/sdb3 をうまくマウントできます。

root@one:~# mount /dev/sdb3 /mnt
root@one:~# ll /mnt
total 16
drwxr-xr-x 1 root    root     74 Apr 13 09:37 ./
drwxr-xr-x 1 root    root    200 Apr 12 21:19 ../
drwxr-xr-x 1 root    root    200 Apr 12 21:19 @/
drwxr-xr-x 1 root    root    152 Apr 12 15:31 @home/
drwxrwx--t 1 root    root     36 Apr 13 09:38 @samba/

root@one:~# btr fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
        Total devices 3 FS bytes used 54.82GiB
        devid    1 size 2.73TiB used 56.03GiB path /dev/sda2
        devid    2 size 2.73TiB used 56.03GiB path /dev/sdc2
        devid    3 size 2.59TiB used 0.00B path /dev/sdb3

答え1

編集する:

気づく:btrfs FAQ@jeff-schallerがコメントしたように、強調表示は次のとおりです。

btrfs は RAID-0、RAID-1、RAID-10 をサポートします。 Linux 3.9以降、btrfsはRAID-5とRAID-6もサポートしていますが、コードはまだ実験的です。

btrfs は最初にすべてのデバイスをストレージプールに結合し、次にファイルデータを生成しながらブロックをコピーします。 RAID-1は現在異なるデバイス上のすべてのデータの2つのコピーこれは、nデバイス用のnコピーを作成するため、MD-RAIDとdmraidとは異なります。btrfs RAID-1では、3つの1TBデバイスで1.5TBの利用可能なデータを取得します。。なぜなら各ブロックは2つのデバイスにのみコピーされます。、与えられたブロックを書き込むには、2つのデバイスにのみ書き込みが必要です。読み出しは1つのデバイスでのみ開始できます。

RAID-0 は、ストライプができるだけ多くのデバイスに分散され、同様に定義されます。 3×1TBデバイスは3TBの空き容量を提供しますが、冗長性はまったく提供しません。

RAID-10はこれらの定義に基づいて構築されました。各ストライプは正確に2つのRAID-1セットに分割され、これらのRAID-1セットは正確に2つのデバイス(したがって少なくとも4つのデバイス)に書き込まれます。 6×1TBのデバイスを含むbtrfs RAID-10ボリュームは、すべてのデータの2つのコピーと3TBの空き容量を提供します。

現在これをテストするのに十分なドライブはありませんが、私の推測では比較的大きなドライブがあるので、btrfsはこれまで最初の2つのドライブにデータを書き込むことを選択しただけです。ドライブにより多くのデータが書き込まれると、将来このような状況が変わると予想されます。

より小さいドライブを使用したテストに興味がある場合:

単一のSATAドライブを持つ仮想マシンにUbuntu Server 16.04 LTSをインストールし、単一のbtrfsパーティションにオペレーティングシステムをインストールしました。

その後、別のSATAドライブを追加し、パーティションを分割して実行し、btrfs device add /dev/sdb1 /raid1に変換しながらバランスをとりました。btrfs balance start -dconvert=raid1 -mconvert=raid1 /

/dev/sdc1 デバイスに対してこの操作を繰り返しました。結果は同じです。 3つのドライブにまたがるbtrfsがあります。また、2GiBファイルを割り当てましたが、実際に3つのディスクすべてからアクセスできます。鉱山はbtrfs fi sh次のように表示されます。

Label: none  uuid: cdfe192c-36da-4a3c-bc1a-74137abbb190
    Total devices 3 FS bytes used 3.07GiB
    devid    1 size 10.00GiB used 5.25GiB path /dev/sda1
    devid    2 size 10.00GiB used 5.03GiB path /dev/sdb1
    devid    3 size 8.00GiB used 2.28GiB path /dev/sdc1

mkfs.btrfsをどのように呼び出すのですか? btrfs-progsのバージョンは何ですか?

# btrfs --version
btrfs-progs v4.4

私はあなたの状況を再現することはできません。 /dev/sdb3をマウントしようとするとどうなりますか?

パーティションを分割できる仮想マシンまたは空きディスクがある場合は、3つのパーティションを作成して次のことを試してください。

Ubuntu 16.04 VMを作成し、/ dev / vdaをそれぞれ2GiBの3つのパーティションに分割しました。

# mkfs.btrfs -d raid1 -m raid1 /dev/vda{1..3}

Label:              (null)
UUID:               0d6278f7-8830-4a73-a72f-0069cc560aaf
Node size:          16384
Sector size:        4096
Filesystem size:    6.00GiB
Block group profiles:
  Data:             RAID1           315.12MiB
  Metadata:         RAID1           315.12MiB
  System:           RAID1            12.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  3
Devices:
   ID        SIZE  PATH
    1     2.00GiB  /dev/vda1
    2     2.00GiB  /dev/vda2
    3     2.00GiB  /dev/vda3

# btrfs fi sh

Label: none  uuid: 0d6278f7-8830-4a73-a72f-0069cc560aaf
    Total devices 3 FS bytes used 112.00KiB
    devid    1 size 2.00GiB used 614.25MiB path /dev/vda1
    devid    2 size 2.00GiB used 315.12MiB path /dev/vda2
    devid    3 size 2.00GiB used 315.12MiB path /dev/vda3

/dev/vda1 をマウントし、ここにファイルを書き込み、次に /dev/vda2 または /dev/vda3 をマウントし、ファイルが存在することを確認します (必ず必要です)。

PS:まず、btrfs-progsバージョン4.10.2を使用してArchで試してみましたが、同じ結果が得られましたが、Ubuntu 16.04は動作が異なる古いバージョンでリリースされた可能性があります。 v4.4としてリリースされましたが、ファイルシステムの作成やミラーリングなどの点で同じように動作することがわかりました。

答え2

これで、ボリュームはすべてのディスクを使用しています。私はラバンの推測が正しいと思います。最初の2つのディスクが3番目のディスクよりも大きいので、「btrfsはこれまで最初の2つのドライブにデータを書き込むことを選択しました」

root@one:~# btrfs fi sh
Label: none  uuid: 3880b9fa-0824-4ffe-8f61-893a104f3567
        Total devices 3 FS bytes used 151.00GiB
        devid    1 size 2.73TiB used 148.03GiB path /dev/sda2
        devid    2 size 2.73TiB used 148.03GiB path /dev/sdc2
        devid    3 size 2.59TiB used 8.00GiB path /dev/sdb3

root@one:~# btrfs dev usage /
/dev/sda2, ID: 1
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

/dev/sdb3, ID: 3
   Device size:             2.59TiB
   Data,RAID1:              8.00GiB
   Unallocated:             2.58TiB

/dev/sdc2, ID: 2
   Device size:             2.73TiB
   Data,RAID1:            147.00GiB
   Metadata,RAID1:          1.00GiB
   System,RAID1:           32.00MiB
   Unallocated:             2.58TiB

関連情報