mdadm – 从RAID0中移除磁盘

所以,我想知道,是可以做到以下与mdadm

  1. 我从2个磁盘上的RAID0configuration开始: sdasdb
  2. 我想添加一个磁盘到数组, sdc并将所有的数据从sdb移到它。
  3. 断开sdb

现在我只看到一个选项 – 我停止arrays,用dd或其他任何块复制工具将sdb复制到sdc ,然后启动arrays。

我想念什么? 是否有可能使用mdadm做到这一点?

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

感谢Zoredache的想法!

所以,情况:

  • 你有两个磁盘的RAID0arrays
  • 您希望在没有arrays停机时间的情况下更换其中的一个

如果停机时间是可以接受的,你总是可以用dd制作一个磁盘块并重新组装,mdadm将会OK。

解决scheme:使用RAID4作为中间解决scheme

RAID0 – > RAID4 – > RAID0

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

你需要的是:另外两个相同大小的磁盘,和你想要replace的磁盘一样。

环境:

  • 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 

我们创build了raid0数组,看起来很甜美。

 sudo md5sum /dev/md0 b422ba644a3c83cdf28adfa94cb658f3 /dev/md0 

这是我们的检查点 – 如果结果/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_] 

所以,我们将arrays发展成了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 

我们已经添加了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] 

我们做了我们的磁盘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 

细节显示我们删除第一个磁盘,在这里我们可以看到arrays中磁盘的真实顺序。 使用奇偶校验跟踪磁盘很重要,在返回到RAID0时,不应将其保留在arrays中。

 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] 

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 

我们添加了我们的sdb磁盘的替代品。 现在我们走了:现在sdb的数据正在使用奇偶校验来恢复。 Sweeeeet。

 md0 : active raid4 sde[4] sdd[3] sdc[1] 2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU] 

完成。 现在我们是完全安全的 – 从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_] 

造成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_] 

从我们的数组中删除了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 

Aaaaaaand砰!

 md0 : active raid0 sde[4] sdc[1] 2096128 blocks super 1.2 512k chunks 

完成。 让我们看看MD5校验和。

 sudo md5sum /dev/md0 b422ba644a3c83cdf28adfa94cb658f3 /dev/md0 

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

据我所知,一旦你build立一个RAID0你不能改变其中一个磁盘。 您可以进行备份并切换磁盘并恢复备份。 我只是RAID5那3个磁盘。 这样在将来你可以放下一个磁盘,然后重build它。

RAID 0不提供冗余。

所以它不支持热插拔更换。