如何从非标准的 2 驱动器 RAID 5 阵列中移除驱动器?

如何从非标准的 2 驱动器 RAID 5 阵列中移除驱动器?

有关 RAID 阵列形状变化的一些信息但我有点紧张,想确认一下:

问题:我有 2 个 500GB 驱动器作为软件 raid 5 (mdadm)。我想释放其中一个驱动器,因为 RAID 冗余是懦夫的专利……我可以

mdadm --grow --array-size=1

随后是

mdadm --grow --raid-disks 1

这似乎太简单了。我该如何指定释放哪个驱动器?采取此操作的部分原因是我没有额外的空间来运行备份。

编辑:事实上,这是一个非标准的 RAID5 实现(请参阅 Dave M 或 gman 的评论)。但是,请不要责备我的鲁莽。我只是对执行此驱动器移除的最小风险方法感兴趣。假设我已经解决了备份问题,但我不会使用它从备份重建。


$ sudo mdadm --detail --test /dev/md1 
/dev/md1:
        Version : 00.90
  Creation Time : Sat Sep  1 18:08:21 2007
     Raid Level : raid5
     Array Size : 488383936 (465.76 GiB 500.11 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

Update Time : Mon Nov 28 11:32:13 2011
      State : clean

Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0

     Layout : left-symmetric
 Chunk Size : 64K

       UUID : XXX (local to host XXX)
     Events : 0.29336

Number   Major   Minor   RaidDevice State
   0       8       33        0      active sync   /dev/sdc1
   1       8       17        1      active sync   /dev/sdb1

答案1

使用 mdadm,2 个驱动器的 RAID 5 在二进制上与 RAID1 相同,而不是 RAID 0,并且没有神奇的隐形设备。您可以分辨出来,因为阵列的大小与两个组件的大小相同,而不是它们的总和:

Array Size : 488383936 (465.76 GiB 500.11 GB)
Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

您可以通过以下方式确认:

 dd if=/dev/sdb1 bs=512 count=1024 of=/tmp/b1
 dd if=/dev/sdc1 bs=512 count=1024 of=/tmp/c1

 md5sum /tmp/b1
 md5sum /tmp/c1

由于驱动器是冗余的,因此每个驱动器的 md5 都相同。由于这与 RAID 相同,因此在停止它之后,我们可以在相同的设备上创建 RAID1 并拥有相同的数据:

mdadm -C /dev/md1  --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

或者只使用一个设备执行 RAID1,释放另一个设备:

mdadm -C /dev/md1  --level=1 --raid-devices=1 --force /dev/sdb1

然后清除已删除的超级块:

mdadm /dev/sdc1 --zero-superblock

因为它是 mdadm 超级块版本 0.90,所以每个驱动器也应该可以单独使用。由于 1.1 和 1.2 将元数据放在阵列的开头附近,所以它不适用于这些版本。

答案2

我意识到这个问题几年前就已经被回答过了,但是我最近解决了一个类似的问题,我想我可以对这个问题和 Ray M 的回答都做一些澄清...

运行超级块版本 1.2 的类似双驱动器 RAID5,如 Ray M 所说,二进制与 RAID1 相同。但是,与 v0.9 不同,具有 1.x 元数据的阵列可能会在设备的开始和阵列数据的开始之间留下间隙。因此,为了验证两个设备的等效性,首先确定每个组件的数据偏移量:

mdadm --examine /dev/sdb1
mdadm --examine /dev/sdc1

您应该看到每台设备都有这样的一行(默认情况下,两台设备相同):

Data Offset : 262144 sectors

这是设备数据的开始位置。从这里开始,复制一些数据:

dd if=/dev/sdb1 skip=262144 bs=512 count=1024 of=/tmp/b1
dd if=/dev/sdc1 skip=262144 bs=512 count=1024 of=/tmp/c1

md5 总和应该相等:

$ md5sum /tmp/b1 /tmp/c1
6b327bb46f25587806d11d50f95ff29b  /tmp/b1
6b327bb46f25587806d11d50f95ff29b  /tmp/c1

由于驱动器实际上是彼此的镜像,因此您可以发生故障并移除一个驱动器,从而使阵列降级:

mdadm /dev/md1 --fail /dev/sdc1 --remove /dev/sdc1
mdadm --zero-superblock /dev/sdc1

或者从单磁盘 RAID1 开始:

mdadm --stop /dev/md1
mdadm --create /dev/md1 --level 1 --raid-devices 1 --force /dev/sdb1
mdadm --zero-superblock /dev/sdc1

请注意,尽管双磁盘 RAID5 在二进制上与 RAID1 等效,但您不能简单地:

mdadm --grow --raid-devices 1

带有双驱动器 RAID5。

相关内容