Solaris Zone支持对solaris 10 OS 进行软件分区,以支持多个独立、安全的OS 环境在同一OS 中运行。
每个环境都有独立的进程空间、资源分配和用户。
Zone在生产环境中被广泛使用,因为它易于设置并且不需要像 ldoms 那样的任何特殊硬件。
安装和引导Zone
现在安装Zone并启动它。
启动后,我们可以登录到 zoen 的控制台进行配置。
global# zoneadm -z zone01 verify global# zoneadm -z zone01 install global# zoneadm -z zone01 list -ivc ID NAME STATUS PATH BRAND IP 0 global running / native shared - zone01 installed /zones/zone01 native shared global# zoneadm -z zone01 boot global# zoneadm list -v ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 zone01 running /zones/zone01 native shared global# zlogin -C zone01 global # zlogin zone01
-C 此处将我们连接到Zone的控制台。
只需执行一次即可使用主机名、时区和其他基本设置配置Zone。
Zone类型
全局Zone每个安装的操作系统都像一个全局Zone,默认情况下存在。
所有非全局Zone只能从全局Zone安装、配置和管理。
非全局Zone它们共享在全局Zone下启动的内核的功能。
所有的软件和其他资源都继承自全局Zone。
**Whole Root zone (Big zone) ** 它拥有自己的所有文件系统的可写副本,如 /opt、/usr。
它需要更多的磁盘空间。
稀疏根Zone(小Zone)像 /opt、/usr 这样的文件系统作为环回文件系统从全局Zone共享(我们在非全局Zone中只有对这些目录的只读访问权限)。
它占用的磁盘空间非常少。
品牌Zone这些Zone是 solaris 10 全局Zone上的 solaris 8 或者 solaris 9 Zone。
资源配置示例
以下是Zone中一些最常用的资源配置示例。
CPU
要查看全局Zone中的 CPU 信息,我们可以使用
global# psrinfo -v global# psrinfo -vp
确认要使用的 CPU 后,我们可以向Zone添加固定数量的 CPU。
zonecfg:zone01> add dedicated-cpu zonecfg:zone01:dedicated-cpu> set ncpus=1-2 zonecfg:zone01:dedicated-cpu> set importance=10 (optional, default is 1) zonecfg:zone01:dedicated-cpu> end
内存
zonecfg:zone01> add capped-memory zonecfg:zone01:capped-memory> set physical=50m [max memory that can be used by this zone] zonecfg:zone01:capped-memory> set swap=100m zonecfg:zone01:capped-memory> set locked=30m [memory locked for use by this zone] zonecfg:zone01:capped-memory> end
文件系统
环回文件系统( Loopback FS)
zonecfg:zone01> add fs zonecfg:zone01:fs> set dir=/usr/local zonecfg:zone01:fs> set special=/opt/zones/zone01/local zonecfg:zone01:fs> set type=lofs zonecfg:zone01:fs> end
这里 /usr/local 将在非全局Zone中可读可写
普通文件系统
zonecfg:zone01> add fs zonecfg:zone01:fs> set dir=/data01 zonecfg:zone0101:fs> set special=/dev/dsk/c1t1d0s0 zonecfg:zone0101:fs> set raw=/dev/rdsk/c1t1d0s0 zonecfg:zone0101:fs> add options [logging, nosuid] (optional) zonecfg:zone0101:fs> end
ZFS 数据集
当我们将数据集委托给非全局Zone时,我们可以在Zone内对该数据集进行任何操作,而无需全局Zone始终对其进行配置。
zonecfg:zone01> add dataset zonecfg:zone01> set name=tank/sales zonecfg:zone01> end
继承包(仅限稀疏根Zone)
现在,在稀疏根Zone的情况下,我们可以从全局Zone继承一些包。
zonecfg:zone01> add inherit-pkg-dir zonecfg:zone01:inherit-pkg-dir> set dir=/opt/sfw zonecfg:zone01:inherit-pkg-dir> end
注意:一旦安装了Zone,就无法修改这些资源
IP
我们可以使用专用接口为非全局Zone提供独占 IP,也可以使用全局Zone中的现有接口与非全局Zone共享。
当我们配置独占 IP 时,我们必须在非全局Zone内配置 IP 地址,而不是在配置期间。
独立IP
zonecfg:zone01> set ip-type=exclusive zonecfg:zone01> add net zonecfg:zone01:net> set physical=hme0
注意:此处无需指定 IP,我们可以从非全局Zone内部控制所有内容
共享IP
在这种情况下,zone 使用了一个共享接口,该接口已经在全局 zone 中检测和使用。
zonecfg:zone01> add net zonecfg:zone01:net> set address=192.168.1.2 zonecfg:zone01:net> set physical=hme0 zonecfg:zone01:net> set defrouter=10.0.0.1 [optional] zonecfg:zone01:net> end
device
我们也可以直接将磁盘等物理设备分配给非全局磁盘。
zonecfg:zone01> add device zonecfg:zone01:device> set match=/dev/rdsk/c0t1d0 zonecfg:zone01:device> end
注释
如果我们想添加一些注释,例如非全局Zone的功能或者其他任何内容。
zonecfg:zone01> add attr zonecfg:zone01:attr> set name=comment zonecfg:zone01:attr> set type=string zonecfg:zone01:attr> set value="Hello World. This is my zone" zonecfg:zone01:attr> end
其他
非全局Zone中 CPU 的调度级别等其他设置也可以在全局Zone中进行配置。
zonecfg:zone01> set limitpriv="default,sys_time" zonecfg:zone01> set scheduling-class=FSS
其他管理命令
重新启动Zone:# zoneadm -z reboot 停止Zone:# zoneadm -z zone halt 卸载Zone:# zoneadm -z zone uninstall -F 删除已卸载的Zone:# zonecfg -z zone delete -F 获取所有配置信息:# zonecfg -z zone info 以安全模式登录Zone:# zlogin -S zone 所有Zone上的执行prstat :# prstat -Z 单个Zone上的执行prstat :# prstat -z zone
使用最少的设置配置Zone
让我们用最少的资源和设置创建一个新Zone,以使其启动和运行。
我们将在本文后面看到如何添加其他资源,如 cpu、内存、文件系统等。
在这种情况下,我们将创建一个稀疏的根Zone。
要创建整个根Zone,我们只需要在配置提示中使用 create -b 而不是 create 。
global# mkdir -p /zones/zone01 global# chmod 700 /zones/zone01 global# zonecfg -z zone01 zone01: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:zone01> create zonecfg:zone01> set zonepath=/zones/zone01 zonecfg:zone01> set autoboot=true zonecfg:zone01> verify zonecfg:zone01> commit zonecfg:zone01> exit