既存のルートパーティションをミラーリングする方法は?

既存のルートパーティションをミラーリングする方法は?

SSDの既存のルート(唯一の)パーティションを別のディスクにミラー化したいと思います。一種のRAID-1でなければならず、非対称*です。これを行う必要があるオプションがあることを知っていますmdadm --write-behind

しかし、既存のパーティションのコンテキストを保存することが可能かどうかはわかりません。同じだと思います。

  • 「スレーブ」パーティションの作成
  • スレーブパーティションが初期化されていないことを通知するように RAID を設定します。
  • プライマリパーティションを複製して初期化します。

しかし、私はとても楽観的かもしれません、そうですか?


*すべての読み取り操作は最初のディスクにアクセスする必要があり、書き込み操作は最初のディスクが書き込まれたときに完了したと見なされるべきです。

答え1

既存のパーティションから始めて、mdraid RAID-1アレイを作成できます。まず、mdadmスーパーブロックのためのスペースを確保する必要があります。つまり、ファイルシステムを少し減らす必要があります。

現在一般的なスーパーブロック形式は次のとおりです。0.9。位置は、パーティションの終わりで128kBから60kBの間、長さは4kB、開始アドレスは64kBの倍数です。したがって、ファイルシステムを128kB、より正確には((device_size mod 64kB) - 1)* 64kBに縮小してください。

ストライプごとに2TB以上が必要な場合は、次のものが必要です。1.0 スーパーブロック形式、まだすべてのディストリビューションでデフォルトではサポートされていません。 1.0スーパーブロックはデバイスの端にあります。これは、ファイルシステムを8kBだけ縮小することを意味します。

これでファイルシステムが縮小したので、アレイを作成できます。既存のデータのみを使用して劣化したアレイを作成することから始めましょう。ファイルシステムがまだマウントされていないことを確認してください。ユースケースでは、書き込み意図ビットマップは別々のパーティションに配置する必要があります。-e 1.0最新バージョン1スーパーブロック形式で使用されます。

mdadm --create /dev/md0 -e 0.9 -l 1 -n 2 \
      --write-behind=256 --bitmap=/path/to/bitmap /dev/sda1 missing

/dev/md0これで、必要に応じて2番目のディスクを追加してファイルシステムをマウントできます。データはバックグラウンドで新しいドライブにコピーされます。

mdadm --add /dev/md0 --write-mostly /dev/sdb1

このようにミラー化された配列を作成しましたが、write-behindモードは使用しませんでした。 write-behindモードがプロセスを無効にするとは思わない。

答え2

私はアイデアがあります。私はこれをループデバイスの小さなファイルシステムでテストしました。この答えでは、/ dev / sdaは重要なデータを含むディスク、/ dev / sdbは新しい空のディスクです。

export DATA_DISK='/dev/sda'
export EMPTY_DISK='/dev/sdb'
  1. 次に、パフォーマンスが低下したRAID1アレイを作成します。空の市場。これは非常に重要です!

    mdadm --create /dev/md0 --level=1 --raid-devices=2 "${EMPTY_DISK}" missing
    
  2. 次に、ミラーリングするディスクのファイルシステムを縮小します。 (サポートされることを願っています。)これは、RAIDアレイにヘッダーがあり、ファイルシステム全体がアレイに収まらないために必要です。

  3. データのコピーパフォーマンスが低下した新しいアレイ

    dd if="${DATA_DISK}" of=/dev/md0 bs=4k
    
  4. ソースディスクをアレイに追加します。

    mdadm --manage /dev/md0 --add "${DATA_DISK}"
    
  5. 同期の進行状況を確認できます。

    watch 'cat /proc/mdstat'
    

関連情報