web-dev-qa-db-ja.com

1つのデバイスでソフトウェアRAID 1を作成できますか

ミラーを作成する単一のディスクがあります。このディスクをsdaと呼びましょう。同じサイズの別のディスクを購入しました。これをsdbと呼びます。 sdaおよびsdbには、それぞれsda1およびsdb1と呼ばれる1つのパーティションがあります。

RAIDを作成するとき、sdaを完全に消去して再起動するのではなく、sdbでミラーリングを開始するだけです。私の考えは次のとおりです。

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... sdbディスクなしでアレイを作成し、次のようなものを実行します(次のコマンドを大声で考えています。この手順を実行する方法がわからないためです)。

mdadm /dev/md0 --add /dev/sdb1

sdb1sda1と同様にフォーマットされていると想定されています

これは可能ですか?

20
whoami

タイトルの質問に対する単純な答えは「はい」です。しかし、あなたが本当にやりたいことは、既存のデータをミラーリングする次のステップです。

既存のディスクを変換することは可能ですが、メタデータの場所が原因で、前述のように危険です。新しいディスクで空の(壊れた)ミラーを作成し、既存のデータをそのディスクにコピーする方がはるかに優れています。次に、それが機能しない場合は、ミラーリングされていないオリジナルに起動します。

最初に、/dev/sdb1を新しい/dev/md0として初期化し、ドライブが欠落している状態でファイルシステムを初期化します(ext3を想定していますが、選択は自由です)。

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

現在、/dev/sda1はルートファイルシステム(/)である可能性が高いため、安全のために、ライブCD、レスキューディスク、または両方にアクセスできるその他の起動可能なシステムから次の手順を実行する必要があります/dev/sda1および/dev/md0ですが、シングルユーザーモードにドロップすることでこれを成功させています。

/dev/sda1のファイルシステムの内容全体を/dev/md0にコピーします。例えば:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

/etc/fstabを編集するか、次回の起動時に/dev/md0ではなく/dev/sda1がマウントされるようにします。システムはおそらく/dev/sda1からブートするように設定されており、ブートパラメータはおそらくこれをルートデバイスとして指定しているため、再起動するときに手動でルートを/dev/md0に変更する必要があります(/dev/sda1を想定)ルートでした)。再起動後、/dev/md0がマウントされていること(df)と、機能低下ミラーとして実行されていること(cat /proc/mdstat)を確認します。 /dev/sda1を配列に追加します。

mdadm /dev/md0 --add /dev/sda1

再構築によって/dev/sda1が上書きされるため、使用するメタデータのバージョンは無関係です。いつものように、大きな変更を行う場合は、フルバックアップ(可能な場合)を作成するか、少なくとも再作成できないものが安全であることを確認してください。

ルートとして/dev/md0を使用するにはブート構成を再生成する必要があり(/dev/sda1がrootの場合)、mdadm.confを再生成して/dev/md0が常に開始されるようにする必要があります。

27
StarNamer

もちろん、2番目のディスクが現在missingであることを指定して作成できます。

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
5
eppesuig

出来るよ。あなたは少し注意する必要がありますが、これは危険ではありませんmis何かをタイプミスしないように非常に注意していて、セットアップに落とし穴が残っていない場合。

実際のシステムでは操作を行わないことを強くお勧めします。場合によっては可能ですが、特に注意が必要です。 Parted または SystemRescueCD などのliveCD/liveUSBから起動します。

最初に、ボリュームを少し縮小して、mdraidメタデータ(スーパーブロック)のためのスペースを空ける必要があります。 いくつかのメタデータ形式 があります。ディスクの最後にメタデータを配置する形式を使用する必要があります。 (セットアップによっては、スーパーブロックを最初に配置するのに十分なスペースがある場合がありますが、それはより複雑でリスクが発生しやすいので、それについて説明します。)

スーパーブロック用のスペースを確保するために、ブロックデバイスからの最後の128kBが未使用であることを確認する必要があります。したがって、/dev/sda1のファイルシステムを縮小する必要があります。これがext2/ext3/ext4ファイルシステムの場合、tune2fs /dev/sda1を使用して現在のファイルシステムサイズを取得し、resize2fs /dev/sda1 NNNを実行します。ここで、NNNはそのサイズから128kBを引いたものです。代わりに Parted を使用してこれを行うことができます。 extNファイルシステムを縮小する必要がある場合は、最初にアンマウントする必要があります。 btrfsファイルシステムはライブで縮小できます。

ブロックデバイスの最後の128kBが解放されていることを確認したら、mdadm --createを呼び出してRAID-1ボリュームを作成します。これは、スーパーブロック以外のボリュームのどの部分にも触れません。最初は、ボリュームには単一のコンポーネントがあります。他のすべてのコンポーネントは障害として設定されています。 --level=1(または同等の-n 1)(このアプローチはRAID-1でのみ機能します)および--metadata=0.9または--metadata=1.0(デフォルトのスーパーブロック形式1.2はスーパーブロックをデバイスの先頭。データを上書きする可能性があります)。 --raid-devices-n)の引数は、RAIDボリューム内のコンポーネント(欠落しているものも含む)の数です。

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

これで、アレイをアクティブにして、他のコンポーネントを追加できます。

mdadm --add /dev/md0 /dev/sdb1

ブートローダーに関する注意:Grub2はLinux RAID-1を理解し、そこから起動できます。 RAIDを認識しないGrub1などのブートローダーはミラーボリュームから透過的に読み取られますが、ブートローダーが読み取っているドライブに障害が発生すると、システムは起動しません。 RAIDボリュームがパーティション上にある場合は、必ず両方のドライブにGrubのブートセクターをインストールしてください。

¹ バックアップがあることを確認してください。 「危険ではない」とは、「データを賭ける」のではなく、「おそらくそれらを必要としない」ことを意味します。

ディスクミラーリングのセットアップ方法(RAID-1)