md raid5:将md内部扇区号转换为偏移量
TL; DR摘要:将md扇区号转换为/dev/mdX设备内的偏移量,以及如何使用进行调查xfs_db。扇区号来自sh->sector中linux/drivers/md/raid5.c:handle_parity_checks5()。 我不知道MD的内部原理,所以我不知道该如何处理printk我添加的日志记录的输出。 偏移到组件设备中(对于dd十六进制编辑器或查看器)也将很有趣。 我想我应该在Linux突袭邮件列表中问这个问题。它是仅订阅者,还是可以不订阅而发布? 我将xfs直接放在桌面上的4个磁盘的MD RAID5上(没有LVM)。最近的mismatch_cnt清理发现非零值(实际上是8,因为md一次在4kiB页上运行)。 这是RAID5,而不是RAID1 / RAID10 ,mismatch_cnt在正常操作期间,其中!= 0可能会发生。(此Wiki页面底部的其他链接可能对某些人有用。) 我可以盲目地做repair,但是那时我不知道该检查哪个文件可能的损坏,除了失去选择哪种重建方法的机会。 Frostschutz对类似问题的答案是我发现的唯一回溯到文件系统差异的建议。它既麻烦又缓慢,我宁愿使用更好的方法来首先将其缩小到几个文件。 内核补丁添加日志 奇怪的是,md的检查功能不会报告发现错误的位置。 我加入了printk在MD / raid5.c记录sh->sector在if该增量分支mddev->resync_mismatches中handle_parity_checks5()(小片在github上发布,最初基于4.5 RC4从kernel.org。)对于这个是确定用于一般用途,它可能会需要避免充斥大量不匹配的维修日志(也许仅在新值resync_mismatches<1000 时才记录日志)。也可能只登录check而不是repair。 我敢肯定,我正在记录一些有用的信息(即使我不知道MD内部信息!),因为在处理错误的情况下,switch相同的函数会打印该扇区号。 我编译了修改后的内核并启动了它,然后重新运行检查: [ 399.957203] md: data-check of RAID array md125 ... [ 399.957215] md: using 128k window, over a total of 2441757696k. ... [21369.258985] md/raid:md125: check found mismatch at …