間違ってこの答えに出会いましたが、誰かが興味を持っている場合のために、実験によって裏付けられた答えがあります。
ショートバージョン
ボーナス質問:md(4)
サイズが異なるブロックデバイスからRAIDアレイを作成できますか?はい。ただし、RAIDアレイは最小のブロックデバイスのサイズになります(さらに、独自のハウスキーピングのためのオーバーヘッドもあります)。デバイスのサイズが互いに1%以内にない場合、警告が表示されます。
質問1:md(4)
現在の最小メンバーよりも小さいデバイスを既存のRAIDアレイに追加できますか?いいえ、ごめんなさい。mdadm
あなたのデータを保護するためにそれを行うことを拒否します。
質問2:既存のmd配列のサイズを変更できますか?はい(mdadm
マンプを読んでください!)、しかし努力する価値はないかもしれません。すべてをバックアップしてから、RAIDデバイスの内容のサイズを変更してから、デバイス自体のサイズを変更する必要があります。これらはすべて、エラー、誤算、その他のデータの損失を招く傾向があります。 。
リスクと労力の価値はありません。新しい空のディスクがある場合、サイズを変更する方法と、すべてのデータのコピーを常に1〜2個保持する方法を次に示します(2ディスクRAID1がある場合)。
- その上に新しい
md(4)
アレイを作成します(1つのディスクが欠落しています)。
- アレイの内容の構造を再作成します(暗号、LVM、パーティションテーブル、それらの任意の組み合わせ、ボートに浮かぶものは何でも)。
- 既存のディスクから新しいディスクにデータをコピーします。
- 新しいディスクを使用して再起動します。
- 古いディスクのパーティションテーブルを消去します(または
md(4)
スーパーブロックをゼロにします)。必要に応じて、新しいディスク上のスキームに一致するように必要なパーティションを作成します。
- 古いディスクを新しいアレイに追加します。
- アレイメンバーが同期するのを待ちます。コーヒーを飲みます。ラテンアメリカに飛んで、そのためにあなた自身のコーヒー豆を選んでください。:)(ラテンアメリカに住んでいる場合は、代わりにアフリカに飛ぶ)。
注:はい、これは彼の答えで説明した0xC0000022Lと同じ手法です。
質問3.ドライブが1G短い場合はどうなりますか?:)心配しないでください。交換用ドライブが大きくなる可能性があります。実際には、それは上記のような戦略に支払う 1に障害が発生した時はいつでも安く、より大きなドライブを取得するために(または安価なアップグレード用)。プログレッシブアップグレードを取得できます。
実験的証明
実験セットアップ
まず、いくつかのブロックデバイスを偽造しましょう。私たちは、使用します/tmp/sdx
と/tmp/sdy
(それぞれ100M)、および/tmp/sdz
(99M)。
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
:3つの3つのループバックブロックデバイスとしてファイルをバックアップこのセット/dev/loop0
、/dev/loop1
および/dev/loop2
、マッピングsdx
、sdy
およびsdz
それぞれ。サイズを確認しましょう:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
予想どおり、100M(102400 KiB = 100 MiB)の2つのループデバイスと99M(正確に99×1024 1Kブロック)の1つのループデバイスがあります。
同一サイズのデバイスからRAIDアレイを作成する
ここに行く:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
サイズを確認してください:
sudo grep md100 /proc/partitions
9 100 102272 md100
これは、precicely我々が期待するもの:mdadmのマニュアルで1つの外観はバージョン1.2が128Kを取るメタデータということを思い出させてくれる:128 + = 102400. 102272今度は、第二の実験の準備のためにそれを破壊しましょう。
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
不均等なサイズのデバイスからRAIDアレイを作成する
今回は、小さなブロックのデバイスを使用します。
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
さて、警告を受けましたが、配列は作成されました。サイズを確認しましょう:
sudo grep md100 /proc/partitions
9 100 101248 md100
ここで取得できるのは101,248ブロックです。101248 + 128 = 101376 = 99×1024。使用可能なスペースは、最小のデバイスのスペース(および128K RAIDメタデータ)です。私たちの最後の実験のために、すべてをもう一度ダウンさせましょう。
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
そして最後に:実行中のアレイに小さなデバイスを追加する
最初に、100Mディスクの1つだけでRAID1アレイを作成しましょう。アレイは劣化しますが、実際には気にしません。開始された配列が必要です。missing
キーワードは、「私は、まだあなたのためのデバイスを持っている今、彼のアレイを起動して、私は後で1を追加しますしないでください」と言いプレースホルダです。
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
再度、サイズを確認しましょう:
sudo grep md100 /proc/partitions
9 100 102272 md100
案の定、それは102400ブロックの128K不足です。小さいディスクを追加します。
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
ブーム!許可されず、エラーは非常に明確です。