文件系统(ZFS)
对于一台 NAS 来说最重要的当然是文件系统,不需要太多调研就可以找到 ZFS —— 可能是目前在数据可靠性上下功夫最多的单机文件系统了,于是我的整个选型就围绕 ZFS 展开了。
ZFS 既是文件系统,同时又是阵列(RAID)管理器,这为它带来了一些其他文件系统难以提供的能力:
- ZFS 为每个块都存储了校验和,同时会定期扫描整个硬盘,从 RAID 中的其他硬盘修复意外损坏的数据(如宇宙射线导致的比特翻转)。
- 在 RAID 的基础上可以 指定某些目录以更多的份数冗余存储,对于重要的数据即使损坏的硬盘超过了 RAID 方案的限制,依然有可能找回。
- ZFS 还支持数据加密、压缩和去重,这三项功能以一种巧妙的顺序工作,并不会互相冲突,同时这些所有选项都可以设置在目录(dataset)级别、可以随时更改(只对新数据生效)。
ZFS 当然也支持快照,快照可以被导出为二进制流,被存储到任何地方。这个功能可以让你在不丢失任何元信息的情况下对 ZFS 的文件系统进行备份、传输和恢复。
通常认为 RAID5 在出现硬盘故障的恢复过程中存在着较高的风险发生第二块盘故障、最终丢失数据的的情况;或者硬盘上的数据随着时间推移发生比特翻转导致数据损坏。但考虑到 ZFS 会定期做数据校验来保证数据的正确性,再综合考虑盘位数量和容量,我认为这个风险还是可以接受的,后面也会提到还有异地备份作为兜底措施。
一些评论认为 ZFS 对内存的需求高、必须使用 ECC 内存。这其实是一种误解:更多的内存可以提升 ZFS 的性能,ECC 则可以避免系统中所有应用遇到内存错误,但这些并不是必须的,即使没有更多的内存或 ECC,ZFS 依然有着不输其他文件系统的性能和数据完整性保证。