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の方がはるかに優れていました。

Source: https://habr.com/ru/post/J212443/


All Articles