デバイスのサイズが異なる場合、RAID0は内部でどのように機能しますか?

デバイスのサイズが異なる場合、RAID0は内部でどのように機能しますか?

驚いたことに、CentOS 7インストーラを使用すると、約17GBのディスクと26GBのディスクで構成されたRAID0デバイスを作成できました。許可されていても論理サイズは2 * min(17 GB, 26 GB) ~= 34 GB

$ cat /sys/block/md127/md/dev*/size
16955392
26195968
$ df -h |grep md
/dev/md127   44G 1.9G 40G 5% /

同じディスクケースと比較して、mdサブシステムのパフォーマンスはどうですか?これは、2つのディスクに対して単純なバランスストライピングを実行できないためです。

答え1

raid.wiki.kernel.org説明する:

RAID0 /ストライプモード:デバイスは同じサイズでなければなりません(必ずしもそうではありません)。 [...]あるデバイスが他のデバイスよりもはるかに大きい場合、RAIDデバイスは余分なスペースを利用し続けますが、RAIDデバイスの高度な書き込み中にこの大きなディスクにのみアクセスします。もちろん、パフォーマンスが低下します。

この表現は少し厄介ですが、mdadmのウィキペディアページそれはこう言います:

RAID 0 – ブロックレベルのストライピング。 MDはさまざまな長さのデバイスを処理でき、より大きなデバイスの余分なスペースはストライプされません。

したがって、サイズがそれぞれ4と2の「ブロック」の2つのディスクに単純化されている場合は、次のような結果が得られます。

disk0  disk1
00     01
02     03
04
05

「チャンク」04-05の読み取りはdisk0でのみ実行する必要があるため、ストライピングの利点はありません。mdデバイスは分割可能である必要があるため、デバイスの始まりと終わりにパーティションをテストして速度の違いが目立つことを確認できます。

答え2

マニュアルページからmd(4):

   The RAID0 driver assigns the first chunk of the array to the
   first device, the second chunk to the second device, and so on
   until all drives have been assigned one chunk.  This collection
   of chunks forms a stripe.  Further chunks are gathered into
   stripes in the same way, and are assigned to the remaining space
   in the drives.

   If devices in the array are not all the same size, then once the
   smallest device has been exhausted, the RAID0 driver starts
   collecting chunks into smaller stripes that only span the drives
   which still have remaining space.

答え3

はい、パフォーマンスに影響します。あなたの場合、2つのディスクに2つのパーティションがあります。最初のパーティションは17GB、2番目のパーティションは26Gです。

raid0ディスクの最終サイズは約17+26=43GBです。最初の2 * 17 = 34 GBを書き込むときのパフォーマンスは通常と同じです。単一ディスクの約2倍です(十分なバススループットを想定)。最後の26〜17 = 9GBの書き込み時のパフォーマンスは1ディスクと同じです。

したがって、主にパフォーマンス上の理由でraid0を使用する場合は、パーティションサイズ間の大きな違いを避ける必要があります。

より大きなパーティションを作成するために小さいパーティションを使用するのと同じくらい簡単に使用することは、通常問題ではありません。この場合、いくつかの性能改善のさらなる利点を得ることができる。パフォーマンスに興味がない場合は、linear代わりにraid0ハードウェア障害が発生したときにデータをより簡単に回復できます。

関連情報