web-dev-qa-db-ja.com

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

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

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

私の現在の戦略:

  1. 適切なバックアップを作成します。
  2. 2つのディスクが欠落している劣化した4ディスクRAID 10アレイを作成します。
  3. rsync RAID 10アレイを備えたRAID 1アレイ。
  4. 失敗し、RAID 1アレイから1つのディスクを取り外します。
  5. 利用可能なディスクをRAID 10アレイに追加し、再同期が完了するまで待ちます。
  6. RAID 1アレイを破棄し、最後のディスクをRAID 10アレイに追加します。

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

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

23
Hans Malherbe

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

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

  • md0は、タイプ/レベルRAID1の古いアレイです。
  • md1は、タイプ/レベルがRAID10の新しいアレイです。
  • sda1およびsdb2new、空のパーティション(データなし)です。
  • sda2およびsdc1は(重要なデータを含む)古いパーティションです。

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

バックアップ、バックアップ、バックアップ、バックアップoh、バックアップ

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はすぐに使用できるはずですが、フォーマットしてからマウントする必要があります。

ファイルをコピーします。たとえば、古いRAID 1から新しいRAID 10にデータをコピーするrsync(これはコマンドの例にすぎません。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は引き続き使用可能ですが、他のRAIDメンバーが完全に機能している場合に限られます。

また、これにより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

そして再び-waitmd1のリカバリが完了するまで。

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

7) mdadm設定を更新

/etc/mdadm/mdadm.confを更新してください(md0を削除してください)。

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

update-initramfs -u
8
Mark Turner

Mark Turnerと同じ手順に従いますが、RAIDアレイを作成するときに、不足している2つのディスクについて言及します。

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

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

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

9
user31229

2 TBの2つのディスク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アレイから1つのディスク(ディスク4)を取り外します。

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

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

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

  8. 妻を先に進めなさい。

ステップ7で、ドライブ1、2、[〜#〜]または[〜#〜] 4は、アレイを強制終了せずに失敗する可能性があります(ディスク4の再同期中に)。ドライブ3が故障すると、アレイ上のデータはトーストされます。

6
user75601

Raid1をraid10に移動しましたが、このページは役に立ちましたが、上記の回答にはいくつか欠けているものがあります。特に私の目的はext4の誕生を維持することでした。

セットアップは:

  • msdosおよびmd0の各タイプの2つのraid1ディスク、ext4パーティションおよびmbrとmsdos
  • 新しいプライマリとなる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番目は、デフォルトの「近い」レイドで重複しているようです)

    2. raidのパーティションを設定しました。md127でgpartedセットアップgptを使用していたので、古いパーティション以上のサイズの新しいパーティション(ext4)を追加しました。
  3. 移行する

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

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

      IT for WAIT
      USR1をそのプロセスに送信することで確認できます

      kill -s USR1 <pid>
      
    2. レイドを修正する
      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
      

      IT for WAIT
      で確認できます

      cat /proc/mdstat
      
    2. 2つ目を停止

      mdadm --stop /dev/md0 
      

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

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

      WAIT FOR IT again

1
Summer-Sky

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

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

そう:

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

    mdadm --create/dev/md10 --level raid10 --raid-devices = 4/dev/sdc2行方不明/ 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に使用されます;)

0
undefine