Pau*_*aul 7 linux corruption software-raid raid1
这是噩梦般的日子之一:运行在 Linux SW-RAID1 上的虚拟化服务器运行的虚拟机在看似随机的代码块中表现出随机段错误。
在调试时,我发现一个文件在每次运行时都会给出不同的 md5sum。深入挖掘,我发现:组成 RAID1 镜像的原始磁盘分区包含 2 个位差异和 ca。一张盘上的 9 个扇区完全为空,而另一张盘上则充满了数据。
显然,Linux 从镜像集的不确定选择的磁盘中返回一个扇区。所以有时相同的扇区返回正常,有时损坏的返回。
该文件说:
RAID 不能也不应该防止介质上的数据损坏。因此,故意损坏磁盘上的数据(例如使用 dd)以查看 RAID 系统将如何处理也没有任何意义。很有可能(除非您损坏 RAID 超级块)RAID 层永远不会发现损坏,但您在 RAID 设备上的文件系统将被损坏。
谢谢。那会帮助我入睡。:-/
有没有办法让 Linux 至少通过使用扇区校验和或类似的东西来检测这种损坏?这会在 RAID5 设置中检测到吗?这是我希望我使用 ZFS 或 btrfs 的时刻吗(一旦它在没有超级管理员功能的情况下变得可用)?
编辑:我并不孤单。
您可以强制检查(例如)md0
echo "check" > /sys/block/md0/md/sync_action
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令检查测试状态
cat /sys/block/md0/md/sync_action
Run Code Online (Sandbox Code Playgroud)
当它返回check
检查正在运行时,一旦它返回,idle
您就可以执行
cat /sys/block/$dev/md/mismatch_cnt
Run Code Online (Sandbox Code Playgroud)
查看不匹配计数是否为零。许多发行版都会自动执行此检查,例如每周为您运行一次,就像大多数工业硬件 RAID 在阵列空闲时不断在后台运行(他们通常称之为“RAID 清理”)一样。请注意,根据 Fedora 的自动检查文件中的注释,内核中的 RAID1 写入是无缓冲的,因此如果安装了阵列,即使对于健康的阵列,不匹配计数也可能不为零。
因此,如果可能的话,通过在 VM 关闭时执行此检查来使阵列停顿可能是一个好主意。
我要补充一点,当他们这么说时,我同意文档
RAID 不能也不应该防止介质上的数据损坏
RAID 旨在防止设备完全故障;防止存储设备元素中的增量随机故障是错误检查和块重新映射的工作,这可能最好在控制器本身中完成。我很高兴文档警告人们 RAID 的局限性,特别是如果它是在片状设备上实现的。我发现对我的驱动器进行频繁的 smartctl 运行状况检查有助于我掌握驱动器,这些驱动器开始显示导致镜像不同步的那种错误。