RAID1“mdX”在“/proc/mdstat”上看起来正常,但成员的“blkid”和“fdisk -l”报告奇怪/错误的值

RAID1“mdX”在“/proc/mdstat”上看起来正常,但成员的“blkid”和“fdisk -l”报告奇怪/错误的值

我创建了一个 RAID1

mdadm --create /dev/mdX --level=mirror --raid-devices=2 /dev/sdb /dev/sdc

然后观看了第一个同步/proc/mdstat。它说[UU]。到目前为止,一切都很好。

sd[bc]应该已经被shred编辑了,但我之前没有检查,认为所有内容无论如何都会被覆盖。

我继续在该设备上创建卷组,然后在新的逻辑卷中创建 ext4 FS。

想要通过 UUID 挂载,我将它们全部转储为blkid.从视觉上看,RAID1 阵列看起来“不正常”。

blkid(仅显示相关行):

/dev/mdX: UUID="..." TYPE="LVM2_member"
/dev/sdb: UUID="..." UUID_SUB="..." LABEL="...:0" TYPE="linux_raid_member"
/dev/sdc1: PARTUUID="0xd25946fb"

我期望有 2 个“linux_raid_members”,这是怎么回事/dev/sdc1?我再次检查:

# cat /proc/mdstat  (shortened)
Personalities : [raid1] 
mdX : active raid1 sdb[0] sdc[1]
  976631488 blocks super 1.2 [2/2] [UU]
  bitmap: 2/8 pages [8KB], 65536KB chunk

# cat /proc/partitions (shortened)
major minor  #blocks  name
   8       32  976762584 sdc
   8       33  976759808 sdc1
   8       16  976762584 sdb
   9        0  976631488 md0

# fdisk -l /dev/sd[bc]

Disk /dev/sdb: (empty, as expected, both disk geoms identical, also expected)

Disk /dev/sdc: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xd25946fb

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdc1        2048 1953521663 1953519616 931.5G  7 HPFS/NTFS/exFAT

再次sdc1

所以看起来从来sdc没有被撕碎过。但是所有以前的元数据/分区信息不应该被覆盖吗mdadm --create?认为它可能是缓存的信息,我运行partprobe.不用找了。我尝试了reboot,没有改变。所以,看起来驱动器上仍然有一个分区表。

我有一些想法,我决定将其发布到 SE。

因此,在写这篇文章时,我想发布一个更“精确”的blkid命令,所以我执行了blkid /dev/sd[bc]{,1} /dev/mdX,并将其粘贴到这篇文章中:

/dev/sdb: UUID="..." UUID_SUB="..." LABEL="...:0" TYPE="linux_raid_member"
/dev/sdc: UUID="..." UUID_SUB="..." LABEL="...:0" TYPE="linux_raid_member"
/dev/sdc1: PARTUUID="d25946fb-01"
/dev/mdX: UUID="..." TYPE="LVM2_member"

在这篇文章的预览中,我发现它太“常规”了,并且 - 你瞧 - 发现了第二个 RAID 成员!我怀疑自己的理智,blkid再次不带参数执行。 sdc,第二个 RAID 成员未显示。

此时我的问题似乎可以归结为:我如何(安全地)摆脱分区表,然后我会在blkid不带参数的情况下获得第二个raid成员吗?如果我不去管它,还会出现什么其他问题?此时它看起来就像我的 RAID1 可以运行一样,但是是吗?我该如何最好地测试它?

我已经建立并包括现在的想法是:

  1. 在线推土机:然后运行然后dd if=/dev/zero bs=512 count=1 of=/dev/sdc运行。但这不会以某种方式绊倒任何其他事情吗?partprobeblkidmdadm
  2. 使成员失败、断开连接(逻辑上)、将前几个 MiB 脱机、重新连接(逻辑上)、重新同步。我宁愿不。
  3. 通过 SE 了解处理仅在数组创建后发现的剩余元数据的“标准”方法。

如果没有 U.SE,我可能会尝试 1) 然后 2),相当确定 2) 会起作用,但这是最不优雅和最冗长的方式。

该 MD 上的数据并不重要,在没有答案的情况下,我将尝试 1) 然后 2)。我将发布结果。但我仍然有兴趣知道为什么sdc不显示为 raid-member blkid,而它确实显示为blkid /dev/sd[bc],而sdb在两种情况下都显示。

答案1

我相信您面临的问题是写入 RAID 成员的数据恰好看起来像分区表。修复方法非常简单,忽略分区并继续执行。可能有一种方法可以为所有 RAID 成员设置“数据偏移”来避免此问题。

相关内容