如果我在读取时拔掉硬盘,Btrfs 会发生什么?

如果我在读取时拔掉硬盘,Btrfs 会发生什么?

我对 Linux (Debian) 和 Btrfs 还不太熟悉。开始在家里的 DIY Nas 上测试它。

设置: - 配备 2 个 WD RED 3TB 磁盘的中型硬件 - Debian(最新稳定版) - Btrfs-tools(最新稳定版) - 配置了完整的磁盘 raid1 设置并将几 GB 的数据复制到其中

然后我做了一个测试,在不断读取数据的同时拔掉了两个硬盘中的一个。令人惊讶的是,它无法继续从镜像读取操作,相反,我收到了许多带有红色背景的令人恐惧的错误信息。

我希望类似 RAID1 的系统能够默默地帮我处理这些事情。这是正常现象吗,还是我的设置中存在错误?

答案1

镜像的理念显然是,如果镜像的一侧发生故障,另一侧应该接管。在理想情况下,当镜像的两侧都可用时,两侧也应该协同工作以提高读取性能。

也就是说,如果镜子的一侧发生故障,那么一切飞行中读取失败的设备可能会在延迟后失败。这是正常的和预期:命令被发送到一个设备,但该设备突然不再存在并且无法响应该命令,这将导致某种错误情况。内核很可能会记录这些故障,以便提醒管理员“刚刚发生了一些不好的事情”。系统可以配置为将这些重要的内核事件输出到控制台。

任何镜像解决方案的试金石是这些错误是否真的传播到用户空间层,导致用户应用程序收到 I/O 错误(或更糟的是,无效数据)。如果镜像设置工作正常,只要镜子的另一侧正常工作,用户空间应用程序应该不会受到影响,但读取时间比平时长一点,并且系统会发出一些有关现在不可用的设备上发生的 I/O 错误的诊断信息。这些都不会对表现良好的用户空间软件产生明显影响。

如果用户空间进程(而不仅仅是内核中的 Btrfs 代码)发现 I/O 错误实验结果显示,您可以至少相当一致地重现该行为,那么您可能遇到了 Btrfs 代码中的错误。在这种情况下,您可能需要提交错误报告。特别是考虑到这是 Debian,我建议首先在Debian 的错误跟踪系统如果他们认为有必要,就让他们将问题上报给内核开发人员。确保包含尽可能多的相关细节,包括您正在运行的确切命令、所涉及的所有内容的确切版本、错误消息的确切文本、存储设置的确切描述,以及您能想到的可能有助于追踪问题的任何其他信息。

相关内容