我在 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,它是一个镜像,因此不存在数据丢失的真正危险。您可以做的最简单的事情是:
- 你用命令摧毁了其中一个团队成员的团队超级区块
mdadm --zero-superblock
, - 然后使用 将此设备重新插入到阵列
mdadm --add
。
它将开始新的重新同步。
附言1:
我认为 raid 超级块已被您的 ubuntu 重写,但不确定。将超级块清零,然后重新插入设备即可解决问题。
附言2:
RAID 超级块格式与平台无关,不同架构之间的最后一个字节也应相同,即使在字节顺序不兼容的情况下也是如此。您的问题几乎肯定不是架构不兼容,而是您的某个设备上错误地覆盖了 RAID 超级块。
答案2
元数据存储在超级块。
要删除,我认为您需要查看 mdadm --zero-superblock。在开始操作之前,请确保您已备份元数据。