在我的服务器升级到 Ubuntu 12.04 LTS 之后,grub 开始抱怨并给出有关我的 raid 阵列的错误,一切似乎仍在运行,但 grub 给出错误有点令人不安。
设置 grub-pc (1.99-21ubuntu3.7) ... 错误:为 RAID md0 找到两个索引为 2 的磁盘。 错误:多余的 RAID 成员(发现 3 个)。
当 grub 更新时我收到很多这些错误。
事实是:我在 raid5 设置中有三个相同的磁盘,其中两个磁盘上有一个主分区已添加到阵列,但第三个磁盘添加时没有主分区。即。mdam --manage /dev/md_d0 --add /dev/sdc
我猜测这就是 grub 抱怨的原因。
自从发现这个问题以来,我禁用了缺少主分区的磁盘,创建了一个主分区,验证它看起来与 相同,cfdisk /dev/xxx
然后Print Partition table
。并尝试将新分区添加到 raid 阵列,这时我收到消息说分区太小,无法添加到 raid 阵列。
> sudo mdadm /dev/md_d0 --add /dev/sdc1
mdadm: /dev/sdc1 not large enough to join array
分区表看起来都一样,
/dev/sdc 的分区表 第一 姓 # 类型 扇区 扇区偏移量 长度 文件系统类型 (ID) 标志 -- ------- ----------- ----------- ------ ----------- -------------------- ---- Pri/Log 0 2047* 0# 2048*可用空间 无 1 主 2048* 3907029167* 0 3907027120*Linux raid auto (FD) 无 /dev/sdd 的分区表 第一 姓 # 类型 扇区 扇区偏移量 长度 文件系统类型 (ID) 标志 -- ------- ----------- ----------- ------ ----------- -------------------- ---- Pri/Log 0 2047* 0# 2048*可用空间 无 1 主 2048* 3907029167* 0 3907027120*Linux raid auto (FD) 无 /dev/sde 的分区表 第一 姓 # 类型 扇区 扇区偏移量 长度 文件系统类型 (ID) 标志 -- ------- ----------- ----------- ------ ----------- -------------------- ---- Pri/Log 0 2047* 0# 2048*可用空间 无 1 主 2048* 3907029167* 0 3907027120*Linux raid auto (FD) 无
或者实际上如果在 cfdisk 中将分区表作为原始数据打印会有一些差异,但我无法理解这意味着什么。
-> 差异 sde.raw sdc.raw 1c1 磁盘驱动器:/dev/sde --- 磁盘驱动器:/dev/sdc 30c30 0x1B0:00 00 00 00 00 00 00 00 B7 E9 70 74 00 00 00 20 --- 0x1B0:00 00 00 00 00 00 00 00 4B 0C 58 1C 00 00 00 20
我意识到我可以尝试使用 dd 从其中一个工作磁盘复制 mbr,但即使分区表在 cfdisk 的原始输出中相同,我仍然会收到相同的错误。
$ sudo dd if=/dev/sdd of=/tmp/sdd-mbr.bin bs=512 count=1 $ sudo dd if=/tmp/sdd-mbr.bin of=/dev/sdc bs=512 count=1
$ cat /proc/分区 大调 小调 #blocks 名称 8 48 1953514584 sdd 8 49 1953513560 sdd1 8 32 1953514584 南直流 8 33 1953513560 sdc1 8 64 1953514584 sde 8 65 1953513560 sde1
现在,分区表的原始比较给出了相同的输出,并且分区似乎具有相同的大小,但是当我尝试添加/dev/sdc1
到数组时仍然出现相同的错误。
我想我的问题是是否有任何方法可以解决这个问题,而不需要将整个阵列拆开并从头开始重新创建它?
自从我再次添加了 /dev/sdc 后,阵列的输出mdadm -D /dev/md_d0
仍在重建中。
/dev/md_d0: 版本:0.90 创建时间:2010 年 8 月 14 日星期六 21:06:13 突袭级别:raid5 数组大小:3907028992(3726.03 GiB 4000.80 GB) 已使用设备大小:1953514496 (1863.02 GiB 2000.40 GB) 突袭设备:3 设备总数:3 首选辅修科目 : 0 持久性:超级块是持久的 更新时间:2013年1月11日星期五18:36:06 状态:清洁、退化、恢复 活跃设备:2 工作装置 : 3 故障设备:0 备用设备:1 布局:左对称 区块大小:64K 重建状态:完成 53% UUID:74998045:22316376:01f9e43d:ac30fbff(主机服务器本地) 事件:0.19988 编号 主要 次要 RaidDevice 状态 3 8 32 0 备用重建 /dev/sdc 1 8 64 1 活动同步 /dev/sde 2 8 48 2 活动同步 /dev/sdd
我现在意识到整个阵列似乎是由实际设备而不是分区组成的,那么问题是为什么 sdd1 和 sde1 分区留在硬盘上,并在我将其添加到阵列后立即被覆盖在 /dev/sdc 上。
答案1
您需要在磁盘上禁用 HPA。
检查 HPA 是否已启用
$ hdparm -N /dev/sdc
/dev/sdc:
max sectors = 586070255/586072368, HPA is enabled
然后禁用 HPA
$ hdparm -N p586072368 /dev/sdc
重启后需要“p”才能持久保存。然后您需要重启计算机并将磁盘添加到 RAID
答案2
好的,事情是这样的,您最初使用整个磁盘构建了阵列,没有任何分区。看起来您可能后来添加了分区表,这会破坏阵列。您现在无法添加磁盘分区,因为它太小了,因为 mdadm 需要整个磁盘。
您从 grub 看到的错误是由于 0.9 元数据格式无法判断 raid 元数据是应用于整个磁盘还是分区。您应该使用较新的元数据格式重建阵列,并且最好先对各个磁盘进行分区。