这是我在 ServerFault 上提出的问题的转帖,由于缺乏活动而被自动删除。让我们希望它在这里有更好的运气。
(写执行“检查”后check
到/sys/class/block/md0/md/sync_action
)一个MD软件RAID阵列在Linux上的冗余,该md
子系统将更新/sys/class/block/md0/md/mismatch_cnt
与包含在具有不匹配块的扇区数虚拟文件。
不幸的是,它没有说明它们是哪个块或扇区。
在具有 2 个驱动器的 RAID 1 阵列上(例如 sda 和 sdb 上的 md0),可以执行以下操作:
blockdev --flushbufs /dev/md0 /dev/sda /dev/sdb
cmp -l /dev/sda /dev/sdb > sda-sdb.diff
Run Code Online (Sandbox Code Playgroud)
找出哪些字节不同,然后导出扇区和其他信息(例如,如果那里有文件系统,哪个文件会受到影响)。
但是有没有办法为其他 RAID 级别获取相同的信息?例如,使用这个 RAID10 阵列:
$ cat /sys/class/block/md0/md/mismatch_cnt
4608
$ cat /proc/mdstat
[...]
md0 : active raid10 sdd1[4] sdc1[3] sdb1[1] sda1[0]
3906763776 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
Run Code Online (Sandbox Code Playgroud)
我怎么知道哪里不匹配/dev/md0
?
在这个特定的例子中,算法并不太复杂:我们可以使用mdadm -E
来找出数据在设备中的开始位置,然后 sda1 意味着与 sdb1 相同,sdc1 与 sdd1 相同,即 /dev 的第一个块/md0在sda1和sda2的第一个chunk中,sdc1和sdd1的第一个chunk中的第二个,所以给定一对设备中一个字节差异的偏移量,找出对应的偏移量并不难在 md 设备中,但我希望有一种方法可以避免必须手动运行算法
归档时间: |
|
查看次数: |
735 次 |
最近记录: |