2つのドライブのデータを失うことなく3x3TB RAID 5アレイを作成する方法は?

2つのドライブのデータを失うことなく3x3TB RAID 5アレイを作成する方法は?

現在、2つの3TBハードドライブがあり、そのうちの1つはほぼいっぱいで、もう1つは約200GBの空き容量があります。 3TBドライブを追加購入してRAID 5アレイを設定したいのですが、既存のデータが失われるのではないかと心配です。

mdadmアレイを作成するために使用されるコマンドは、データが存在する既存のドライブの場所とmdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 /dev/sdb2 /dev/sdc2 --spare-devices=1 /dev/sdd2場所/dev/sdb2、およびデータがない新しい3TBドライブであることがわかりました。これは私のデータを失いますか?/dev/sdc2/dev/sdd2/dev/sdb2/dev/sdc2

私のもう一つのアイデアは、スペアなしで2x3TB RAID 5アレイを作成することでした。アレイのあるドライブは空で、もう一方のドライブにはデータがありました。その後、既存のドライブのファイルを新しい(6TB)アレイにコピーし、冗長ドライブを消去してアレイにスペアドライブとして追加できます。これがうまくいくかどうか疑わしいですが?

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

私はUbuntu Server 16.04.2mdadmバージョン3.3を使用しています。

答え1

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

これにより、3 TB のディスク 3 台を 6 TB のデータを格納する RAID5 アレイに変換できます。ただし、プロセスは非常に退屈で、途中でデータが失われる可能性が非常に高いです。

要件を達成するためのステップ

sdaディスクを(データを含む)、sdb(データを含む)、sdc(新しい)と宣言します。

  1. 可能であれば、数日間友達にディスクを貸す必要がある場合でも、すべてのデータをバックアップしてください。
  2. 新しいディスクにRAID1アレイを作成しますsdc。 2つのメンバーが必要ですが、そのうちの1つがありません。
  3. このRAID1アレイにファイルシステムを作成します。
  4. sdb新しいRAID1アレイへのデータのコピー
  5. データが正しくコピーされていることを確認してください。
  6. sdbRAID1アレイに追加
  7. 同期が完了するまで待ちます。
  8. 再起動
  9. RAID1アレイをRAID5に拡張します。 3つのメンバーが必要ですが、そのうちの1つがありません。これを行うには、追加のディスクに128Kの一時スペースが必要です。これを行うには、USBスティックを使用する必要があります。 RAMディスクを使用しないでください。
  10. sda新しいRAID5アレイへのデータのコピー
  11. データが正しくコピーされていることを確認してください。
  12. sdaRAID5アレイに追加
  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

ディスクのライブデータを扱う前に、実際の例を理解していることを確認してください。言うまでもなく、これはあなたの責任であるため、ライブシステムを変更する前にバックアップを実行することをお勧めします。

関連情報