OpenZFS中一个险些造成灾难的Bug:类型安全的重要性

2025-07-11
OpenZFS中一个险些造成灾难的Bug:类型安全的重要性

一个OpenZFS的底层磁盘分配函数中存在一个隐蔽且严重的bug,它会导致数据被悄无声息地覆盖。这个bug源于一个简单的类型错误,将计算得到的`psize`错误地返回为`asize`。作者花了近两天时间才追踪到这个bug。虽然这个bug在正式发布版本中不存在,但这引发了作者对C语言静态分析工具的局限性以及Rust语言类型系统的优势的思考。Rust通过自定义类型(例如`PhysicalSize`和`AllocatedSize`)可以有效避免此类错误。作者认为,与其指望程序员完美无缺,不如利用工具和语言特性来提升代码质量,降低这类难以察觉的,可能造成严重后果的bug的风险。

阅读更多
开发

OpenZFS 重复数据删除功能现在很出色,但您仍然不应该使用它

2024-10-31
OpenZFS 重复数据删除功能现在很出色,但您仍然不应该使用它

OpenZFS 2.3.0 引入了“快速重复数据删除”功能,显著改进了传统重复数据删除的性能。文章详细解释了重复数据删除的原理、传统方法的缺点以及快速重复数据删除的改进之处。传统方法存在重复数据表占用空间大、实时条目列表内存消耗高、唯一条目过多等问题,导致性能下降和内存压力增大。快速重复数据删除通过减小实时条目列表大小、引入重复数据删除日志、增量日志刷新以及提供独特的条目管理工具等方式解决了这些问题。尽管如此,作者仍然建议在大多数情况下,由于块克隆(BRT)等零拷贝技术的出现,重复数据删除功能并非最佳选择,除非拥有大量重复数据且客户端无法使用零拷贝技术。

阅读更多