检查 HPA 是否已启用

检查 HPA 是否已启用

在我的服务器升级到 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 元数据是应用于整个磁盘还是分区。您应该使用较新的元数据格式重建阵列,并且最好先对各个磁盘进行分区。

相关内容