将Linux软件RAID 1扩展到RAID 10的最佳方法

mdadm似乎不支持从1级到10级的数组增长。

我在RAID 1中有两个磁盘。我想添加两个新磁盘,并将arrays转换为四个磁盘RAID 10arrays。

我目前的战略:

  1. 做好备份。
  2. 创build具有两个丢失磁盘的降级4磁盘RAID 10arrays。
  3. rsync the RAID 1 array with the RAID 10 array.
  4. 失败并从RAID 1arrays中删除一个磁盘。
  5. 将可用磁盘添加到RAID 10arrays并等待重新同步完成。
  6. 销毁RAID 1arrays并将最后一个磁盘添加到RAID 10arrays。

问题是在步骤5缺乏冗余。

有没有更好的办法?

使用linux softraid,您可以制作只有两个磁盘的RAID 10arrays。

0)备份,备份,备份,备份哦和备份

1)创build新的数组:

 mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing 

2)使用新的RAID 10安装raid10&rsync RAID 1(这只是一个示例命令,请阅读手册页)

 rsync -arHx / /where/ever/you/mounted/the/RAID10 

3)RAID失败,将磁盘添加到新的RAID10

 mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2 

4)将移除的磁盘添加到RAID10

 mdadm /dev/md1 --add /dev/sda2 

5)在新arrays上安装GRUB(假设你正在从它启动)。 一些Linux救援/启动CD效果最好。

6)在新arrays上启动。 如果它正常工作销毁旧arrays并将剩余的磁盘添加到新arrays。

 mdadm --stop /dev/md0 mdadm /dev/md0 --remove /dev/sdc1 mdadm /dev/md1 --add /dev/sdc1 

按照与Mark Turner相同的步骤,但在创buildRAIDarrays时,请提及2个丢失的磁盘

 mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing 

然后继续其他步骤。

总之,创build共有4个磁盘(其中2个丢失)的RAID10,重新同步,然后添加其他两个磁盘。

刚刚完成从两个2TB磁盘mdadm RAID 1的LVM到四个磁盘RAID 10(两个原始+两个新磁盘)上的LVM。

正如@aditsu指出,创buildarrays时,驱动顺序非常重要。

 mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing 

上面的代码给出了一个有两个丢失磁盘的可用arrays(如果不使用整个磁盘,请添加分区号)。 一旦添加第三个磁盘,它将开始同步。 我在第三次完成同步之前添加了第四个磁盘。 它显示为备用,直到第三个磁盘完成,然后开始同步。

我的情况步骤:

  1. 做好备份。

  2. 创build一个具有两个丢失磁盘的降级4磁盘RAID 10arrays(我们将调用丢失的磁盘#2和4)。

  3. 告诉妻子不要更改/添加任何她关心的文件

  4. 从RAID 1arrays(磁盘4)中失败并移除一个磁盘。

  5. 将物理盘区从RAID 1arrays移至RAID 10arrays,使磁盘2为空。

  6. 杀死活动RAID 1arrays,现在将空磁盘(磁盘2)添加到RAID 10arrays,然后等待重新同步完成。

  7. 将从RAID 1(磁盘4)中移除的第一个磁盘添加到RAID 10arrays。

  8. 让妻子继续前进。

在第7步,我认为驱动器1,2 4可能会失败(在磁盘4的重新同步过程中),而不会杀死arrays。 如果驱动器3发生故障,则arrays上的数据为烤面包。

我已经将我的raid1移动到了raid10,而这个页面帮助了我,但是在上面的答案中还是有一些缺失的。 特别是我的目标是保持ext4的诞生时间。

设置是:

  • 每种types的2个raid1磁盘msdos和md0与ext4分区和mbr与msdos
  • 2新的新磁盘成为新的初选(所有相同的大小)
  • 导致4磁盘raid md127 ext4,但由于大小,我不得不从mbr切换到gpt
  • 其我的家庭磁盘,所以没有bootmanager设置是必需的或打算
  • 使用我的日常ubuntu(所以:不使用外部救援光盘)
  • 使用gparted,dd和mdadm

正如任何人之前所说的: 零步应该是备份 ,并可以在这个过程中出现问题,导致极端的数据丢失

  1. BACKUP

  2. 设置新的RAID

    1. 创build一个新的RAID

       mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing 

      (我发现布局是重要的..第二和第四似乎是在默认的“近”突袭重复)

    2. 设置raid的分区我使用gparted设置gpt在md127,然后添加一个新的分区(ext4)的大小的旧的或更大
  3. 迁移

    1. 现在得到的数据了…我第一次尝试使用rsync工作,但未能保持生育…使用DD 克隆从旧的RAID到新的

       dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync 

      等待它
      你可以检查发送USR1到这个过程

       kill -s USR1 <pid> 
    2. 修复袭击
      gparted是一个伟大的工具:你告诉它检查和修复分区,并resize的磁盘只需几个鼠标点击;)

    3. 设置一个新的uuid到该分区并更新你的fstab(更改uuid)

    4. 将你的RAID存储在conf中

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

      并删除旧的

       vim /etc/mdadm/mdadm.conf 
    5. 如果你不是在一个rescusystem重新启动
  4. 摧毁旧的

    1. 第一个失败并将其添加到新的RAID

       mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1 

      然后使gpt在该设备上并设置一个新的空分区

       mdadm /dev/md127 --add /dev/sdc1 

      等待它
      你可以检查

       cat /proc/mdstat 
    2. 停止第二个

       mdadm --stop /dev/md0 

      然后使gpt在最后一个设备上,并再次设置一个新的空分区

       mdadm /dev/md127 --add /dev/sdd1 

      再等一等

我用LVM做了。 初始configuration: – sda2,sdb2 – 在上面创buildraid1 md1。 sda1和sdb1用于第二个raid1作为/ boot分区。 – md1是在卷组空间的PV,有一些LVM的。

我已经添加了磁盘sdc和sdd,并创build了像sda / sdb那样的分区。

所以:

  1. 创buildmd10为:

    mdadm –create / dev / md10 –level raid10 –raid-devices = 4 / dev / sdc2 missing / dev / sdd2

  2. 扩展vg:

    pvcreate / dev / md10 vgextend空间/ dev / md10

  3. 将卷从md1移动到md10:

    pvmove -v / dev / md1 / dev / md10

(等待完成)4.减less音量组:

 vgreduce space /dev/md1 pvremove /dev/md1 
  1. 停止数组md1:

    mdadm -S / dev / md1

  2. 从旧的md1添加磁盘到md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. 更新/etc/mdadm/mdadm.conf中的configuration:

    mdadm -E –scan >> / dev / mdadm / mdadm.conf

(并删除旧的md1)

一切都在现场系统上完成,有活动卷用于kvm的;)