我正在尝试 btrfs 并注意到一些有趣的行为:
我有两个驱动器,采用 raid 1 配置。
sudo btrfs fi show
Label: none uuid: 52b9c6f6-ce5c-4727-861e-e2fd012e475f
Total devices 2 FS bytes used 251.16GiB
devid 1 size 298.09GiB used 252.01GiB path /dev/sdi
devid 2 size 298.09GiB used 252.01GiB path /dev/sdh
如您所见,它们设置为mdata=raid1, data=raid1
:
sudo btrfs fi df /btr/.fsroot/
Data, RAID1: total=251.00GiB, used=250.57GiB
System, RAID1: total=8.00MiB, used=64.00KiB
Metadata, RAID1: total=1.00GiB, used=597.47Mi
现在,如果我失败了/dev/sdh
(例如拔出 SATA 电缆),一切都会按预期进行,
sudo btrfs fi show
Label: none uuid: 52b9c6f6-ce5c-4727-861e-e2fd012e475f
Total devices 2 FS bytes used 251.16GiB
devid 1 size 298.09GiB used 252.01GiB path /dev/sdi
*** Some devices missing
文件系统甚至被卸载了。但让我困扰的是如果我失败了会发生什么/dev/sdi
:
Label: none uuid: 52b9c6f6-ce5c-4727-861e-e2fd012e475f
Total devices 2 FS bytes used 251.16GiB
devid 1 size 298.09GiB used 252.01GiB path /dev/sdi
devid 2 size 298.09GiB used 252.01GiB path /dev/sdh
因此基本上根本检测不到发生故障的驱动器。甚至无法通过运行来修复此问题btrfs device scan
。那么在生产环境中,我应该如何检测我的 raid 是否不再存在?
答案1
您是否清理过 BTRFS 文件系统?清理应读取并检查所有可用副本。建议安排清理,例如每月计划任务,这就是您收到通知的方式。
备查:不幸的是,BTRFS 似乎无法“实时”检测到故障驱动器,即在文件系统挂载时(*)。
我猜他们没有想到服务器系统可以连续运行数月甚至数年而从未被卸载。希望这个问题现在已经解决了(当您阅读本文时)...
*: 引用 2015 年 9 月的邮件列表条目:
不同之处在于,我们有代码来检测挂载时不存在的设备,但我们还没有代码来检测挂载文件系统上是否存在设备。我不知道为什么正确检测设备消失似乎不是优先事项,但这是与挂载行为无关的问题。
https://www.mail-archive.com/[电子邮件保护]/msg46598.html
例如,ZFS 会意识到需要访问的驱动器已消失并将其标记为 FAULTED。对于使用 BTRFS 的服务器,可能有一个想法是进行自定义检查(cron 作业),如果 RAID 阵列中至少有一个驱动器不再可访问,则发送警报...
降级坐骑:任何为了模拟故障而手动移除驱动器的人都可能会考虑以降级模式挂载文件系统(例如,使用“btrfs 替换“)。以降级(rw)模式挂载可能会很危险,如果您事后不注意重新同步文件系统,甚至可能会导致数据丢失(平衡):
仅供参考,请务必小心处理降级的 rw 安装。没有自动重新同步功能来将之前丢失的设备与降级的 rw 安装的设备进行匹配。您必须清理或平衡,目前还没有针对 Btrfs 进行优化,无法有效地“区分”设备的代数并快速使它们全部同步。
更糟糕的是,如果您不进行清理或平衡,然后重新进行测试,反转设备,使其丢失。现在您有多个设备处于 rw、降级和已安装状态,将它们重新组合在一起将不可挽回地损坏整个文件系统。