有有关 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。