mdadm - 从 RAID0 中删除磁盘

man*_*que 13 mdadm raid0

所以,我想知道,是否可以使用 mdadm 执行以下操作:

  1. 我从 2 个磁盘上的 RAID0 配置开始:sdasdb.
  2. 我想再添加一个磁盘到阵列,sdc并将所有数据移动sdb到它。
  3. 断开连接sdb

现在,我看到的只有一个选择-我停止阵列,复制sdbsdcdd或任何其他块拷贝工具,开始在阵列后面。

我错过了什么吗?可以用 mdadm 做到这一点吗?

man*_*que 21

首先:对于那些仍然相信“RAID0没有热备份”的​​人。它可以有一个手动备用,由了解 RAID 级别和 mdadm 的人完成。mdadm 是软件 RAID,所以它可以做很多有趣的事情。

感谢Zoredache的想法!

所以,情况:

  • 你有两个磁盘的 RAID0 阵列
  • 您想在没有阵列停机时间的情况下更换其中之一

如果停机时间是可以接受的,您总是可以使用 dd 制作磁盘的块副本并重新组装阵列,mdadm 就可以了。

解决方案:使用RAID4作为中间方案

RAID0 -> RAID4 -> RAID0

所以,如果你不记得 RAID4,那很简单。它有一个奇偶校验块,但与 RAID5 不同,它不分布在整个阵列中,而是驻留在一个磁盘上。这就是重点,这很重要,这也是 RAID5 无法工作的原因。

您需要什么:另外两个大小相同的磁盘,与您要更换的磁盘相同。

环境:

  • Ubuntu 14.04 Thrusty Thar
  • mdadm - v3.2.5 - 2012 年 5 月 18 日
  • /dev/sdb - 从它开始,将替换它
  • /dev/sdc - 从它开始
  • /dev/sdd - 将被临时使用
  • /dev/sde - 将用于代替 sdb

终极 RAID0 热备用 mdadm 指南;)

sudo mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[bc]

md0 : active raid0 sdc[1] sdb[0]
      2096128 blocks super 1.2 512k chunks
Run Code Online (Sandbox Code Playgroud)

我们已经创建了 raid0 数组,它看起来不错。

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0
Run Code Online (Sandbox Code Playgroud)

这是我们的检查点——如果结果有一点不同/dev/md0——我们就失败了。

sudo mdadm /dev/md0 --grow --level=4

md0 : active raid4 sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Run Code Online (Sandbox Code Playgroud)

因此,我们已将阵列扩展为 RAID4。我们还没有添加奇偶校验盘,所以让我们来做吧。增长将是即时的 - 无需重新计算或重新计算。

sudo mdadm /dev/md0 -a /dev/sdd

md0 : active raid4 sdd[3] sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [===>.................]  recovery = 19.7% (207784/1048064) finish=0.2min speed=51946K/sec
Run Code Online (Sandbox Code Playgroud)

我们已添加sdd为奇偶校验磁盘。记住这一点很重要 - 第一行中的磁盘顺序与第二行中的图片不同步![UU_]

sdd 首先显示,但实际上它是最后一个,并且保存的不是数据,而是奇偶校验。

sudo mdadm /dev/md0 -f /dev/sdb

md0 : active raid4 sdd[3] sdc[1] sdb[0](F)
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
Run Code Online (Sandbox Code Playgroud)

我们已经使我们的磁盘 sdb 出现故障,在接下来的步骤中将其删除。

sudo mdadm --detail /dev/md0

State : clean, degraded

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty spare   /dev/sdb
Run Code Online (Sandbox Code Playgroud)

详细信息向我们展示了第一个磁盘的移除,在这里我们可以看到阵列中磁盘的真实顺序。使用奇偶校验跟踪磁盘很重要,我们不应该在返回 RAID0 时将其留在阵列中。

sudo mdadm /dev/md0 -r /dev/sdb

md0 : active raid4 sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
Run Code Online (Sandbox Code Playgroud)

sdb 完全删除,可以带走。

sudo mdadm /dev/md0 -a /dev/sde

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
      [==>..................]  recovery = 14.8% (156648/1048064) finish=0.2min speed=52216K/sec
Run Code Online (Sandbox Code Playgroud)

我们添加了 sdb 磁盘的替代品。我们开始了:现在正在使用奇偶校验恢复sdb的数据。亲爱的。

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU]
Run Code Online (Sandbox Code Playgroud)

完毕。现在我们是完全安全的——所有来自 sdb 的数据都被恢复了,现在我们必须删除 sdd(记住,它保持奇偶校验)。

sudo mdadm /dev/md0 -f /dev/sdd

md0 : active raid4 sde[4] sdd[3](F) sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Run Code Online (Sandbox Code Playgroud)

使 sdd 出错。

sudo mdadm /dev/md0 -r /dev/sdd

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
Run Code Online (Sandbox Code Playgroud)

从我们的数组中删除了 sdd。我们准备再次成为RAID0。

sudo mdadm /dev/md0 --grow --level=0 --backup-file=backup

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [=>...................]  reshape =  7.0% (73728/1048064) finish=1.5min speed=10532K/sec
Run Code Online (Sandbox Code Playgroud)

啊啊啊砰!

md0 : active raid0 sde[4] sdc[1]
      2096128 blocks super 1.2 512k chunks
Run Code Online (Sandbox Code Playgroud)

完毕。让我们看看 md5 校验和。

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0
Run Code Online (Sandbox Code Playgroud)

还有什么问题吗?所以 RAID0 可以有一个热备份。它被称为“用户”;)