web-dev-qa-db-ja.com

サイズの異なるディスクを備えたマルチデバイスBTRFSファイルシステム

1つの500GBディスクで構成される既存のBTRFSファイルシステムがあり、ホームサーバーのストレージ容量を増やすために2TBのディスクを購入したばかりで、新しいディスクを既存のファイルシステムに追加したいと思っています。私が読んだものから、BTRFSセットアップでは、大きいディスクと小さいディスクのサイズの違いを無駄にせずに異なるサイズのディスクを処理できないようですが、私はBTRFSを初めて使用したため、見落としている可能性があるため、セットアップがありますスペースを無駄にすることなく、ファイルシステム内の2つのディスクを組み合わせることができますか?

14
fokenrute

Btrfsはデータとメタデータに異なるRAIDレベルを使用できます:

デフォルト(1つのディスクでも)は、メタデータ(ディレクトリなど)のraid1とデータのraid0です。

これを変更しなかった場合は、2番目のディスクを追加して再バランスを実行しても問題はありません。メタデータのみが両方のディスクにコピーされるためです(btrfs filesystem df /でメタデータサイズを確認できます)。どちらかのディスクで障害が発生すると、データが失われることに注意してください。

2TBのディスクは500gよりもはるかに大きいので、新しいものを追加してから古いものを削除すると、おそらくより良い確率が得られます(特定の1つのドライブが故障する確率は、いずれかのドライブの確率よりもはるかに少ないです)失敗)。

後でRAIDアレイ(より類似したサイズのドライブを使用)を計画している場合は、データとメタデータの両方にraid1を使用して新しいドライブにファイルシステムを再作成し、すべてをコピーすることができます。その後、より多くのお金があるときに2つ目の2 TBドライブを購入します。

ps:単一のドライブでraid1を使用すると、データはその1つのドライブの2つの場所に保存され(破損を防ぐため)、ストレージスペースが削減されます(メタデータにとって非常に優れたアイデアです)。

pss:真剣に、メタデータにraid1を使用しないように誘惑されないでください。 psss:btrfsがレイドレベルを動的に変更できるようになる可能性が非常に高くなります。

4
Arthur Ulfeldt

マルチデバイスBtrfsファイルシステムのデータブロックに使用するプロファイルによって異なります。

  • RAID0(データブロックのデフォルト)を使用する場合、各ディスクは、アレイ内の最小のディスクの容量までしか使用できません。

  • データブロックに「単一の」プロファイルを使用すると、各ディスクはその最大容量までいっぱいになります。例えばmkfs.btrfs -d single /dev/sda /dev/sdb

2 TBと3 TBのディスクを備えたファイルサーバーがあります。 USBフラッシュドライブからUbuntu 12.10を起動します。最初に、-d singleオプションなしでBtrfsファイルシステムを作成しました。

mkfs.btrfs /dev/sda /dev/sdb

その結果、約4 TBしか保存できませんでした(3.45バイナリTBファイルデータ)。

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

3TBドライブのused 1.82TBに注意してください。

次に、「balance」コマンドを使用して、データブロックをRAID0から「single」プロファイルに変換しました。

btrfs balance start -dconvert=single /mnt/btrfs1

4TBデータのバランスを取るのに非常に長い時間(約30時間)がかかりました。しかし、それが完了した後は、5TB全体(4.36バイナリTBファイルデータ))を使用できました。

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1
12

Ubuntuでbtrfsを使用して複数のデバイスを使用しましたが、問題なく動作しました。 btrfsは実際には標準のRAIDレベルを実装しないことに注意してください。オプションのストライピングとミラーリングを実装していますが、本当のRAIDは実装していません。

2
Michael Trausch

Btrfsでサイズの異なるドライブを組み合わせることができます。
しかし、現在btrfsはENOSPC(デバイスにスペースが残っていません)をうまく処理しません。

例えば。 RAID0(ストライプ)アレイに3つのドライブを取り付けました。 1x500GB、1x250GB、1x160GB。
800〜900GBのディスク容量があると想定します。

これは何 df -hショー:
/dev/sdf 848G 615G 234G 73%/ media/btrfs

しかし、配列にこれ以上データを格納することはできません。 (スペースがありません)

btrfs filesystem df /media/btrfsはこれを示しています:
データ:合計= 612.51GB、使用済み= 612.51GB
メタデータ:合計= 1.62GB、使用済み= 990.73MB
システム:合計= 12.00MB、使用済み= 48.00KB

リバランスでさえ助けにはならなかった。

メーリングリストで私はこのコールキュレーションを見ました:
最小ドライブのサイズ*アレイ内のドライブ数
(少し空きがありますが、160GB * 3 = 480GBではなく612GB)

現在の開発状況では、btrfsが1つの配列で異なるサイズをサポートしていても、すべてのスペースを使用できない可能性があります。

私は2.6.35-22-genericカーネルでUbuntu 10.10を使用しています。

1
torusJKL

更新:以下の答えはLinux 3.0がリリースされる前に書かれました。 Linux 3.0には、準ラウンドロビンパッチが含まれています

データのミラーリングまたはストライピングを行う場合、2番目のミラーまたはストライプチャンクを空き容量のある別のデバイスに割り当てる必要があります。 BTRFSは、デバイスにチャンクをラウンドロビン方式で割り当てます。これにより、異なるサイズのデバイスがある場合、スペースが失われる可能性があります。

これを改善するために、パイプラインに quasi-round-robin patch があります。もちろん、500 GBと2 TBのディスクがある場合、異なるデバイス上のすべてのチャンクをペアにすることは依然として不可能です。このパッチは、1 x 1TB + 2 x 500GBのように、各小さなディスクが他の小さなディスクの代わりに大きなディスクでミラーリング/ストライプすることを好む状況を対象としています。

あなたの状況では、私はあなたのデータ(mkfs.btrfs -d single)。そのモードではチャンクはペアリングされないので、異なるサイズのデバイスでも問題はないと思います。私はそれをテストしていません。

1
Wim Coenen

この問題は Gotchas ページのbtrfs-raid1セットアップにのみ適用されます。

  • 割り当てはラウンドロビンベースで行われます。不一致のドライブ(異なるサイズのボリューム)で構成されるボリュームにraid1戦略がある場合、単一の最大のドライブに多くのスペースを空けたまま、小さいボリュームがいっぱいになる可能性があります。これが問題であることを確認できます もし 「df」と「btrfs filesystem df [mountpoint]」の間に矛盾がある もし 後者のコマンドは、「合計」と「使用済み」が「データ」行で同じであることも示しています。リバランスにより、この問題が緩和される場合があります。 (2.6.33)
    • この方法でボリュームがいっぱいになると、リバランスによってENOSPC(「デバイスにエラーNO SPaCeが残っています」)がすぐに発生する可能性があります。この行き詰まりを解決するには、比較的大きなファイルを削除する必要があります。そうしないと、リバランスが成功します。 (2.6.33)
    • リバランスにより、プロンプトが長時間にわたって非常に激しいCPU使用率を引き起こす可能性があります。 (2.6.34および2.6.35)
0
OneOfOne