問題の背景
btrfsの最大の利点の1つは、さまざまなサイズのドライブを効率的に使用できることです。しかし、デフォルトのRAID-0(ストライピング)プロファイルではそうではないことがわかりました。
8TB、4TB、4TBの3つのドライブでRAID-0を使用し、合計16TBを取得したいと思います。 8TBの前半は、最初の4TBドライブと2番目の変更でストライピングできます。半分は2番目の4TBドライブを使用してストライプできます。
しかし(非常に役に立つ)によると、Btrfsディスク使用量計算機12TBしか入手できません。各ブロックは3つのドライブすべてにストライプされ、8TBドライブに4TBの未使用スペースが残ります。この質問に対する回答でも言及されています。ドライブサイズの異なるbtrfs RAID0を使用すると、空き容量が不足します。。
イラスト
マニュアルには何と書かれていますか?
よく読んだ後mkfs.btrfsこれはデフォルトのRAID-0プロファイル設定によるものです。最低限度でデバイス数は2つですが、上限はありません。これは、データブロックがプール内で見つけることができるだけのデバイスにわたってストライプされることを意味します。これは間違いなく合理的な選択であり、完全に理解されています。
btrfsディスク使用量計算機を使用している間、次のように設定すると望ましい結果が得られることがわかりました。最高デバイス数は2です。追加の速度のために、2つのドライブにわたってデータを削除しますが、使用可能なスペースをより多く使用できるように、ストライピングを2つのデバイスに制限します。私にとって、これは非常に有利なトレードオフであり、そう思う人は私だけではありません。
質問
私は道が見つかりませんでした。変化ファイルシステム作成時の最大デバイス数。
- 可能ですか?
- では、どうすれば変更できますか?
- もし私がするこれを変更すると、他のツールがレイアウトを理解できますか?
答え1
直接はできませんが、いくつかの幸運と努力があれば可能です。
問題は、現在(btrfs-progs 5.7ベース)これを行う方法がないことですmkfs.btrfs
。オンライン空間計算機には、デフォルトのRAIDレベルでのこの効果に関する注意事項も含まれています。
これは現在btrfsでサポートされている唯一のパラメータ設定です。
mkfs.btrfs
2つのドライブ、btrfs device add
3番目のドライブ、およびbtrfs balance
(8 + 4 + 4 GiB LVを「ドライブ」として使用)のさまざまな組み合わせを試しました。残念ながら、FSに12GiB以上のデータを格納できることが多かったが、必要な16GiBに近いことはなかった。によるとbtrfs device usage
、私は常に2つと3つのドライブにわたってブロックが混在してストライプされています。
つまり、可能mkfs.btrfs
コードを修正することで、カスタムストリップカウントを使用できます。ブロックレイアウトはbtrfs-progsbtrfs_alloc_chunk()
で設定されます。volume.c
この関数呼び出しは、init_alloc_chunk_ctl()
RAIDプリセットをストライプ数に変換します。min_stripes
RAID0の場合は、2 num_stripes
(実際にブロックを作成するために使用されたストライプの数)に設定しますmin(ctl->max_stripes, ctl->total_devs)
。max_stripes
に設定されているブロックタイプに関する制限は次のとおりですbtrfs_alloc_chunk()
。
したがって、このルーチンを変更してnum_stripes
目的の値(2)に制限し、これらの変更を使用して目的mkfs.btrfs
の方法で動作するファイルシステムを作成できます。この仮説を徹底的にテストする時間がなかったため、カーネルやbtrfs-progsでバグが発生する可能性がありますが、IMHOでは動作する可能性が高いです。結局のところ、修正されていないツールを使用してデバイスを追加/削除するとき(上記のテストなど)、必要なディスクレイアウトは依然として頻繁に発生するため、原則としてサポートする必要があります。しかし、レイアウトが後でdevice add
/再び台無しになってもあまり驚かないでしょうbalance
。
答え2
これらのパラメータの必要性は、実装価値のあるプロジェクトのアイデアとして登録されました。
https://btrfs.wiki.kernel.org/index.php/Project_ideas#Limits_on_number_of_stripes_.28stripe_width.29
2022年2月12日現在、誰もこれに取り組んでいると主張せず、メーリングリストにパッチが送信されていません。
答え3
これはあなたの質問に対する答えですが、タイトルに尋ねる質問ではありません。
Linux 5.15では、btrfsは、単一のドライブでRAID0(「パフォーマンスが低下したraid」)を許可します。。これにより、パフォーマンス分布は最適ではないかもしれませんが、16TB全体を使用できます。
最初の12TBのストライプ幅は3(質問に示すように)、最後の4TBのストライプ幅は1です。
お客様のニーズに応じて、これは肯定的または否定的です。