谨慎使用 ZFS 作为 Linux 的根

关注 ZoL(ZFS On Linux)项目差不多一年有余了吧,从一开始的兴奋激动,到现在的略带恐惧,不得不说,反差很大。

跟可以采用开源版本 ZFS 作为 / 的其他系统相比(如 FreeBSD、OpenIndiana、Nexenta 等),ZoL 项目在移植程度和稳定性上似乎一直落后。最典型的,当 Linux 的 / 为 ZFS 时,可能一次简单的内核升级就会让整个系统挂掉,因为 ZFS 模块跟不上内核版本的快速发布。而 Linux 内核也经常有 API 变动,一直追在后面跑,总有跟不上的时候。同时,也可能因为开源版本 zpool 的升级,而导致 grub 或 syslinux 无法再识别根分区,也就是说,系统都别想进了。另外,在目前而言,内置 ZFS 模块的 Linux LiveCD 很少,连个称手的急救盘都找不到,一旦出现问题,难以立即恢复。

而同样的情况却未发生在 FreeBSD 和 OpenIndiana 上,不仅仅是因为后两者系统发布比较缓慢,还因为后两者的内核原生支持 ZFS。以 FreeBSD 为例,升级 zpool 之后仅需要重新写一下 bootcode,即可保证重启之后还能正确引导。

因此,目前如果要在Linux 使用ZFS,最好是将ZFS作为除系统以外的数据盘进行设置。万不可将ZFS用作重要的系统挂载点,否则隐患实在是很大。虽然个人很喜欢ZFS的诸多特性,也很高兴有ZoL这样的项目来把ZFS移植给Linux,不过作为用户,我觉得所要承担的风险确实大了点。尽管#zfsonlinux里面不少人将ZoL用在了生产环境,不过天天看到有人出现ZoL导致硬盘无法识别、数据丢失等等问题,实在叫人无法放心。

总之,如果是Linux单系统且没有额外的备份,谨慎使用ZFS作为/