我花了几个小时与 mdadm 作斗争,最后不得不重新安装 Linux 并进行更多斗争,主要是因为驱动器不知何故存在写保护问题(我仍然无法解释),而且显然是因为生成的挂载多驱动器默认由 root 拥有(花了我一段时间)。现在看起来它已经正常工作了,mdadm 正在重新同步,我可以写入测试文件。
... 但如果这只是障眼法(双关语)呢?我知道 mdadm 已经存在很久了,但不管我是否信任它(我并不信任 - 或者至少我不信任我对它的使用)或者因为我很好奇,我如何在不从计算机上移除驱动器的情况下查看 sdb1 和 sdc1?显然我无法挂载它们,因为 Linux 现在无法理解它们,因为 mdadm 已经添加了一个标头。
您可以运行
mdadm --action=check /dev/mdX
,并在例如 中跟踪其进度watch head /sys/block/mdX/md/mismatch_cnt /proc/mdstat
。这应该在整个测试过程中显示mismatch_cnt
为0
。如果有任何不匹配,则数据/镜像/奇偶校验不同步。这是测试方法本身mdadm
提供的……您还可以
mdadm --fail
使用驱动器(或在拔下任一驱动器的情况下启动)并查看 RAID 是否仍能正常工作。从某种意义上说,这是真正的测试,因为 RAID 必须能够处理完全故障的驱动器。如果您还从这些驱动器启动,您还将同时测试您的引导加载程序配置。但是,当您稍后重新添加驱动器时,这种测试方法可能会在每次尝试时触发完全重新同步。
对于 RAID 1,您可以设置任一驱动器
write-mostly
,这意味着将从另一个驱动器读取数据。这是一种非破坏性测试,任一驱动器在读取时都将提供相同的数据。对于手动方法,您可以使用 获取数据偏移量
mdadm --examine
并使用 以只读方式挂载mount -o ro,loop,offset=X
。但是,这应该在文件系统未使用时从 Live CD / 执行。您还可以使用
cmp /dev/sdb1 /dev/sdc1 SKIP1 SKIP2
(或--ignore-initial=SKIP1:SKIP2
) 选项比较数据(将 SKIP1 SKIP2 设置为 mdadm 偏移量(以字节为单位)。如果您无法确定确切的偏移量,您也可以简单地将 1 GiB$((1024*1024*1024))
字节放入设备中,因为数据偏移量通常较小。您还可以使用它
filefrag -v -e
来找出特定文件的分配位置,然后使用dd
或hexdump
带有跳过选项来尝试从任一驱动器读取它(添加了 mdadm 偏移量)。