LinuxソフトウェアRAID 1からRAID 10を成長させる最良の方法


22

mdadm レベル1からレベル10への配列の成長をサポートしていないようです。

RAID 1に2つのディスクがあります。2つの新しいディスクを追加し、アレイを4ディスクRAID 10アレイに変換します。

私の現在の戦略:

  1. 適切なバックアップを作成します。
  2. 2つのディスクが欠落した、劣化した4ディスクRAID 10アレイを作成します。
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove RAID 1アレイから1つのディスク。
  5. 使用可能なディスクをRAID 10アレイに追加し、再同期が完了するまで待ちます。
  6. RAID 1アレイを破壊し、最後のディスクをRAID 10アレイに追加します。

問題は、ステップ5での冗長性の欠如です。

もっと良い方法はありますか?


5
手順0を忘れないでください。すべてのバックアップを作成してください。
アンソニールイス

あなたの手順は正しいと思います。あるセットから別のセットにデータをコピーしている間、冗長性が失われます。
ケビンクファー

劣化した4disk RAID10を作成することは可能ですか?
pauska 09

1
はい、「/ dev / hda missing / dev / hdb missing」を使用します。そうしないと、1つのペア全体が失われ、すべてのペアがバラバラになります。ついでながら、この質問の「受け入れられた答え」は完全に間違っており、機能しません。
ワンブル

また、これを行うための良い方法を探しています。質問で説明されている方法は、これまで見つけた中で最高の方法だと思います。Mark Turnerの答えは、4デバイスに再構成できない2デバイスアレイを作成するため、役に立ちません(他の2つはスペアとしてのみ追加できます)。Suresh Kumarの答えは質問で説明したものと同じですが、まったく同じようには機能しません。欠落しているデバイスは、3番目と4番目ではなく、2番目と4番目でなければなりません。質問のステップについて:ステップ5には完全な冗長性があり、ステップ6にはデータの半分の冗長性があると思います。私は実際に手順が番号を付け直されたことを見る
-aditsu

回答:


8

Linuxソフトレイドを使用すると、2つのディスクのみでRAID 10アレイを作成できます。

以下で使用されるデバイス名:

  • md0 タイプ/レベルRAID1の古いアレイです。
  • md1 タイプ/レベルRAID10の新しいアレイです。
  • sda1そしてsdb2新しい、空のパーティション(データなし)です。
  • sda2そして、sdc1(重要なデータを持つ)古いパーティションです。

ユースケースに合わせて名前を置き換えます。たとえばlsblk、現在のレイアウトを表示するために使用します。

0)バックアップ、バックアップ、バックアップ、バックアップ、バックアップ

1)新しいアレイを作成します(4つのデバイス:2つの既存、2つの欠落):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

この例でsda1は、レイアウトには対応するものがなく、sdb2別の対応するものがないことに注意してください。md1この時点でのデータは安全ではありません(事実上、欠落しているメンバーを追加するまではRAID0です)。

作成された配列のレイアウトおよびその他の詳細を表示するには、次を使用します。

mdadm -D /dev/md1

注意!配列のレイアウトを保存する必要があります。

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2)フォーマットとマウント。/dev/md1すぐに使用可能であるが、フォーマットされた後、マウントする必要がある必要があります。

3)ファイルをコピーします。たとえばrsyncを使用して、古いRAID 1から新しいRAID 10にデータをコピーします(これはコマンドの例にすぎません。rsyncのマニュアルページを参照してください)。

rsync -arHx / /where/ever/you/mounted/the/RAID10

4)古いRAID1(md0)の最初の部分に障害を起こし、新しいRAID10(md1)に追加します

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

注意!これにより、からのデータが消去されsda2ます。md0まだ使用可能でなければなりませんが、他のレイドメンバーは完全に動作した場合にのみ。

また、これによりの同期/回復プロセスが開始されることに注意してくださいmd1。ステータスを確認するには、次のコマンドのいずれかを使用します。

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

回復が完了するまで待ちます。

5) GRUBを新しいアレイにインストールします(起動する場合)。一部のLinuxレスキュー/ブートCDが最適です。

6)新しいアレイで起動します。正常に機能した場合古いアレイを破壊し、残りのディスクを新しいアレイに追加します。

復帰不能点

この時点で、古いmd0配列の最後のメンバーのデータを破棄します。すべてが機能していることを絶対に確認してください。

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

そして再び- 回復が完了するまで待ちmd1ます。

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) mdadm configの更新

更新する/etc/mdadm/mdadm.conf(md0を削除する)ことを忘れないでください。

そして、設定をinitramfsに保存します(再起動後に利用可能になります)

update-initramfs -u

1
4つのディスクはどこにありますか?
ワンブル

え?2台のディスクでアレイを作成し、データをコピーし、1台のディスクを削除してRAID 1に失敗し、そのディスクをRAID10に追加し、RAID10を起動して、動作する場合はRAID1を破棄し、最後のディスクを新しいRAID ....
マーク・ターナー

4
あなたは私のコメントの後で答えを編集しました。また、この手順では、2つのスペアを持つ2ディスクRAID-10を提供します... 4ディスクRAID-10はほとんどありません。RAID-10ボリュームも再構成できません。
ワンブル

2
提供されたとおりにコマンドを実行すると、/ proc / mdstatで示されるように、2つのスペアを備えた2ディスクRAID-10になります。これは、mdadm v2.6.7.2を使用したカーネル2.6.30上にあります。
ワンブル

3
「mdadm:raid10アレイ/ dev / md1の形状を変更できません。」これはmdadmマンページにも記載されています。
ワンブル

9

マークターナーと同じ手順に従いますが、RAIDアレイを作成するときは、2つの欠落ディスクについて言及します

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

そして、他の手順に進みます。

要するに、合計4つのディスク(うち2つが欠落している)でRAID10を作成し、再同期し、その後に他の2つのディスクを追加します。


6

2つの2TBディスクmdadm RAID 1上のLVMから4つのディスクRAID 10(2つのオリジナルディスク+ 2つの新しいディスク)上のLVMへの移行が終了しました。

@aditsuが指摘したように、アレイを作成するときはドライブの順序が重要です。

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

上記のコードは、2つのディスクが欠落した使用可能なアレイを提供します(ディスク全体を使用していない場合は、パーティション番号を追加します)。3番目のディスクが追加されるとすぐに同期が開始されます。3番目の同期が完了する前に4番目のディスクを追加しました。3番目のディスクが終了するまでスペアとして表示され、同期が開始されました。

私の状況の手順:

  1. 適切なバックアップを作成します。

  2. 不足している2つのディスクで劣化した4ディスクRAID 10アレイを作成します(不足しているディスクを#2および4と呼びます)。

  3. 気になるファイルを変更/追加しないように妻に伝えます

  4. 失敗し、RAID 1アレイ(ディスク4)から1つのディスクを取り外します。

  5. ディスク2を空のままにして、物理エクステントをRAID 1アレイからRAID 10アレイに移動します。

  6. アクティブなRAID 1アレイを強制終了し、その空のディスク(ディスク2)をRAID 10アレイに追加し、再同期が完了するまで待ちます。

  7. RAID 1から削除した最初のディスク(ディスク4)をRAID 10アレイに追加します。

  8. 妻にお願いします。

ステップ7では、ドライブ1、2、または 4は、アレイを強制終了せずに(ディスク4の再同期中に)失敗する可能性があると思います。ドライブ3に障害が発生した場合、アレイ上のデータはトーストです。


+1、特にステップ3;)

-1、不明な指示、妻がいない、データを失う
-ZAB

1

私はraid1をraid10に移動しました。このページは私を助けてくれましたが、上記の答えに欠けていることがいくつかあります。特に私の目的は、ext4の出生時間を維持することでした。

セットアップは次のとおりです。

  • 各タイプの2つのraid1ディスクmsdosおよびext4パーティションを持つmd0およびmsdosを持つmbr
  • 新しいプライマリになる新しい2つの新しいディスク(すべて同じサイズ)
  • 4ディスクRAID md127 ext4になりますが、サイズが原因でmbrからgptに切り替える必要がありました
  • 私のホームディスクなので、ブートマネージャーのセットアップは不要です。
  • 私の日常のubuntuを使用している(したがって、外部レスキューディスクを使用していない)
  • gparted、dd、およびmdadmを使用

誰もが前に述べたように:ゼロステップはバックアップである必要があり、プロセスで常に何か問題が発生する可能性があり、極端なデータ損失が発生します

  1. バックアップ

  2. 新しいレイドのセットアップ

    1. 新しいレイドを作成する

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (私はレイアウトが重要であることがわかった.. 2番目と4番目は、デフォルトの 'near' raidで重複しているようだ)

    2. RAIDのパーティションを設定します。md127でgptを設定し、古いパーティション以上のサイズの新しいパーティション(ext4)を追加します。
  3. 移行する

    1. 今データを取得しています...私は最初にrsyncを使用しようとしていましたが、誕生時間を維持できませんでした... ddを使用して古いレイドから新しいレイドにクローンします

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      それを待つ
      あなたがそのプロセスにUSR1を送信して確認することができます

      kill -s USR1 <pid>
      

    2. RAIDを修正するgpartedは素晴らしいツールです:数回クリックするだけでパーティションをチェックして修正し、そのディスクのフルサイズにサイズ変更するように指示します;)

    3. そのパーティションに新しいuuidを設定し、それでfstabを更新します(uuidを変更します)

    4. レイドをconfに保存する

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      古いものを削除します

      vim /etc/mdadm/mdadm.conf 
      
    5. あなたがレスキューシステム上にない場合は再起動します
  4. 古いものを破壊する

    1. 最初のものを失敗し、新しいレイドに追加します

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      そのデバイスでgptを作成し、新しい空のパーティションを設定します

      mdadm /dev/md127 --add /dev/sdc1
      

      それを待つ
      あなたがチェックすることができます

      cat /proc/mdstat
      
    2. 二番目をやめて

      mdadm --stop /dev/md0 
      

      最後のデバイスでgptを作成し、新しい空のパーティションを再度設定します

      mdadm /dev/md127 --add /dev/sdd1
      

      再び待つ


0

私はLVMでそれをやった。初期構成:-sda2、sdb2-および上部にraid1 md1を作成しました。sda1とsdb1は、/ bootパーティションの2番目のraid1に使用されました。-md1は、いくつかのlvmを含むボリュームグループスペースのpvでした。

ディスクsdcとsddを追加し、sda / sdbのようなパーティションを作成しました。

そう:

  1. md10を次のように作成しました:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 missing / dev / sdd2

  2. その上でVGを拡張する:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. ボリュームをmd1からmd10に移動しました:

    pvmove -v / dev / md1 / dev / md10

(完了するまで待ちます)4.ボリュームグループを減らします:

vgreduce space /dev/md1
pvremove /dev/md1
  1. アレイmd1を停止します。

    mdadm -S / dev / md1

  2. 古いmd1からmd10にディスクを追加します。

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. /etc/mdadm/mdadm.confの構成を更新します。

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(そして古いmd1を削除します)

アクティブなボリュームがkvmに使用される、ライ​​ブシステムで行われるすべて;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.