mdadm 拒绝向阵列添加第二个相同的磁盘

mdadm 拒绝向阵列添加第二个相同的磁盘

我有一个处于降级状态的 RAID 1 阵列,想要向其添加另一个驱动器。

# mdadm --detail /dev/md1 
/dev/md1:
        Version : 1.2
  Creation Time : Fri Mar 21 17:23:00 2014
     Raid Level : raid1
     Array Size : 488254464 (465.64 GiB 499.97 GB)
  Used Dev Size : 488254464 (465.64 GiB 499.97 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Tue Jun  9 00:10:04 2015
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : mars:1  (local to host mars)
           UUID : 3458a3fd:a510d0a7:605d8cd5:9880c31e
         Events : 25816

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       0        0        2      removed

我正在尝试使用与第一个驱动器相同的驱动器,格式相同以容纳整个大小。然而,mdadm 拒绝添加它

# mdadm /dev/md1 --add /dev/sdc1 
mdadm: /dev/sdc1 not large enough to join array

分开的输出表明两个驱动器具有不同的扇区大小,但我不确定那是什么以及是否可以纠正。如果不能,我有什么选择?

# parted /dev/sdb unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdb: 976773168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
 1      2048s  976773119s  976771072s  primary  ext4         raid, type=fd

# parted /dev/sdc unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdc: 976771055s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
 1      2048s  976769023s  976766976s  primary               raid, type=fd

答案1

976766976/dev/sdb小于 97677/dev/sdc第1072章

这不是一个相同的驱动器。

答案2

您的新磁盘比现有磁盘小 1MB 多一点。这可能是不同的型号(尽管具有相同的标识,但它可能是在不同的工厂制造的,规格略有不同),或者可能在工厂测试期间发现了更多的缺陷扇区。

在 上sdb,您有一个sdb1跨越整个磁盘的分区,减去 MBR 的 1 个扇区,加上未使用的扇区,使分区与 1MB 对齐(为了性能而建议这样做)。数组跨越整个分区;它的大小是分区的大小减去128MB,即重塑区域

976771055 个扇区的大小sdc比数组 976771072 个扇区的大小小 17 个扇区。因此,您无法将阵列安装到新磁盘上。

您可以创建一个具有相同数据和更小的重塑区域的数组。由于几乎可以容纳,因此只需从 128MB 中减去 2MB 就足够了。我认为无法调整现有数组上的重塑区域的大小,因此您必须备份它,创建一个新数组,然后恢复数据。

我要做的是将阵列上的一个分区缩小 2MB。

无论如何,在我看来,最简单的解决方案是创建一个新的 RAID-1 阵列作为sdc1唯一的活动卷。如果您想保持阵列上分区的大小,请传递--data-offset=126M创建一个重塑区域以使其全部适合。更好的是,创建一个跨越整个分区的数组,减去几 MB 作为安全裕度,以防此问题再次发生。然后将旧数组中的所有数据复制到新数组中。如果您要创建较小的区域,请对要缩小的分区执行文件复制而不是分区复制,或者(如果您有多个分区)先执行该分区,然后再缩小它。最后擦除数组上的内容sdb1,然后添加sdb1到新数组中。

或者,缩小现有数组的内容,以便最后 2MB(至少)不分配给任何分区,然后用于mdadm /dev/md1 --grow --size=…缩小现有数组。

答案3

该磁盘具有 HPA。我有相同的磁盘并删除了 HPA,成功回收了丢失的扇区,使两个驱动器完全相同。看https://superuser.com/a/642765

# hdparm -N /dev/sdx
# hdparm -N p976773168 /dev/sdx

答案4

简单地在sdc上创建一个与sdb相同的分区我知道这个技巧(首先进行备份并避免分区跨到磁盘之外,例如2盘220G sdb 210G sdc,在210G以下创建两个分区,可能是两个199G的相同分区案件)

sfdisk -d /dev/sdb > part_table
sfdisk /dev/sdc < part_table

然后重试添加 sdc1

相关内容