RAID レベル 1 のチャンク、ext4 ストライド、およびストリップ幅のサイズは?

RAID レベル 1 のチャンク、ext4 ストライド、およびストリップ幅のサイズは?

のマニュアル ページにはmdadm、「[chunk] は RAID0、RAID4、RAID5、RAID6、および RAID10 でのみ意味があります」と記載されています。つまり、raid1 には適用されません。値を渡しても、次のように表示されignoring chunk size、raid 1 が作成された後、次のようになります。

md1 : active raid1 ...
      4883639488 blocks super 1.2 ...
      bitmap: 0/37 pages [0KB], 65536KB chunk

何らかの理由で、5.6Tb のディスク サイズに 65Mb が使用されました。なぜでしょうか?

そして、のマニュアルページにはmkfs.ext4こう書いてある

stride=stride-size = stride-size のファイルシステム ブロックを持つ RAID アレイのファイルシステムを構成します。これは、次のディスクに移動する前にディスクに読み書きされるブロックの数で、チャンク サイズと呼ばれることもあります。これは主に、mke2fs 時にビットマップなどのファイルシステム メタデータの配置に影響し、単一のディスクに配置するとパフォーマンスが低下するのを防ぎます。ブロック アロケータによって使用される場合もあります。

stripe_width=stripe-width = ストライプごとにストライプ幅のファイルシステム ブロックを持つ RAID アレイのファイルシステムを設定します。これは通常、ストライド サイズ * N です。ここで、N は RAID 内のデータ保持ディスクの数です (たとえば、RAID 5 には 1 つのパリティ ディスクがあるため、N はアレイ内のディスクの数から 1 を引いた数になります)。これにより、ブロック アロケータは、データが書き込まれるときに、可能であれば RAID ストライプ内のパリティの読み取り、変更、書き込みを防止できます。

これらはすべて RAID1 にとって何を意味するのでしょうか? 上記のチャンクで取得したのと同じ値を繰り返すだけでよいのでしょうか? RAID1 は「可能な場合」の注記から外れるため、stripe_width を無視するのでしょうか? それともそうではないのでしょうか?

RAID1 で何をすべきかがよくわかりません。RAID0 および RAID5 の他のチュートリアルで見つけた式を使用して、RAID1 アレイの数値を取得しましたが、これは正しくないと思います。mkfs.ext4 -b 4096 -E stride=16384,stripe-width=16384

答え1

何もストライピングしていないので、これで問題ないと思います。この数値は、どのくらいの量のデータが次のディスクに使用されるかを判断するためにのみ必要です。ただし、実質的にはデータ ディスクは 1 つ (およびそのミラー ディスクは 1 つ) しかないため、コントローラーはディスクを変更する必要がなく、問題ないはずです。コントローラーは大きなチャンクの後でのみどのディスクを使用するかを尋ねるため、数値が高いことも理にかなっていると思います。そのため、オーバーヘッドが制限されるはずです。

答え2

RAID1は実質的には単一のディスクと同じなので、RAIDの最適化はできませんが、アプリケーションのI/Oプロファイルと基盤となるディスクの能力(SSD消去ブロックサイズなど)に基づいて、ファイルシステムのメタデータの場所を最適化する方法はあります。私は少し前にこの件について記事を書き、その理由を説明しました。ファイルシステムの配置役に立つと思われる事項。

関連情報