Debianでデータを失うことなくraid1からraid10に移行する

2つのディスクのraid1があり、追加のディスクが2つあります。これら2つのディスクをアレイに追加し、データを失うことなくraid10に移行する必要があります。 ブートがraidにないが、ディスクの1つだけにあるという事実によって状況は複雑になります。サーバーのフォールトトレランスを強化するには、ローダーをraid1に移動する必要があります。



説明されているすべてのアクションは、作業中のバトルサーバーで実行されました。 このスキームは普遍的で、他の初期条件に適しています。 同様に、raid10からraid1に移行できます。



私たちが持っています:

オン/ dev / sdd1は/ boot

配列上/ dev / md1は/

配列/ dev / md2はスワップです

ブートローダーの問題を既に解決している場合は、移行セクションにスキップできます。



ブートローダーを転送します



/ dev / sddドライブにデータがあり、ブートローダーがあるため、これを標準と見なします。他のすべてのドライブは空と見なすことができます。 信頼性のため、ブートローダーをraid10に配置せず、フォールトトレランスを高めるために2台のディスクのraid1に残します(3xおよび4xで可能)。



sddと同様に、sdbディスクに1対1のパーティションを作成します。 または、たとえば、手動で

fdisk /dev/sdb
      
      





または単にセクションを複製する

 sfdisk -d /dev/sdd --force | sfdisk /dev/sdb --force
      
      





ブートローダー自体は/ dev / sdd1にあるため、次のように劣化したraid1 / dev / md4を作成します

 mdadm --create /dev/md4 --level=1 --raid-disks=2 missing /dev/sdb1 mke2fs -j /dev/md4
      
      





新しいアレイを作成したら、すべてのレイドに関する情報を更新する必要があります。更新しないと、再起動後にすべてがバラバラになります

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





サーバーを再起動します。再起動後、削除する必要のある奇妙な配列/ dev / md127と、表示されない可能性のある/ dev / md4が表示されます。 代わりに/ dev / md127。 この問題を解決するには、これら2つの配列を停止し、/ dev / md4を再度追加するだけです。

 mdadm -S /dev/md127 mdadm -S /dev/md4 mdadm --examine --scan >> /etc/mdadm/mdadm.conf mdadm --assemble /dev/md4
      
      





信頼性を確保するために、再起動する価値があります。その後、最も重要な部分に進み、作成したアレイからサーバーをロードするようにGRUB2ブートローダーを編集する必要があります。 これを行うには、ブートローダー/ dev / sdd1と新しいアレイ/ dev / md4で古いディスクのUUIDを見つけます

 root@server:~# ls -l /dev/disk/by-uuid total 0 lrwxrwxrwx 1 root root 9 Nov 9 20:56 4d7faa7f-25b3-4a14-b644-682ffd52943b -> ../../sdd1 lrwxrwxrwx 1 root root 9 Nov 9 20:56 29683c02-5bd7-4805-8608-5815ba578b6c -> ../../md4
      
      





/boot/grub/grub.cfgを編集します。 古いUUIDが見つかった場合-4d7faa7f-25b3-4a14-b644-682ffd52943bを新しいUUID-29683c02-5bd7-4805-8608-5815ba578b6cに置き換えます。実際には各検索セクションにあります。

ルートが設定されている場合は常に、交換する必要があります。 たとえば、こんな感じでした

set root='(hd0)'





そして、私たちはこのようになります

set root='(md/4)'







結果の新しい構成の例

insmod raid

insmod mdraid

insmod part_msdos

insmod part_msdos

insmod part_msdos

insmod part_msdos

insmod ext2

ルートを設定= '(md / 4)'

検索--no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4

locale_dir =($ルート)/ grub /ロケールを設定します



セクション### BEGIN /etc/grub.d/10_linux ###は次のようになります



menuentry 'Debian GNU / Linux、with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {

insmod raid

insmod mdraid

insmod part_msdos

insmod part_msdos

insmod part_msdos

insmod part_msdos

insmod ext2

ルートを設定= '(md / 4)'

検索--no-floppy --fs-uuid --set 59f76eb9-00d2-479e-b94e-6eb54fc574d4

echo 'Linux 2.6.32-5-amd64を読み込んでいます...'

linux /vmlinuz-2.6.32-5-amd64 root = / dev / md1 ro quiet

echo '初期RAMディスクを読み込んでいます...'

initrd /initrd.img-2.6.32-5-amd64

}

menuentry 'Debian GNU / Linux、Linux 2.6.32-5-amd64(回復モード)' --class debian --class gnu-linux --class gnu --class os {


今すぐリブートしないことが非常に重要です。そのため、このファイルを変更することで、ブートローダーはダウンロード情報が/ dev / md4にあるとすでに考えており、まだ何もありません。 抜け穴を残すために、復旧モードセクションを編集しないでください。古いデータで起動できますが、このためにはKVM-IP経由でアクセスするか、DC従業員が読み込み時に復旧モードを選択する必要があります。



今、あなたはラムディスクを更新する必要があります、さもなければ、システムは単に起動しません

 update-initramfs -u
      
      





ブートローダーに変更を加えた後、/ bootの内容を作成されたアレイ/ dev / md4に転送できます

 mkdir /mnt/md4 mount /dev/md4 /mnt/md4 rsync -avHxl --progress --inplace --exclude 'lost+found' /boot/ /mnt/md4/ umount /mnt/md4/
      
      





GRUB2ブートローダーが2台のハードドライブ(またはアレイに追加する量に応じて4台)と/ dev / md4アレイにインストールされていることを確認する必要があります。 これを行う最も信頼できる方法は、実行することです

 dpkg-reconfigure grub-pc
      
      





ブートローダーを追加するすべてのディスクを選択する必要があります。



ブートローダーに加えて、システム自体はブートローダーが別の場所にあることを正しく理解する必要があります。このため、ファイル/ etc / fstabおよび/ etc / mtabを編集するだけで十分です。 / bootがマウントされている行に興味があります。 UUIDは必要ありませんが、代わりにraid-arrayの名前を示します。

ファイル/ etc / fstab

 #UUID=7092eb46-9ee8-4a32-b9a7-5d759cc74af0 /boot ext3 defaults 0 2 /dev/md4 /boot ext3 defaults 0 2
      
      





ファイル/ etc / mtab

 #/dev/sdd1 /boot ext3 rw 0 0 /dev/md4 /boot ext3 rw 0 0
      
      





これでリブートできます。すべてを正しく実行すると、システムは/ dev / md4からブートし、/ dev / sdd1は使用されなくなります。 劣化したアレイを終了するだけです

 mdadm /dev/md4 --add /dev/sdd1
      
      







データを失うことなくraid1からraid10に移行する



状況は同じです。2つのディスクと2つの空きディスクのraid1アレイがあり、これをraid10ですべて収集する必要があり、データはそのままです。

新しいディスクの場合、すでにRAIDにあるパーティション構造と同じパーティション構造を作成する必要があります

 sfdisk -d /dev/sdd --force | sfdisk /dev/sda --force sfdisk -d /dev/sdd --force | sfdisk /dev/sdb --force
      
      





On / dev / md4 is / boot

オン/ dev / md1は/

On / dev / md2 is swap



タッチ/ブートせず、raid1のままにします。データは/ dev / md1にのみ保存する必要があります(配列は/ dev / sda6、/ dev / sdb6、/ dev / sdc6、/ dev / sdd6で構成されます)。



データを保存するために、3台のディスクの劣化したraid10アレイを収集し、そこでraid1からデータを転送してから、raid1を分析し、raid10を完了します。



まず、raid1から1つのディスクを削除します。 raid10を作成するには少なくとも3つのディスクが必要です

 mdadm /dev/md1 --fail /dev/sdc6 --remove /dev/sdc6
      
      





劣化したRAID10を/ dev / md3として収集し、マウントします。 再起動後も残るように、必ず新しいアレイに関するレコードを追加してください

 mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/sda6 /dev/sdb6 /dev/sdc6 missing mke2fs -j /dev/md3 mdadm --examine --scan >> /etc/mdadm/mdadm.conf
      
      





配列に関するデータを書き込む前に誤って再起動した場合は、

 mdadm --examine --scan >> /etc/mdadm/mdadm.conf mdadm --assemble /dev/md3
      
      





/ dev / md1から/ dev / md3へのデータ転送

 mkdir /mnt/md3 mount -t ext3 /dev/md3 /mnt/md3 rsync -avHxl --progress --inplace --exclude 'lost+found' / /mnt/md3/ umount /mnt/md3
      
      





すべて、データはraid10に保存され、移行はほぼ完了しました。 次に、古い/ dev / md1の代わりに新しい/ dev / md3を使用するようにシステムに指示する必要があります。 これを行うには、/ etc / fstabおよび/ etc / mtabファイルを編集します。

ファイル/ etc / fstabで、UUID / dev / md1をUUID / dev / md3に置き換える必要があります

 ls -l /dev/disk/by-uuid lrwxrwxrwx 1 root root 9 Nov 9 20:56 29683c02-5bd7-4805-8608-5815ba578b6c -> ../../md3
      
      





以下を取得します

 #UUID=4d7faa7f-25b3-4a14-b644-682ffd52943b / ext3 errors=remount-ro 0 1 UUID=29683c02-5bd7-4805-8608-5815ba578b6c / ext3 errors=remount-ro 0 1
      
      





ファイル/ etc / mtabでは、どこでも/ dev / md1の代わりに/ dev / md3に置き換えるだけです。

 /dev/md3 / ext3 rw,errors=remount-ro 0 0
      
      





/ bootまたは/のデバイスが変更された場合、ブートローダーの設定/boot/grub/grub.cfgを編集してupdate-initramfsを実行する必要があります。そうしないとロードされません。



ファイル/boot/grub/grub.cfgで、実際には4d7faa7f-25b3-4a14-b644-682ffd52943b(/ dev / md1の古いUUID)が新しいUUID-29683c02-5bd7-4805-8608-5815ba578b6cに置き換えられますこれは検索セクションにとって重要です。

セクション内

### BEGIN /etc/grub.d/10_linux ###





ルート= / dev / md1をルート= / dev / md3に置き換えます



そしてその後は義務的です

 update-initramfs -u
      
      





ルート/が新しい配列/ dev / md3になり、古いraid1への呼び出しがなくなるように再起動する必要があります。 現在raid1にあるドライブ(/ dev / sdd6)を追加して、raid10の作成を終了します。 ただし、まず停止してセクションをクリアする必要があります

 mdadm -S /dev/md1 mdadm --zero-superblock /dev/sdd6
      
      





そして、ディスクをraid10アレイに追加して、アレイに関するデータを更新するだけです

 mdadm /dev/md3 --add /dev/sdd6 mdadm --examine --scan >> /etc/mdadm/mdadm.conf
      
      





これで、raid1からraid10へのデータ損失なしの移行が完了しました。



PS結果として、私はraid1に戻りました。 私の場合、raid1からraid10への移行自体は印象的な結果をもたらさず、4つのディスクからのraid1の方がはるかに優れていました。



All Articles