当降级或升级信息时,多级别数据集是很有用的容器。有关更多信息,请参见需要为文件重新设置标签的多级别数据集。对于多级别 NFS 文件服务器为大量 NFS 客户机提供使用许多标签的文件,多级别数据集也很有用。
开始之前
要创建多级别数据集,您必须在全局区域中承担 root 角色。
# zfs create -o mountpoint=/multi -o multilevel=on rpool/multi
rpool/multi 是在全局区域的 /multi 上挂载的多级别数据集。
要限制数据集的上限标签范围,请参见Example 4–7。
# getlabel /multi /multi: ADMIN_LOW
为池中的所有文件系统将以下 ZFS 属性设置为 off:
# zfs set devices=off rpool/multi # zfs set exec=off rpool/multi # zfs set setuid=off rpool/multi
通常,压缩是在 ZFS 中的文件系统级别设置的。但是,由于此池中的所有文件系统都是数据文件,因此会在顶级数据集为池设置压缩。
# zfs set compression=on rpool/multi
另请参见在 Oracle Solaris 11.2 中管理 ZFS 文件系统 中的ZFS 压缩、重复数据删除和加密属性之间的交互。
# cd /multi # mkdir public internal # chmod 777 public internal # setlabel PUBLIC public # setlabel "CNF : INTERNAL" internal
例如,以下 zonecfg 命令系列可在 public 区域中挂载数据集。
# zonecfg -z public zonecfg:public> add fs zonecfg:public:fs> set dir=/multi zonecfg:public:fs> set special=/multi zonecfg:public:fs> set type=lofs zonecfg:public:fs> end zonecfg:public> exit
多级别数据集允许在与挂载区域标签相同的标签处写入文件以及读取较低级别的文件。可以查看和设置挂载文件的标签。
# tncfg -z global add mlp_private=2049/tcp # tncfg -z global add mlp_private=111/udp # tncfg -z global add mlp_private=111/tcp
# svcadm restart nfs/server
# share /multi
已挂载 NFS 的多级别数据集允许在与挂载区域标签相同的标签处写入文件以及读取较低级别的文件。无法可靠地查看或设置已挂载文件的标签。有关更多信息,请参见挂载来自其他系统的多级别数据集。
在以下示例中,管理员将使用低于缺省值 ADMIN_HIGH 的上界标签或最高级别标签创建多级别数据集。创建数据集时,管理员在 mslabel 属性中指定标签上界。此上界可阻止全局区域进程在多级别数据集中创建任何文件或目录。只有有标签区域才能在数据集中创建目录和文件。由于 multilevel 属性为 on,因此 mlslabel 属性会为单标签数据集设置上界而非标签。
# zfs create -o mountpoint=/multiIUO -o multilevel=on \ -o mlslabel="CNF : INTERNAL" rpool/multiIUO
然后,管理员登录到每个有标签区域,在已挂载数据集中以该标签创建目录。
# zlogin public # mkdir /multiIUO # chmod 777 /multiIUO # zlogin internal # mkdir /multiIUO # chmod 777 /multiIUO
重新引导区域后,多级别数据集以挂载区域的标签对已授权用户可见。
接下来的步骤
要使用户能够对文件重新设置标签,请参见如何在有标签区域中允许重新为文件设置标签。
有关重新设置文件标签的说明,请参见Trusted Extensions 用户指南 中的如何升级多级别数据集中的数据和Trusted Extensions 用户指南 中的如何降级多级别数据集中的数据。