近日对 ZFS 根存储池的一点经验

前几天,觉得仅仅用单硬盘来做 ZFS 的根存储池实在是对 ZFS 诸多特性的严重浪费,于是动了想要试试用 mirror 或者 raidz 来做根存储池的想法。

由于我手头没有多余的存储设备,因此一切只得在虚拟机中进行。总结一下这几天的收获和经验。

1、根存储池一旦创建,便无法使用 zpool add 命令添加其他磁盘以创建多个镜像顶层虚拟设备,但可以使用 zpool attach 命令扩展镜像虚拟设备。也就是说,如果根存储池的组织形式一旦固定,就无法进行更改。我曾经试着将新的磁盘设备以条带形式对根存储池进行扩展,结果就是系统无法引导,设备损坏。因此,根存储池创建以后最好就不要再动。

2、不管是 Linux 还是 FreeBSD,都可用 mirror 或者 raidz 作为根存储池,虽然 Oracle 官方手册说根存储池不支持 raidz。对于 Linux,如果采用 mirror 或者 raidz 作为根,则必须将 /boot 单独分出来,否则 grub 无法安装,系统也无法引导。如果仅是做一个一般的根存储池,则无此要求。

3、一般社区都是推荐将整块磁盘分配给存储池,而不是以磁盘上面的分区进行存储池的创建。也就是说,推荐使用 zpool create -f rpool /dev/sda 的形式来创建一个存储池。至于具体原因,还有待探讨。因此,在这种情况下,Linux 下面的 /boot 不仅得单独分区,甚至必须使用一块非存储池设备的磁盘来进行存放。我的想法是,以后可以将 /boot放在高速 U 盘上面,这样也可以作为启动系统的钥匙,不算很麻烦。

暂时大概就这么多吧,更多的 ZFS 应用,我也得好好学习下。虽然接触 ZFS 已有半年多,不过由于我没有系统地通读 ZFS 管理手册,对它仍然是一知半解。而且手头的硬件环境也不是很满足条件,我的笔记本最多只能安装三块硬盘,而我又必须保留 Windows,也不想放弃 Linux 或者 FreeBSD 中的任何一个。

看来之后的学习还是离不开虚拟机啊。