将 Linux 软件 RAID 1 升级到 RAID 10 的最佳方法

将 Linux 软件 RAID 1 升级到 RAID 10 的最佳方法

mdadm似乎不支持将数组从 1 级扩展到 10 级。

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

我目前的策略:

  1. 做好备份。
  2. 创建一个缺少两个磁盘的降级 4 磁盘 RAID 10 阵列。
  3. rsyncthe RAID 1 array with the RAID 10 array.
  4. fail and removeRAID 1 阵列中的一个磁盘。
  5. 将可用磁盘添加到 RAID 10 阵列并等待重新同步完成。
  6. 销毁 RAID 1 阵列并将最后一个磁盘添加到 RAID 10 阵列。

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

有没有更好的办法?

答案1

使用 linux softraid 您可以仅用两个磁盘创建 RAID 10 阵列。

下面使用的设备名称:

  • md0是类型/级别 RAID1 的旧阵列。
  • md1是类型/级别的新阵列 RAID10。
  • sda1并且sdb2新的、空分区(没有数据)。
  • sda2并且sdc1是旧分区(包含关键数据)。

替换名称以适合您的用例。使用 eglsblk查看您当前的布局。

0)备份,备份,备份,备份,还有备份

1)创建新阵列(4 个设备:2 个现有,2 个缺失):

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

请注意,此示例布局中sda1有一个缺失的对应项,并且还有另一个缺失的对应项。此时sdb2您的数据并不安全(实际上它是 RAID0,直到您添加缺失的成员)。md1

要查看创建的数组的布局和其他详细信息,请使用:

mdadm -D /dev/md1

注意!您应该保存数组的布局:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2)格式化并安装。应该/dev/md1可以立即使用,但需要格式化然后安装。

3)复制文件。例如,使用 rsync 将数据从旧 RAID 1 复制到新 RAID 10。(这只是一个示例命令,请阅读 rsync 的手册页)

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

4)使旧 RAID1(md0)的第一部分失效,并将其添加到新的 RAID10(md1)

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

注意!这将删除 中的数据sda2md0应该仍然可以使用,但前提是其他团队成员完全正常运行。

另请注意,这将开始同步/恢复过程md1。要检查状态,请使用以下命令之一:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

等待直到恢复完成。

5)在新阵列上安装 GRUB(假设您从该阵列启动)。某些 Linux 救援/启动 CD 效果最好。

6)在新阵列上启动。如果工作正常,则销毁旧阵列并将剩余磁盘添加到新阵列。

**无可挽回的境地**

此时,您将销毁旧 md0 阵列的最后一个成员上的数据。确保一切正常。

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

然后再次 -等待直到恢复md1完成。

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7)更新 mdadm 配置

记得更新/etc/mdadm/mdadm.conf(删除 md0)。

并将配置保存到 initramfs(重启后可用)

update-initramfs -u

答案2

按照与 Mark Turner 相同的步骤操作,但在创建 RAID 阵列时,请提及 2 个丢失的磁盘

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

然后继续执行其他步骤。

简而言之,创建总共有 4 个磁盘(其中 2 个丢失)的 RAID10,重新同步,然后添加另外两个磁盘。

答案3

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

正如@aditsu 指出的那样,创建阵列时驱动器顺序很重要。

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

上面的代码提供了一个可用的阵列,其中有两个缺失的磁盘(如果您不使用整个磁盘,请添加分区号)。一旦添加第三个磁盘,它就会开始同步。我在第三个磁盘完成同步之前添加了第四个磁盘。它显示为备用,直到第三个磁盘完成同步后才开始同步。

针对我的情况的步骤:

  1. 做好备份。

  2. 创建一个具有两个缺失磁盘的降级 4 磁盘 RAID 10 阵列(我们将缺失的磁盘称为 2 号和 4 号)。

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

  4. 发生故障并从 RAID 1 阵列中删除一个磁盘(磁盘 4)。

  5. 将物理范围从 RAID 1 阵列移动到 RAID 10 阵列,并将磁盘 2 留空。

  6. 终止活动的 RAID 1 阵列,将现在空的磁盘(磁盘 2)添加到 RAID 10 阵列,然后等待重新同步完成。

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

  8. 讓老婆继续。

在第 7 步,我认为驱动 1、2,或者4 可以发生故障(在磁盘 4 重新同步期间),而不会终止阵列。如果驱动器 3 发生故障,阵列上的数据将丢失。

答案4

我已经将 raid1 移至 raid10,虽然此页面对我有帮助,但上面的答案中缺少一些内容。特别是我的目标是保留 ext4 出生时间。

设置如下:

  • 每种类型有 2 个 raid1 磁盘,msdos 和 md0,带有 ext4 分区和 mbr,带有 msdos
  • 2 个新磁盘成为新的主磁盘(大小全部相同)
  • 结果是 4 个磁盘 raid md127 ext4,但由于大小,我不得不从mbr 转换为 gpt
  • 这是我的主磁盘,因此不需要或不打算设置引导管理器
  • 使用我日常使用的 ubuntu(因此:不使用外部救援盘)
  • 使用 gparted、dd 和 mdadm

正如之前任何人所说的那样:零步应备份并且过程中总会出错,导致严重的数据丢失

  1. 备份

  2. 新突袭的设置

    1. 创建新的突袭

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

      (我发现布局很重要……第二和第四个似乎是默认‘近’突袭中的重复项)

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

    1. 现在获取数据...我首先尝试使用 rsync ,它工作正常,但无法保留出生时间...使用 dd克隆从旧袭击到新袭击

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

      等待
      你可以通过将 USR1 发送到该进程来进行检查

      kill -s USR1 <pid>
      
    2. 修复 raid
      gparted 是一个很棒的工具:你告诉它检查并修复分区,并只需点击几下鼠标即可将其调整为该磁盘的完整大小;)

    3. 为该分区设置一个新的 uuid 并使用它来更新你的 fstab(更改 uuid)

    4. 将你的突袭存储在 conf 中

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

      并删除旧的

      vim /etc/mdadm/mdadm.conf 
      
    5. 如果你不在救援系统上,请重新启动
  4. 摧毁旧的

    1. 第一个失败,并将其添加到新的团队中

      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
      

      再次等待

相关内容