md数组定义从哪里来?

我在RAID 1的两个USB / SATA磁盘的ARM计算机上创build了一个mdarrays。然后我将两个磁盘都移到了我的Ubuntu桌面上,并安装了mdadm 。 安装检测到RAID并将定义添加到/etc/mdadm/mdadm.conf 。 那么,它从哪里来?

后来我从桌面上重新创buildRAID,现在(即使重新启动后) 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中使用mdadm创buildRAIDarrays时,数组定义存储在哪里?

我怎样才能删除第一个?

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

更确切地说,如果设备的大小是n个字节,raid超级块在n&~65535-65536

raid超级块到最后,因为在镜像raid级别,使用独立于数组的成员设备变得更容易(因为你可以简单的挂载它,当然你需要在这之后做一个数组恢复)。

其精确的突袭超级块格式在本维基中有详细描述。

它的实际字节数据可以通过任何hexa编辑器查看/编辑,例如dhex 。

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

在raid初始化过程中,内核读取超级块并检查其一致性。 Insonsistent成员不插入到arrays中。

mdadm --examine --scan显示了这个raid超级块信息,没有内核raid驱动的干预。

在你的情况下,你的数组中有一个明显的不一致。 从这里不容易find,其原因是什么。 但是,你有一个raid1,这是一面镜子,所以没有真正的数据丢失危险。 最简单的你可以做什么:

  1. 你用一个mdadm --zero-superblock命令销毁其中一个raid成员的raid mdadm --zero-superblock
  2. 然后用mdadm --add重新插入这个设备到数组中。

它将开始一个新的重新同步。

PS#1:

我认为raid超级块已经被你的ubuntu重写了,但是不确定。 调零超级块,然后重新插入设备将解决它。

PS#2:

raid超级块格式是独立于平台的,即使在不兼容的情况下,它也应该是相同的,直到不同体系结构之间的最后一个字节为止。 您的问题几乎肯定不是架构不兼容,但错误地覆盖您的设备之一的超级块。

元数据存储在超级块中 。

要删除,我想你想看看mdadm – 零超级块。 在开始摆弄之前,请确保您有元数据的备份。