当使用 btrfs 的文件的校验和失败时实际上会发生什么?

当使用 btrfs 的文件的校验和失败时实际上会发生什么?

我正在我的嵌入式 Linux 系统上使用 btrfs 进行测试。它使用美元卡进行 rfs。该系统是远程部署的,因此没有人类系统管理员来照顾它。我的问题是当校验读取文件失败时会发生什么?有没有办法自动检测到这一点并将消息发送回我的中央服务器?

答案1

Btrfs 使用 crc32c 校验和来检查块的完整性。如果校验和与读取时的块不匹配,则读取替代块。这是假设有替代方案 (RAID1)。如果该块也失败或者没有替代方案,则返回 EIO(错误输入/输出)。

我不知道有什么方法可以自动检测错误,但所有错误都会记录到系统日志中。尝试dmesg | grep btrfs。你应该寻找这样的东西:

[ 2993.114213] btrfs: sda2 checksum verify failed on 272228352 wanted 1A0FCFD3 found 119281BE level 0
[ 2993.114527] btrfs: sda2 checksum verify failed on 272228352 wanted 1A0FCFD3 found 119281BE level 0
[ 2993.114795] btrfs: sda2 checksum verify failed on 272228352 wanted 1A0FCFD3 found 119281BE level 0
[ 2993.115097] btrfs: sda2 checksum verify failed on 272228352 wanted 1A0FCFD3 found 119281BE level 0

您可能可以制作一个脚本或脚本来查看日志并定期通知您错误。或者您可以过滤这些日志条目并触发 rsyslog 操作。

相关内容