1. 在 ZFS 中,子数据集(Dataset)默认会共享父池(Pool)的剩余空间。

这不是一个固定分配的“默认设置”,而是 ZFS 动态分配空间的特性。

  • 显示机制:因为 myzfs/ha_data 没有设置配额(Quota),它认为自己可以动用池中所有的可用空间,所以显示的“容量”其实就是该池当前的“剩余可用空间”。

如果你希望限制它的容量,可以使用命令:
zfs set quota=20G myzfs/ha_data(这样它就会显示为 20G)。


2. 在 PVE 虚拟机 (VM) 中挂载 /myzfs 的方法

因为虚拟机(VM)与宿主机内核隔离,你不能像 LXC 容器那样直接通过 mp0 参数进行 Bind Mount。你有以下三种主流方案:

方案 A:Virtio-FS(推荐,性能最好)

PVE 8.x 及更高版本支持 Virtio-FS,这允许 VM 直接通过驱动访问宿主机的目录。

  1. 在 PVE 宿主机设置:

    • 在 VM 的 Hardware (硬件) 选项卡中,点击 Add (添加) -> File System。
    • ID: 随意起名(例如 myzfs_share)。
    • Path: 填写 /myzfs。
  2. 在虚拟机 (Guest OS) 中挂载:

    # 创建挂载点
    mkdir /mnt/myzfs
    # 手动挂载
    mount -t virtiofs myzfs_share /mnt/myzfs

    注:需要在虚拟机内安装 virtiofsd 相关支持(现代 Linux 内核通常已内置驱动)。

方案 B:NFS 共享(最通用)

如果你需要多个 VM 同时访问,或者 Virtio-FS 兼容性有问题,NFS 是标准做法。

  1. 宿主机安装服务:apt install nfs-kernel-server
  2. 配置 /etc/exports:
    添加一行:/myzfs 192.168.1.0/24(rw,sync,no_subtree_check) (将网段换成你 VM 所在的网段)。
  3. 虚拟机挂载:
    mount 192.168.1.xxx:/myzfs /mnt/myzfs

方案 C:9p 协议(较旧的替代方案)

如果你的 PVE 版本较旧,可以使用 9p。在 VM 的 .conf 文件(/etc/pve/qemu-server/ID.conf)中添加:
args: -virtfs local,path=/myzfs,mount_tag=shared_data,security_model=passthrough,id=shared_data


3. 注意:关于加密数据集

由于你的 myzfs 中存在加密数据集,请务必注意:

  • 挂载前提:在 PVE 宿主机上,加密数据集必须已经加载了 Key 并且处于 Mounted 状态。
  • 可见性:如果你在宿主机上看到 /myzfs 里面是空的(没解锁),那 VM 挂载过去也只能看到空文件夹。
  • 建议:建议在宿主机启动脚本中配置好自动解密(如果你使用了 Keyfile),确保在虚拟机启动前数据已就绪。

总结

  • VM 挂载 优先考虑 Virtio-FS,如果追求稳定性或跨网络访问则用 NFS。