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


14

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


基礎となるディスクをどのように処理していますか?LVMで?
アンディスミス

@ Andy、btrfsはLVM / RAIDスタイルで複数のディスクを処理します。これをチェックしてください。
OneOfOne

おっと...私の悪い。そのために乾杯;-)
アンディスミス

回答:


4

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

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

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

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

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

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

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


個人的には、btrfsがraid5およびraid6をサポートするようになり次第、btrfs fs / arrays / what-do-i-call-thisを再作成することを計画しています。
アーサーウルフェルト

11

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

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

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

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

mkfs.btrfs /dev/sda /dev/sdb

その結果、約4TB(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

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

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

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

2

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


1

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

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

これは何ですdf -h:ショー
は/ dev /自衛隊848G 615G 234G 73%/メディア/の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を使用しています。


少なくともファイルごと、ディレクトリごとに異なるraidレベルをサポートするまで、あなたが望むものをサポートすることはないと思います。raid0(ストライプ)の場合、3つのデバイスすべてで各ファイルの同じサイズの部分を保持するためにbtrfsが必要です。1つのデバイスで500 GBをすべて使用できる場合、どうすればそれができますか?「raid0」の代わりに「single」を使用した場合(投稿時にこのオプションが使用可能かどうかは不明)、btrfsはファイルをどこにも複製しようとせず、すべてのデバイスのすべてのスペースを使用できます。しかし、空襲レベルについては、意味がありません。空襲レベルの定義に違反しようとしています。
ボブポール

気にしないで、私は間違っています。btrfs raid0 / 1は、すべてのデバイスではなく、他の1つのデバイスにのみストライプ/ミラーします。そのため、1TB + 500GB + 500GBは、raid0およびraid1(少なくともLinux 3.0以降)の1TB + 1TBとまったく同じように機能します。Linux 3.0より前には、説明した問題がありました。
ボブポール

1

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

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

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

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


0

この問題はから、のbtrfs-RAID1のセットアップに適用されます落とし穴ページ:

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

繰り返して申し訳ありませんが、新しいデバイスを追加しようとしていますので、必ず確認してください。すべてのソースは、RAID0についてチェックされ、ディスクは同じサイズである必要があることを示します(たとえば、freebsd geom doc: "I / O要求は読み取りまたは書き込みにインターリーブされるため、RAID0ストライプの各ディスクは同じサイズである必要があります並行して複数のディスクに。」)。Btrfsで動作することを確認してください。
fokenrute

申し訳ありませんが、確認できないマルチデバイスbtrfsはありませんが、raid0 + btrfsに同じデバイスサイズを使用することについては何もわかりませんが、十分な時間があれば、新しいディスクを1tb / 1tb、古いディスクをいずれかのパーティションにバックアップし、空の1tbを追加します(機能する場合は2番目のパーティションを追加します)。
OneOfOne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.