English日本語

功能

底下是 ZFS

能得到什么

  • 一台虚拟机一个数据集,布局照 SmartOS。配置就是磁盘旁边的一个 config.json。
  • 磁盘是 raw 文件(默认)或 zvol,稀疏分配,lz4 压缩。
  • 虚拟机看到的是 virtio-blk、NVMe 或 AHCI;老系统可以用 IDE。
  • 每台虚拟机有自己的一份 UEFI 固件,恢复出来的虚拟机不会碰上中途换过的固件。
  • TRIM 一路打通:虚拟机里删掉的空间会还给存储池。

快照

快照就是对这台虚拟机的数据集树做一次 zfs snapshot -r。ZFS 原子地拍下整棵树,几块盘、配置、固件变量都是同一时刻的。拍快照不拷数据,虚拟机不用停。运行中拍的快照是崩溃一致的,相当于那一刻拔了电:现代文件系统都能起来,数据库可能要回放日志。

回滚要逐个数据集做,因为 ZFS 没有递归回滚:实测中只用 rollback -r,zvol 没有回去。keelOS 对每个数据集分别回滚。

实测

  • recordsize 为 16K 的 raw 文件和 zvol 性能相当:随机读写相差 10% 以内。
  • virtio-blk 和 NVMe 相差 10% 上下,选 NVMe 不吃亏。
  • 影响最大的是 recordsize:128K 时 4K 随机写只有约 4000 IOPS,16K 时是 1 万到 1.6 万。
  • TRIM:虚拟机里写 4 GiB、删掉、执行 fstrim 之后,宿主上的磁盘镜像回到 1.5 MB 以下。文件或 zvol、virtio-blk 或 NVMe,四种组合都一样。
  • 拍快照、改数据、回滚:根盘和另加的 zvol 都回到了拍快照的那一刻。

还没做的

  • 快照只有磁盘。带内存、恢复后原地接着跑的快照在计划中;它要用的检查点,宿主重启时已经在用。
  • 带直通设备的虚拟机,快照只包括 keelOS 管的磁盘:直通出去的控制器后面的盘,宿主回滚不了;设备的状态也没法和内存一起存下来。
  • 用 zfs send 把虚拟机搬到另一台机器、定时备份,都还是计划,没写代码。

阅读文章 →

← 全部功能