往 ZFS Pool 里加新磁盘来扩容是很容易的,但是阿里云的云盘快照只有用于单块云盘时才是原子性的,而且阿里云云盘的 IOPS 指标是跟单盘容量成线性比例的,所以新加一块云盘不如扩容云盘划算。阿里云的云盘扩容现在支持在线扩容,于是就可以不干扰服务动态扩容 ZFS pool 里的磁盘了。

以下步骤在 Ubuntu 18.04.2 + zfs-dkms 0.7.5-1ubuntu16.6 上试验通过:

  1. 创建 zpool:zpool create test vdb,使用 fdisk -l 可以看到 zfs 将磁盘分成了两个区,一个几乎占据全盘的 “Solaris /usr & Apple ZFS”,一个只有 8M 的 “Solaris reserved 1”;
  2. 在阿里云的磁盘管理里,对磁盘做「在线扩容」;
  3. 在 Ubuntu 里执行 partprobe,这步必须,否则下一步里 zpool 只修正了分区表,却没有扩容 zpool,感觉这是一个实现上的 bug,也许将来 zfsonlinux 新版会修正;
  4. 在 Ubuntu 里执行 zpool online -e test vdb