随着文件量的增多,ZFS卷容量渐现不足,存储池扩容势在必行,考验一个文件系统强大与否的时刻终于到来,ZFS RAIDZ 扩容很简单,且听笔者分说。

FreeNAS 为 ZFS 存储池扩容提供了两种方案(存储池就是卷,卷就是存储池)。方案一:增加新硬盘,用卷管理器将新增的硬盘附加到需要扩容的卷上;方案二,使用更大容量的硬盘替换容量较小的硬盘。

方案一:新增硬盘扩容

这种扩容方式最方便,可以直接在 WebGUI 的卷管理器中操作,但必须满足硬盘数量上的硬性要求。假设某个 ZFS 卷是由4块硬盘组成的 RAIDZ2 阵列,要给这个卷扩展容量,必须同时添加4块硬盘,虽然新增的硬盘容量没有限制,但是建议新增硬盘容量相同。如果新增的硬盘数量不足,扩容操作是无法完成的,为什么会是这样呢?

这种扩容方式的原理是这样的,假设某个 ZFS 卷是由 2 块 1TB 硬盘组成的 Mirror 镜像,可用容量为 1TB,我们额外准备 2 块 1TB 硬盘对其扩容,系统会将新增加的 2 块硬盘组成容量为 1TB 的 Mirror 镜像卷,然后将这个新增的镜像卷与原来的 Mirror 镜像卷组成一个 Stripe 带条卷,从而实现卷容量扩容至 2TB。RAID-Z 的扩容也同理,把新增的硬盘组成与待扩容的卷相同的结构,然后将新旧两个结构相同的 RAIDZ 卷组成 Stripe 带条卷。只有两个卷的组成结构和硬盘数量完全相同,才能组成 Stripe 带条卷,这就是为什么一定要满足硬盘数量要求的原因。

接下来演示具体的操作方法:

首先在 WebGUI 中点选 “Storage” 存储菜单,点选需要扩容的卷,然后点击界面下方的** “Volume Status” 查看卷状态**按钮。

20150130213606

如上图所示,可以看到,名称为 myStor 的卷是由 2 块 1TB 硬盘组成的 Mirror 镜像卷,实际可用容量为 928GB。根据上面扩容原理的介绍,如果要为 myStor 卷扩容,必须新增2块硬盘(建议相同容量),如果新增的2块硬盘容量不同,则扩展的容量与最小的硬盘容量相同。

接下来,就是给FreeNAS主机安装新增的硬盘,如果你不确定主机是否支持硬盘热插拔,可以关闭系统以后再安装新硬盘。安装好新硬盘,在存储选项卡中点击 “View Disks” 查看磁盘按钮。

20150130214415

可以看到系统已经识别了新安装的两块硬盘,下面就可以开始进行扩容操作了。

20150130214602

点击存储选项卡中的 “Volume Manger” 卷管理器按钮。此时弹出了卷管理器窗口,在 “Volume to extend” 扩展卷的下拉菜单中选择需要扩容的卷名,本例为 myStor,请根据你的实际名称选择。在 “Volume layout” 卷结构选项中拉动右侧的圆形图标,调整新增磁盘的卷结构,注意:此处设置的卷结构类型必须与待扩容卷的结构一致,在本示例中,我们将新增的两块硬盘组成 Mirror 镜像结构,与 myStor 卷的结构一致。设置完成,点击 “Extend Voluem” 扩展卷按钮。

20150130220844

等待系统自动执行卷扩容操作。

20150130221533

扩容完成以后,可以看到,myStor 卷的实际可用容量从之前的 928GB 变成了 1.8TB。

20150130221643

点选 myStor 卷,查看一下扩容以后的卷结构,如下图。可以看到,两块旧硬盘(ada0和ada1)组成了 mirror-0,两块新硬盘(ada2和ada3)组成了 mirror-1,原来的卷 myStor 现在变成了由 mirror-0 和 mirror-1 组成的带条卷,与上面介绍的扩容原理遥相辉映。

20150130223021

只要你的 FreeNAS 主机有足够多的 SATA 接口和硬盘,就可以无限制的为某个卷扩容。

方案二:替换硬盘扩容

相比第一种方案,此方案有些复杂,执行的时间也比较长。但对于那些 SATA 接口不足的主机,这可能是更靠谱的扩容方案,原理非常简单,使用更大容量的硬盘,替换掉卷中容量较小的硬盘。具体的操作方式与此前介绍过的《FreeNAS 替换损坏的硬盘》的操作完全相同,把待扩容卷中的硬盘看做损坏的硬盘即可,一块一块硬盘的替换,每替换一块,都要确认阵列重建完毕后再进行下一块硬盘的替换,直到所有硬盘都替换完成。嗯,想想也挺可怕的,这可能需要很长时间才能完成。

**特别提醒:**这种替换硬盘的方式需要 ZFS 支持并启用 autoexpand 属性,但 FreeNAS 8.3.0 以前的版本不支持此属性,如果你使用了更老的系统版本,必须先升级系统,然后再进行操作,否则后果很严重。

检查当前存储池是否启用 autoexpand 属性,在 WebGUI 界面左侧导航条中找到并点击打开 “Shell” 命令行。输入** zpool get all myStor** 回车(把 myStor 替换成你系统里真实的卷名称),系统会显示当前存储池所有信息,找到如下图所示的 autoexpand 这一行,如果后面显示 on 代表该属性已经启用,如果为 off 代表属性被禁用。从 FreeNAS 8.3.1 版本开始,这个属性默认是被启用的。

20150130225035

如果检测到 autoexpand 属性被禁用,可以输入 zpool set autoexpand=on myStor 回车(把 myStor 替换成你系统里真实的卷名称)启用该属性,别忘了再执行一次检查命令,确认该属性启用成功。确认无误,就可以进行硬盘替换了。