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 つしかありません。その後、ディスクを追加して RAID 1 に変換しました。次に、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 に関するよくある質問@jeff-schaller のコメントによると、次のように述べています (強調は筆者による):

btrfs は RAID-0、RAID-1、および RAID-10 をサポートします。Linux 3.9 以降では、btrfs は RAID-5 と RAID-6 もサポートしますが、そのコードはまだ実験段階です。

btrfsはまずすべてのデバイスをストレージプールに統合し、ファイルデータが作成されるとチャンクを複製します。RAID-1は現在「すべてのデータのコピーを異なるデバイスに2つ保存これはMD-RAIDやdmraidとは異なり、n個のデバイスに対してn個のコピーを作成します。1TBのデバイス3台で1.5TBの使用可能データが得られます。 なぜなら各ブロックは2つのデバイスにのみコピーされます特定のブロックを書き込むには、正確に 2 つのデバイスに書き込むだけで済みます。読み取りは 1 つのデバイスからのみ行うことができます。

RAID-0 も同様に定義され、ストライプは可能な限り多くのデバイスに分割されます。3 × 1 TB デバイスでは 3 TB の使用可能スペースが得られますが、冗長性はまったくありません。

RAID-10 はこれらの定義に基づいて構築されます。すべてのストライプは 2 つの RAID-1 セットに分割され、それらの RAID-1 セットは 2 つのデバイスに書き込まれます (したがって、最低 4 つのデバイス)。6 × 1 TB デバイスを備えた btrfs RAID-10 ボリュームは、すべてのデータの 2 つのコピーを含む 3 TB の使用可能スペースを生成します。

現時点では、これをテストするのに十分な大きさのドライブが手元にありませんが、私の推測では、比較的大きなドライブがあるため、これまでのところ、btrfs は最初の 2 つのドライブにデータを書き込むことを選択しただけだと思います。今後、ドライブに書き込まれるデータが増えるにつれて、状況は変わると思います。

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

単一の SATA ドライブを備えた VM に Ubuntu Server 16.04 LTS をインストールし、単一の btrfs パーティションに OS をインストールしました。

その後、別の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: 最初に Arch で btrfs-progs バージョン 4.10.2 を使用してこれを試したところ、同じ結果になりましたが、Ubuntu 16.04 にはおそらく動作が異なる古いバージョンが付属しているのではないかと思いました。実際にはバージョン 4.4 が付属していましたが、ファイルシステムの作成やミラーリングなどに関しては同じように動作するようです。

答え2

ボリュームは現在、すべてのディスクを使用しています。Rabban の推測は正しいと思います。最初の 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

関連情報