web-dev-qa-db-ja.com

2台のドライブからデータを失うことなく3x3TBRAID 5アレイを作成するにはどうすればよいですか?

現在、2 TBの3 TB HDDがあり、1つは常にほぼフルで、もう1つは約200 GBが無料です。追加の3TBドライブを購入してRAID 5アレイをセットアップしたいのですが、既存のデータが失われることを心配しています。

_mdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 /dev/sdb2 /dev/sdc2 --spare-devices=1 /dev/sdd2_および_/dev/sdb2_が既存のドライブ(データがある)である_/dev/sdc2_に類似したコマンドを使用して、mdadmがアレイの作成に使用されることを発見しました_/dev/sdd2_は、データがない新しい3TBドライブです。これにより、_/dev/sdb2_および_/dev/sdc2_のデータが失われますか?

私の他のアイデアは、スペアデバイスなしで2x3TB RAID 5アレイを作成することでした。このアレイでは、アレイ内のドライブの1つが空で、もう1つにデータがあります。次に、ファイルを既存のドライブから新しい(6TB)アレイにコピーし、冗長になったドライブをワイプして、アレイのスペアドライブとして追加します。私はこれがうまくいくとは思わないが?

上記のオプションのいずれも機能しない場合、すでにデータがあり、1つが空の2つのドライブでRAID 5アレイを作成する別の方法はありますか?一度に2つの新しい空のドライブを追加した場合、新しいオプションが開きますか?

mdadmバージョン3.3でUbuntuServer16.04.2を使用しています。

3
Joseph Duffy

6TBのデータを保存する2つの3TBディスクがあります。新しい3TBディスクを1つインストールします。

これにより、3 TBのディスクを6 TBのデータを格納するRAID5アレイに変換できます。ただし、プロセスはかなり面倒であり、ルートのどこかでデータを失う可能性はかなり大きいです。

要件を達成するための手順

ディスクをsda(データを含む)、sdb(データを含む)、sdc(新規)として宣言してみましょう。

  1. 友人から数日間ディスクを借りる必要がある場合でも、可能であれば、すべてのデータのバックアップを取ります。
  2. 新しいディスクsdcにRAID1アレイを作成します。 2つのメンバーがあり、そのうちの1つが欠落している
  3. このRAID1アレイにファイルシステムを作成します
  4. sdbから新しいRAID1アレイにデータをコピーします
  5. データを正しくコピーしたことを確認します
  6. RAID1アレイにsdbを追加します
  7. 同期が完了するのを待ちます
  8. リブート
  9. RAID1アレイをRAID5に拡張します。 3つのメンバーがあり、そのうちの1つが欠落しています。これを行うには、追加のディスクに128Kの一時スペースが必要になります。これにはUSBサムスティックを使用することをお勧めします。 RAMディスクを使用しないでください。
  10. sdaから新しいRAID5アレイにデータをコピーします
  11. データを正しくコピーしたことを確認します
  12. RAID5アレイにsdaを追加します
  13. リブート

実施例

これは、3つのファイルをディスクイメージとして使用した実例です。

# Prepare the demonstration
#
dd if=/dev/zero bs=1M count=100 of=sda.img
dd if=/dev/zero bs=1M count=100 of=sdb.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sda.img  # One primary partition
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdb.img  # One primary partition
losetup --show --find --partscan sda.img
losetup --show --find --partscan sdb.img

# At this point we have /dev/loop0 representing the first disk sda, with /dev/loop0p1
# equivalent to a disk partition sda1. Also /dev/loop1 representing the second disk.

mkfs -t ext4 -L sda /dev/loop0p1
mkfs -t ext4 -L sdb /dev/loop1p1
mkdir -p /mnt/sda1 /mnt/sdb1
mount /dev/loop0p1 /mnt/sda1
mount /dev/loop1p1 /mnt/sdb1
cp -a /usr/local/man/. /mnt/sda1/u.l.man/
mkdir /mnt/sdb1/u.l.etc
cp -a /usr/local/bin/. /mnt/sdb1/u.l.bin/
df -h | grep mnt
umount /mnt/sda1
umount /mnt/sdb1


# Create the third disk
#
dd if=/dev/zero bs=1M count=100 of=sdc.img
( echo n; echo p; echo 1; echo; echo; echo w ) | fdisk sdc.img  # One primary partition
losetup --show --find --partscan sdc.img


# Create the RAID1 array and its filesystem
#
mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=default /dev/loop2p1 missing
mkfs -t ext4 -L md1 /dev/md1
mkdir -p /mnt/md1

# Now /dev/loop2 is equivalent to third disk sdc, and /dev/loop2p1 representing sdc1


# Copy the data from sdb to md1
#
mount /dev/loop1p1 /mnt/sdb1
mount /dev/md1 /mnt/md1
cp -a /mnt/sdb1/. /mnt/md1/
umount /mnt/sdb1
umount /mnt/md1


# Complete the RAID1 array
#
mdadm --manage /dev/md1 --add /dev/loop1p1


# Grow the RAID1 array to RAID5
#
mdadm --grow /dev/md1 --level=5 --raid-devices=3 --backup-file=/root/workarea.dat --force
e2fsck -f /dev/md1
resize2fs /dev/md1


# Copy the data from sda to md1
#
mount /dev/loop0p1 /mnt/sda1
mount /dev/md1 /mnt/md1
cp -a /mnt/sda1/. /mnt/md1/
umount /mnt/sda1
umount /mnt/md1


# Add the remaning disk to the RAID5 array
#
mdadm --manage /dev/md1 --add /dev/loop0p1


# All done
#
mdadm --stop /dev/md1
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2
rm sda.img sdb.img sdc.img

ディスク上のライブデータに触れる前に、実際に動作する例を確実に理解する必要があります。言うまでもなく、それはあなたの責任であり、ライブシステムを変更する前にバックアップすることをお勧めします。

6
roaima