我一直将我的 HDD 用作软件 RAID 1 阵列的一部分,但缺少第二个设备。我这样配置它,以便在有机会时能够添加另一个磁盘。现在我买了第二个磁盘并尝试运行以下命令:
mdadm --add /dev/md0 /dev/sdb1
但我收到了这个错误:
mdadm: /dev/sdb1 not large enough to join array
gparted 的输出是:
Disk /dev/sda: 3907029167s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 3907029133s 3907027086s ext4
Disk /dev/sdb: 3907029167s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 3907028991s 3907026944s primary ext4
有没有办法将第二个磁盘添加到阵列而不会丢失第一个磁盘上的数据?
是否应调整第一个磁盘的大小以匹配新磁盘?
答案1
注意:您应该首先备份您的数据——任何块设备操作都存在数据丢失的风险。
在我看来,实际磁盘大小是相同的,但第一个使用 gpt 分区,第二个使用 msdos 分区 - 使其略小(显然处于 MBR 可以处理的范围的边缘)。尝试在 gparted 中将磁盘重新格式化为 gpt。
假设它是一个新磁盘 - 如果您遇到困难,请尝试将磁盘的第一位清零,使其看起来未初始化(并假设新磁盘是 /dev/sdb),使用 dd if=/dev/zero of=/dev/sdb bs=1024 count=1
完成此操作后,将磁盘重新分区为其完整大小,然后将其添加到阵列。
另一种方法是稍微缩小当前的 RAID 阵列,以便可以容纳它。这更有可能出现问题,但如果你真的想这样做,你可以找到说明这里。
另一个选项(非标准,但可能有效)是使用 /dev/sdb 而不是 /dev/sdb1 作为第二个磁盘 - 如果从与 RAID 阵列关联的分区启动,这可能会导致启动问题,这不是最佳做法,但在技术上是可行的。
答案2
我刚刚遇到了这个问题。运行:sudo blockdev --report /dev/sdb1
sudo blockdev——报告/dev/sdb2
如果 sdb2 较大,则运行:尝试 mdadm --add /dev/md0 /dev/sdb2
对我有用。