我有一个 ext4 分区,具有以下底层堆栈:
- sda1 和 sdb1 一起组成 RAID1,产生 md0
- md0 经过 LUKS 加密,生成 md0_crypt
- md0_crypt 之上是单个 LVM 卷 mv0_vg_media,安装在 /home/media 下
执行时,cp /home/media/hierarchy/photo.jpg /tmp
我收到 IO 错误(但仅针对大约 20 个文件,数万个文件中)。
然而,当我尝试调试问题时:
- 当 IO 错误发生时,dmesg 和 syslog 都保持干净。 (编辑:澄清:这意味着 dmesg 或 syslog 中没有记录任何与磁盘相关的输出,即使
--follow
在发生读取错误时日志通过选项处于活动状态。) - sda 和 sdb 上的坏块不会显示任何错误
- fsck on
/dev/mapper/md0_vg_media
仅输出“可以更窄。忽略。”警告但没有错误,并且自动更正选项无法修复任何问题。
我很困惑。我可以删除这些文件并重新同步它们,但如果我不知道问题到底是什么,那么这是一个坏主意。
我怎样才能进一步调试这个?
编辑:
根据评论和进一步的研究,我尝试了以下方法(徒劳),结果如下:
mdadm --examine /dev/sda
(与 sdb 相同)返回:/dev/sda: MBR Magic : aa55 Partition[0] : 3907029167 sectors at 1 (type ee)
mdadm --examine-badblocks /dev/sda
(与 sdb 相同)返回:mdadm: mbr metadata does not support badblocks
cat /sys/block/md0/md/mismatch_cnt
包含值0
(零)echo 'check' > /sys/block/md0/md/sync_action
执行检查但不会发现任何错误。 Dmesg 有两个条目:[734796.807172] md: data-check of RAID array md0
紧接着是下面的:[754370.977181] md: md0: data-check done.