在此过程中,要在有标签区域中挂载一个具有读/写权限的 NFS 数据集。因为所有命令都在全局区域中执行,全局区域管理员可以对向有标签区域添加 ZFS 数据集进行控制。
有标签区域至少要处于 "ready"(就绪)状态下才能共享数据集。区域可以处于 "running"(正在运行)状态。
开始之前
要为区域配置数据集,必须首先停止该区域。您必须在全局区域中承担 root 角色。
# zfs create datasetdir/subdir
数据集的名称可以包括目录,例如 zone/data。
# zoneadm -z labeled-zone-name halt
# zfs set mountpoint=legacy datasetdir/subdir
如果挂载点与有标签区域相对应,设置 ZFS 的 "mountpoint"(挂载点)属性时会设置挂载点的标签。
# zfs set sharenfs=on datasetdir/subdir
# zonecfg -z labeled-zone-name # zonecfg:labeled-zone-name> add fs # zonecfg:labeled-zone-name:dataset> set dir=/subdir # zonecfg:labeled-zone-name:dataset> set special=datasetdir/subdir # zonecfg:labeled-zone-name:dataset> set type=zfs # zonecfg:labeled-zone-name:dataset> end # zonecfg:labeled-zone-name> exit
通过将数据集作为文件系统进行添加,会在区域的 /data 处挂载数据集。此步骤可以确保不会在引导区域之前挂载数据集。
# zoneadm -z labeled-zone-name boot
引导区域后,将自动挂载数据集,作为标签为 labeled-zone-name 的 labeled-zone-name 区域中的读/写挂载点。
在此示例中,管理员将一个 ZFS 数据集添加到 needtoknow 区域,然后共享数据集。数据集 zone/data 当前被指定到 /mnt 挂载点。Restricted(受限)区域中的用户可以查看该数据集。
首先,管理员停止区域。
# zoneadm -z needtoknow halt
因为数据集当前被指定到不同的挂载点,管理员要删除之前的指定,然后设置新的挂载点。
# zfs set zoned=off zone/data # zfs set mountpoint=legacy zone/data
然后,管理员共享该数据集。
# zfs set sharenfs=on zone/data
接下来,在 zonecfg 交互式接口中,管理员明确将数据集添加到 needtoknow 区域。
# zonecfg -z needtoknow # zonecfg:needtoknow> add fs # zonecfg:needtoknow:dataset> set dir=/data # zonecfg:needtoknow:dataset> set special=zone/data # zonecfg:needtoknow:dataset> set type=zfs # zonecfg:needtoknow:dataset> end # zonecfg:needtoknow> exit
接下来,管理员引导 needtoknow 区域。
# zoneadm -z needtoknow boot
现在,可以访问该数据集了。
支配 needtoknow 区域的 restricted 区域中的用户可以通过转到 /data 目录来查看挂载的数据集。从全局区域的角度看,他们使用挂载数据集的完整路径。在此示例中,machine1 是包括有标签区域的系统的主机名。管理员将此主机名指定给非共享 IP 地址。
# cd /net/machine1/zone/needtoknow/root/data
故障排除
如果尝试从较高级别标签访问数据集时返回错误找不到或无此类文件或目录,管理员必须通过运行 svcadm restart autofs 命令来重启自动挂载程序服务。