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 直接通过驱动访问宿主机的目录。
在 PVE 宿主机设置:
- 在 VM 的 Hardware (硬件) 选项卡中,点击 Add (添加) -> File System。
- ID: 随意起名(例如
myzfs_share)。 - Path: 填写
/myzfs。
在虚拟机 (Guest OS) 中挂载:
# 创建挂载点 mkdir /mnt/myzfs # 手动挂载 mount -t virtiofs myzfs_share /mnt/myzfs注:需要在虚拟机内安装
virtiofsd相关支持(现代 Linux 内核通常已内置驱动)。
方案 B:NFS 共享(最通用)
如果你需要多个 VM 同时访问,或者 Virtio-FS 兼容性有问题,NFS 是标准做法。
- 宿主机安装服务:
apt install nfs-kernel-server - 配置
/etc/exports:
添加一行:/myzfs 192.168.1.0/24(rw,sync,no_subtree_check)(将网段换成你 VM 所在的网段)。 - 虚拟机挂载:
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。