我有一个处于降级状态的 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