第 18 章 规划和配置非全局区域(任务)
本章介绍在系统上配置区域之前需要执行的操作,同时还介绍了如何在系统上配置区域、修改区域配置以及删除区域配置。
有关区域配置过程的介绍,请参见第 17 章,非全局区域配置(概述)。
规划和配置非全局区域(任务图)
在将系统设置为使用区域之前,您必须首先收集信息,并决定如何配置区域。以下任务图概括了如何规划和配置区域。
任务 | 说明 | 参考 |
---|---|---|
规划区域策略。 |
| |
确定区域名称。 | 基于命名约定决定区域的名称。 | |
获取或配置区域的 IP 地址。 | 根据配置的不同,您必须为需要网络访问的每个非全局区域获取至少一个 IP 地址。 | |
确定要在区域内挂载的文件系统。 | 查看您的应用程序要求。 | 有关更多信息,请参见在区域中挂载的文件系统。 |
确定需要在区域中检测的网络接口。 | 查看您的应用程序要求。 | 有关更多信息,请参见网络接口。 |
确定每个区域中应该配置的设备。 | 查看您的应用程序要求。 | 有关应用程序的信息,请参阅相关文档。 |
确定区域路径。 | 每个区域都有一个指向其根目录(相对于全局区域的根目录)的路径。 | 请参见区域配置数据。 |
配置区域。 | 使用 zonecfg 可以创建区域的配置。 | 请参见配置、检验并提交区域。 |
检验并提交已配置的区域。 | 确定指定的资源和属性是否在虚拟系统上有效。 | 请参见配置、检验并提交区域。 |
评估当前的系统设置
可以在任何运行 Solaris 10 发行版的计算机上使用区域。以下主要的计算机注意事项与区域的使用相关联。
-
每个区域内运行的应用程序的性能要求。
-
保存每个区域内特有文件的磁盘空间的可用性。
磁盘空间需求
不限制每个区域可占用的磁盘空间量。全局管理员负责限制空间。全局管理员必须确保本地存储足以保存非全局区域的根文件系统。即使小型单处理器系统也可支持同时运行多个区域。
全局区域中安装的软件包的性质影响所创建的非全局区域的空间需求。软件包的数量和空间需求为相关因素。
稀疏根区域
拥有 inherit-pkg-dir 资源的非全局区域称为稀疏根区域。
稀疏根区域模型通过以下方法优化对象共享:
-
只有安装在全局区域中的部分软件包会直接安装在非全局区域中。
-
标识为 inherit-pkg-dir 资源的只读回送文件系统用于获取对其他文件的访问权。
在该模型中,所有的软件包都安装在非全局区域中。将完整安装不向只读回送挂载文件系统提供内容的软件包。无需安装提供给只读回送挂载文件系统的内容,因为这些内容可以从全局区域中继承(并可见)。
-
一般情况下,当全局区域安装了所有标准的 Solaris 软件包时,每个区域大约需要 100 MB 的可用磁盘空间。
-
缺省情况下,全局区域中安装的所有附加软件包也将填充非全局区域。所需磁盘空间可能会相应增加,具体取决于驻留在 inherit-pkg-dir 资源空间的附加软件包是否提供文件。
建议每个区域再增加 40 MB 的 RAM,如果计算机有足够的交换空间则不作此要求。
完全根区域
完全根区域模型提供最大配置能力。所有需要的和任何选定的可选 Solaris 软件包都安装到此区域的专用文件系统中。该模型的优势之一是全局管理员可以自定义其区域文件系统布局。例如,可以执行此操作来添加任意非绑定的软件包或第三方软件包。
该模型的磁盘需求由当前安装在全局区域中的软件包使用的磁盘空间决定。
注 –
如果您创建包含以下 inherit-pkg-dir 目录的稀疏根目录,则必须在安装区域前从非全局区域的配置中删除这些目录,以拥有一个完全根目录:
-
/lib
-
/platform
-
/sbin
-
/usr
请参见如何配置区域。
限制区域大小
-
您可以将区域放置在挂载了 lofi 的分区上。此操作会将区域占用的空间量限制为 lofi 使用的文件所占用的空间量。有关更多信息,请参见 lofiadm(1M) 和 lofi(7D) 手册页。
-
您可以使用软分区将磁盘分片或将逻辑卷分为多个分区。您可以将这些分区用作区域根目录,从而限制每个区域的磁盘占用量。软分区限制为 8192 个分区。有关更多信息,请参见《Solaris Volume Manager 管理指南》中的第 12 章“软分区(概述)”。
-
您可以将磁盘的标准分区用作区域根目录,从而限制每个区域的磁盘占用量。
确定区域主机名并获取网络地址
您必须确定区域的主机名。然后,如果要使区域具有网络连接,则必须为其指定一个 IPv4 地址,或手动配置并指定一个 IPv6 地址。
区域主机名
如全局区域中的 /etc/nsswitch.conf 文件所述,为区域选择的主机名必须在 hosts 数据库或 /etc/inet/ipnodes 数据库中定义。网络数据库是指提供网络配置信息的文件。nsswitch.conf 文件指定要使用的命名服务。
如果将本地文件用于命名服务,则 hosts 数据库将保留在 /etc/inet/hosts 文件中。区域接口的主机名从 /etc/inet/hosts 中的本地 hosts 数据库解析而来。或者,可以在配置区域时直接指定 IP 地址,从而不需要对任何主机名进行解析。
有关更多信息,请参见《系统管理指南:IP 服务》中的“TCP/IP 配置文件”和《系统管理指南:IP 服务》中的“网络数据库和 nsswitch.conf 文件”。
区域网络地址
每个需要网络连接的区域都有一个或多个专用 IP 地址。同时支持 IPv4 和 IPv6 地址。
IPv4 区域网络地址
如果您使用的是 IPv4,则获取地址并将该地址指定到区域。
也可以指定 IP 地址前缀的长度。该前缀的格式为 address/prefix-length,例如 192.168.1.1/24。因此,要使用的地址为 192.168.1.1,要使用的网络掩码为 255.255.255.0,或者是前 24 位为 1 位的掩码。
IPv6 区域网络地址
如果您使用的是 IPv6,则必须手动配置地址。通常情况下,必须至少配置以下两种地址类型:
-
本地链接地址
-
本地链接地址的格式为 fe80::64-bit interface ID/10。/10 表明前缀长度为 10 位。
由子网上配置的全局前缀构成的地址
-
全局单点传送地址基于管理员为每个子网配置的 64 位前缀和一个 64 位接口 ID。也可通过在同一子网中配置为使用 IPv6 的任何系统上运行带有 -a6 选项的 ifconfig 命令来获取前缀。
64 位接口 ID 通常由系统的 MAC(介质访问控制)地址派生而来。为了便于区域使用,可使用如下方式从全局区域的 IPv4 地址中派生出唯一的备用地址:
16 bits of zero:upper 16 bits of IPv4 address:lower 16 bits of IPv4 address:a zone-unique number
例如,如果全局区域的 IPv4 地址为 192.168.200.10,则对于使用 1 作为区域唯一数字的本地区域,适合的本地链接地址为 fe80::c0a8:c80a:1/10。如果在该子网中使用的全局前缀为 2001:0db8:aabb:ccdd/64,则同一非全局区域的唯一全局单点传送地址为 2001:0db8:aabb:ccdd::c0a8:c80a:1/64。请注意,在配置 IPv6 地址时,您必须指定前缀长度。
有关本地链接和全局单点传送地址的更多信息,请参见 inet6(7P) 手册页。
文件系统配置
在设置虚拟平台时,您可以指定一些要执行的挂载。使用回送虚拟文件系统 (loopback virtual file system, LOFS) 回送挂载到区域的文件系统应使用 nodevices 选项挂载。有关 nodevices 选项的信息,请参见文件系统和非全局区域。
使用 LOFS,您可以创建一个新的虚拟文件系统,以便使用一个备用的路径名称访问文件。在非全局区域中,使用回送挂载可以使文件系统的分层结构看起来在区域根 目录下是重复的。在该区域中,使用以区域的根目录开头的路径名,可以访问所有文件。LOFS 挂载将保留文件系统名称空间。
图 18–1 回送挂载的文件系统
有关更多信息,请参见 lofs(7S) 手册页。
创建、修订和删除非全局区域配置(任务图)
任务 | 说明 | 参考 |
---|---|---|
配置非全局区域。 | 使用 zonecfg 命令可以创建区域、检验并提交该配置。 您也可以使用脚本在系统上配置和引导多个区域。 可以使用 zonecfg 命令来显示非全局区域的配置。 | |
修改区域配置。 | 使用此过程可以修改区域配置中的资源类型,或在区域中添加专用设备。 | |
恢复或删除区域配置。 | 使用 zonecfg 命令可以撤消对区域配置所做的资源设置,或删除区域配置。 | |
删除区域配置。 | 使用带有 delete 子命令的 zonecfg 命令可以从系统中删除区域配置。 |
配置、检验并提交区域
可以使用在 zonecfg(1M) 手册页中介绍的 zonecfg 命令来执行以下操作:
-
创建区域配置
-
检验是否具备所需的全部信息
-
提交非全局区域配置
当使用 zonecfg 实用程序配置区域时,您可以使用 revert 子命令来撤消资源设置。请参见如何恢复区域配置。
在系统上配置多个区域的脚本在配置多个区域的脚本中提供。
有关如何显示非全局区域配置,请参见如何显示非全局区域的配置。
如何配置区域
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
用所选的区域名称来设置区域配置。
此示例过程中使用名称 my-zone。
global# zonecfg -z my-zone
如果是第一次配置该区域,则可以看到以下系统消息:
my-zone: No such zone configured
Use 'create' to begin configuring a new zone. -
创建新的区域配置。
此过程使用 Sun 的缺省设置。
zonecfg:my-zone> create
-
设置区域路径,在此过程中为 /export/home/my-zone。
zonecfg:my-zone> set zonepath=/export/home/my-zone
对于该发行版,不要为 ZFS 设置 zonepath。
-
设置自动引导值。
如果设置为 true,则在引导全局区域时将自动引导该区域。请注意,要自动引导区域,必须同时启用区域服务 svc:/system/zones:default。缺省值为 false。
zonecfg:my-zone> set autoboot=true
-
如果在系统上启用资源池,则将该池与区域进行关联。
此示例使用名为 pool_default 的缺省池。
zonecfg:my-zone> set pool=pool_default
因为资源池允许进行一次可选的调度类分配,所以可以使用池功能来设置一个缺省的调度程序,而不是非全局区域的系统缺省值。有关说明,请参见如何将池与调度类关联和创建配置。
-
添加文件系统。
zonecfg:my-zone> add fs
-
设置文件系统的挂载点,在此过程中为 /usr/local。
zonecfg:my-zone:fs> set dir=/usr/local
-
指定在区域中配置 /usr/local 之后,才能挂载全局区域中的 /opt/local。
zonecfg:my-zone:fs> set special=/opt/local
在非全局区域中,/usr/local 文件系统是可读写的。
-
指定文件系统类型,在此过程中为 lofs。
zonecfg:my-zone:fs> set type=lofs
此类型指明了内核与文件系统的交互方式。
-
结束文件系统指定。
zonecfg:my-zone:fs> end
可多次执行此步骤来添加多个文件系统。
-
在存储池 tank 中添加一个名为 sales 的 ZFS 数据集。
zonecfg:my-zone> add dataset
-
指定指向 ZFS 数据集 sales 的路径。
zonecfg:my-zone> set name=tank/sales
-
结束 dataset 指定。
zonecfg:my-zone> end
-
-
(仅用于稀疏根区域)添加一个从全局区域回送挂载的共享文件系统。
不要执行此步骤来创建一个没有任何共享文件系统的完全根区域。请参见磁盘空间需求中对完全根区域的讨论。
zonecfg:my-zone> add inherit-pkg-dir
-
指定在正在配置的区域中以只读模式挂载全局区域中的 /opt/sfw。
zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/sfw
注 –将更新区域的打包数据库,以反映软件包。使用 zoneadm 安装区域之后,便不能修改或删除这些资源。
-
结束 inherit-pkg-dir 指定。
zonecfg:my-zone:inherit-pkg-dir> end
可多次执行此步骤来添加多个共享文件系统。
注 –如果要创建一个完全根区域,并且已经使用 inherit-pkg-dir 添加了缺省的共享文件系统资源,则必须使用 zonecfg 删除以下缺省的 inherit-pkg-dir 资源,才能安装区域:
-
zonecfg:my-zone> remove inherit-pkg-dir dir=/lib
-
zonecfg:my-zone> remove inherit-pkg-dir dir=/platform
-
zonecfg:my-zone> remove inherit-pkg-dir dir=/sbin
-
zonecfg:my-zone> remove inherit-pkg-dir dir=/usr
-
添加网络虚拟接口。
zonecfg:my-zone> add net
-
设置网络接口的 IP 地址,在此过程中为 192.168.0.1。
zonecfg:my-zone:net> set address=192.168.0.1
-
设置网络接口的物理设备类型,在此过程中为 hme 设备。
zonecfg:my-zone:net> set physical=hme0
-
结束指定。
zonecfg:my-zone:net> end
可多次执行此步骤来添加多个网络接口。
-
添加设备。
zonecfg:my-zone> add device
-
设置设备匹配,在此过程中为 /dev/sound/*。
zonecfg:my-zone:device> set match=/dev/sound/*
-
结束设备指定。
zonecfg:my-zone:device> end
可多次执行此步骤来添加多个设备。
-
添加区域范围的资源控制。
zonecfg:my-zone> add rctl
-
设置资源控制的名称,在此过程中为 zone.cpu-shares。
zonecfg:my-zone:rctl> set name=zone.cpu-shares
-
添加权限值、共享限制、以及达到阈值时要采取的操作。
zonecfg:my-zone:rctl> add value (priv=privileged,limit=20,action=none)
-
结束 rctl 指定。
zonecfg:my-zone:rctl> end
可多次执行此步骤来添加多个资源控制。
-
使用 attr 资源类型来添加注释。
zonecfg:my-zone> add attr
-
检验区域的配置。
zonecfg:my-zone> verify
-
提交区域的配置。
zonecfg:my-zone> commit
-
退出 zonecfg 命令。
zonecfg:my-zone> exit
请注意,即使您没有在提示符下明确键入 commit,也会在键入 exit 或出现 EOF 时自动执行 commit。
在命令行中使用多个子命令
提示 –
zonecfg 命令还支持通过同一个 shell 调用多条子命令,这些子命令放在引号中并用分号进行分隔。
global# zonecfg -z my-zone "create ; set zonepath=/export/home/my-zone" |
下一步执行的操作
请参见安装和引导区域来安装已提交的区域配置。
配置多个区域的脚本
您也可以使用该脚本在系统上配置和引导多个区域。该脚本采用以下参数:
-
要创建的区域个数
-
zonename 前缀
-
可用作基目录的目录
要执行此脚本,您必须是全局区域中的全局管理员。全局管理员在全局区域中拥有超级用户权限或承担主管理员角色。
#!/bin/ksh |
如何显示非全局区域的配置
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
显示区域配置。
global# zonecfg -z zonename info
使用 zonecfg 命令修改区域配置
也可使用 zonecfg 命令执行以下操作:
-
修改区域配置中的资源类型
-
在区域中添加专用设备
如何修改区域配置中的资源类型
可以选择一个资源类型并修改该资源的指定。
请注意,在使用 zoneadm 安装区域之后,不能修改或删除 inherit-pkg-dir 目录中软件包的内容。
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
选择要修改的区域,在此过程中为 my-zone。
global# zonecfg -z my-zone
-
选择要更改的资源类型,例如,资源控制。
zonecfg:my-zone> select rctl name=zone.cpu-shares
-
删除当前值。
zonecfg:my-zone:rctl> remove value (priv=privileged,limit=20,action=none)
-
添加新值。
zonecfg:my-zone:rctl> add value (priv=privileged,limit=10,action=none)
-
结束修改后的 rctl 的指定。
zonecfg:my-zone:rctl> end
-
提交区域的配置。
zonecfg:my-zone> commit
-
退出 zonecfg 命令。
zonecfg:my-zone> exit
请注意,即使您没有在提示符下明确键入 commit,也会在键入 exit 或出现 EOF 时自动执行 commit。
由 zonecfg 提交的更改在下次引导区域时生效。
如何修改区域配置中的属性类型
使用此过程可以重置一个独立属性,该独立属性没有其他相关属性要配置。例如,要删除现有的池关联,您可以将 pool 资源重置为 null。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
选择要修改的区域,在此过程中为 my-zone。
global# zonecfg -z my-zone
-
重置要更改的属性,在此过程中为现有的池关联。
zonecfg:my-zone> set pool=""
-
提交区域的配置。
zonecfg:my-zone> commit
-
退出 zonecfg 命令。
zonecfg:my-zone> exit
请注意,即使您没有在提示符下明确键入 commit,也会在键入 exit 或出现 EOF 时自动执行 commit。
由 zonecfg 提交的更改在下次引导区域时生效。
如何在区域中添加专用设备
以下过程说明如何在非全局区域配置中放置扫描设备。
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
添加设备。
zonecfg:myzone> add device
-
设置设备匹配,在此过程中为 /dev/scsi/scanner/c3t4*。
zonecfg:myzone:device> set match=/dev/scsi/scanner/c3t4*
-
结束设备指定。
zonecfg:myzone:device> end
-
退出 zonecfg 命令。
zonecfg:myzone> exit
使用 zonecfg 命令恢复或删除区域配置
使用 zonecfg(1M) 中介绍的 zonecfg 命令可以恢复或删除区域配置。
如何恢复区域配置
当使用 zonecfg 实用程序配置区域时,请使用 revert 子命令来撤消对区域配置执行的资源设置。
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
在配置一个名为 tmp-zone 的区域时,请键入 info 来查看配置。
zonecfg:tmp-zone> info
配置的 net 资源段显示如下:
.
.
.
fs:
dir: /tmp
special: swap
type: tmpfs
net:
address: 192.168.0.1
physical: eri0
device
match: /dev/pts/*
.
.
. -
删除网络地址:
zonecfg:tmp-zone> remove net address=192.168.0.1
-
检验 net 条目是否已被删除。
zonecfg:tmp-zone> info
.
.
.
fs:
dir: /tmp
special: swap
type: tmpfs
device
match: /dev/pts/*
.
.
. -
键入 revert。
zonecfg:tmp-zone> revert
-
对下面的问题回答是:
Are you sure you want to revert (y/[n])? y
-
检验网络地址是否再次出现:
zonecfg:tmp-zone> info
.
.
.
fs:
dir: /tmp
special: swap
type: tmpfs
net:
address: 192.168.0.1
physical: eri0
device
match: /dev/pts/*
.
.
.
如何删除区域配置
使用带有 delete 子命令的 zonecfg,可以从系统中删除区域配置。
要执行此过程,您必须是全局区域中的全局管理员。
-
成为超级用户或承担主管理员角色。
有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”。
-
使用以下两种方法之一来删除区域 a-zone 的配置:
-
使用 -F 选项强制执行操作:
global# zonecfg -z a-zone delete -F
-
对系统提示回答是,从而以交互方式删除区域:
global# zonecfg -z a-zone delete
Are you sure you want to delete zone a-zone (y/[n])? y
-