Solaris Zones在一个单独的Solaris OS实例里创建了一个或多个虚拟的OS环境。一个zone里面运行的应用程序与其它zone里面运行的应用程序完全隔离。Solaris Zones对应用提供了虚拟的OS环境,去除了针对特定物理设备类型的细节部分。这样做有助于在不同的设备类型上配置运行同一业务。Solaris Zones分为Global zone(全局zone)和区域zone(local zone)。Global zone相当于原来的系统,是唯一能够接触物理设备和访问所有local zone的zone。Global zone总是在运行,即使没有其他配置其他的zone。在Global zone里面配置的zone叫local zone,local zone与物理设备相隔绝,在虚拟的平台上运行包括虚拟的网卡、虚拟的文件系统、虚拟的控制台等。每个local zone都有自己的进程环境和SunOS核心服务,包括所有的网络服务(inetd,syslogd,rpcbind等等)。
Solaris zone还提供了称为brand zone的功能,可以在一个zone里面保持一个其他操作系统的运行环境,比如Linux,或旧版本的Solaris等。这样既可以保持对旧版本Solaris的兼容性,同时又保证对其他类Unix系统的兼容性。
创建Zone
bash-3.00# mkdir -p /export/home/zbuild/
bash-3.00# chmod 700 /export/home/zbuild/
//首先创建zone的路径目录。
bash-3.00# zonecfg -z build
build: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:build> create
//使用create命令创建一个新的zone
zonecfg:build> set zonepath=/export/home/zbuild
//设置zone的路径,对于Solaris 10不要将ZFS设为zone的路径
zonecfg:build> set autoboot=true
//在引导全局区域时将自动引导该区域,要自动引导区域,必须同时启用区域服务svc:/system/zones:default。缺省值为 false。
zonecfg:build> add dataset
zonecfg:build:dataset> set name=test/home/zone
zonecfg:build:dataset> end
//将数据集test/home/zone指定给该zone。
zonecfg:build> add net
zonecfg:build:net> set address=192.168.0.100
zonecfg:build:net> set physical=e1000g0
zonecfg:build:net> end
//设置网络虚拟接口
zonecfg:build> verify
//验证创建的zone
zonecfg:build> commit
//提交zone
zonecfg:build> exit
//退出
查看zone的信息
bash-3.00# zonecfg -z build info
zonename: build
zonepath: /export/home/zbuild
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
fs:
dir: /usr/local
special: /export/home/user/build
raw not specified
type: lofs
options: []
net:
address: 192.168.0.100
physical: e1000g0
dataset:
name: test/home/zone
安装,引导,停止卸载zone
安装build zone:
bash-3.00# zoneadm -z build verify
bash-3.00# zoneadm -z build install
Preparing to install zone <build>.
Creating list of files to copy from the global zone.
Copying <6389> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1063> packages on the zone.
Initialized <1063> packages on zone.
Zone <build> is initialized.
The file </export/home/zbuild/root/var/sadm/system/logs/install_log> contains a log
of the zone installation.
bash-3.00# zoneadm -z build list -v
ID NAME STATUS PATH BRAND IP
- build installed /export/home/zbuild native shared
引导build:
bash-3.00# zoneadm -z build boot
zoneadm: zone 'build': WARNING: e1000g0:1: no matching subnet found in netmasks(4)
for 192.168.0.100; using default of 255.255.255.0.
此消息只是警告,而命令已成功执行。此消息表明系统无法找到要用于在区域配置中指定的 IP 地址的网络掩码。要在后续重新引导时停止显示警告,请确保在全局区域的 /etc/nsswitch.conf 文件中列出正确的 netmasks 数据库,并且至少有一个数据库包含要用于区域 my-zone 的子网和网络掩码。例如,如果 /etc/inet/netmasks 文件和本地 NIS 数据库用于解析全局区域中的网络掩码,则 /etc/nsswitch.conf 的相应条目为:
netmasks: files nis
然后,可以将区域 my-zone 的子网和相应网络掩码信息添加到 /etc/inet/netmasks,以便以后使用。
bash-3.00# zoneadm list -v
ID NAME STATUS PATH BRAND IP
0 global running / native shared
1 build running /export/home/zbuild native shared
可以使用
bash-3.00# zoneadm -z build halt
bash-3.00# zoneadm -z build reboot
停止和重启zone。
下面的过程从系统中卸载build zone:
bash-3.00# zlogin build shutdown
bash-3.00# zoneadm -z build uninstall -F
bash-3.00# zonecfg -z build delete –F
登陆到build zone
bash-3.00#zlogin –C build
系统提示你设置terminal,time zone,root password,network等选项,设置完这些选项后,build zone自动重启,并显示登陆界面:
build console login: root
Password:
Jun 21 17:00:10 build login: ROOT LOGIN /dev/console
Sun Microsystems Inc. SunOS 5.11 snv_63 October 2007
#
这样,一个独立的zone环境环境就设置完成了。
# ~.
[Connection to zone 'build' console closed]
波浪号加句点,或exit命令可以退出登陆。
总结
Solaris zone是Solaris在虚拟化方面比较突出的创新,通过为不同的zone分配相互区隔的运行环境来实现虚拟化,同时不同的zone又共享同一个内核资源,和vmware比起来,这样的效率会提高很多。这篇文章介绍了如何创建和使用zone。关键词:Solaris,zone,虚拟化。