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