md 数组定义来自哪里?

md 数组定义来自哪里?

我在 ARM 计算机中创建了一个 md 阵列,其中有两个 USB/SATA 磁盘,采用 RAID 1 模式。然后我将两个磁盘移到我的 Ubuntu 桌面并安装mdadm。安装检测到 RAID 并将定义添加到/etc/mdadm/mdadm.conf。那么,它是从哪里来的呢?

后来我从我的桌面再次创建了 RAID,现在(即使重新启动后)也mdadm --examine --scan显示两个阵列:

ARRAY /dev/md/0  metadata=1.2 UUID=19846240:ff2a5429:8b22a9bd:a3760e2e name=microserver.delrio.red:0
ARRAY /dev/md/0  metadata=1.2 UUID=49a26458:5449d0ff:4606e203:ddad2fe8 name=ubuntu:0

当您在 GNU/Linux 中创建 RAID 阵列时,mdadm阵列定义存储在哪里?

我如何删除仅有的第一个?

答案1

在不同的系统上有很大的不同。Linux 软件 raid 使用 raid superbock,它位于每个成员设备的最后 64kB 上。

更准确地说,如果设备的大小以字节为n单位,则 raid 超级块位于n&~65535-65536

raid 超级块位于末尾,因为在镜像式 raid 级别中,它可以更容易地独立于阵列使用成员设备(因为您可以简单地安装它,当然,之后您需要执行阵列恢复)。

其确切的 RAID 超级块格式详细描述如下本维基

你可以用任何十六进制编辑器查看/编辑其实际的字节数据,例如地塞米松

实际上,它描述了整个 raid 布局(raid 级别、校验和)以及整个阵列中的成员设备。

在 RAID 初始化期间,内核会读取超级块并检查其一致性。不一致的成员不会插入到阵列中。

mdadm --examine --scan准确显示此 raid 超级块信息,无需内核 raid 驱动程序的干预。

就您而言,您的阵列中存在明显的不一致。从这里很难找到它的原因。但是,您有一个 raid1,它是一个镜像,因此不存在数据丢失的真正危险。您可以做的最简单的事情是:

  1. 你用命令摧毁了其中一个团队成员的团队超级区块mdadm --zero-superblock
  2. 然后使用 将此设备重新插入到阵列mdadm --add

它将开始新的重新同步。

附言1:

我认为 raid 超级块已被您的 ubuntu 重写,但不确定。将超级块清零,然后重新插入设备即可解决问题。

附言2:

RAID 超级块格式与平台无关,不同架构之间的最后一个字节也应相同,即使在字节顺序不兼容的情况下也是如此。您的问题几乎肯定不是架构不兼容,而是您的某个设备上错误地覆盖了 RAID 超级块。

答案2

元数据存储在超级块

要删除,我认为您需要查看 mdadm --zero-superblock。在开始操作之前,请确保您已备份元数据。

相关内容