聚焦 Solaris Zones 功能作者:Amy Rich 上次更新日期:2004 年 9 月 7 日 Solaris Containers 技术是 Solaris 10 操作系统中一项有趣的新功能(最先出现在 Software Express for Solaris 6/04 中),它提供了一种虚拟化系统资源并在一个 OS 实例中使用多个软件分区的方法。Solaris Containers 功能有两个主要组件:Solaris Zones 分区技术和资源管理工具。Solaris Zones 功能允许管理员创建独立环境以运行应用程序,而资源管理框架用于 CPU 和内存等系统资源的分配、管理和记帐。 Solaris Containers 功能独立于硬件之外,可在支持 Solaris 10 OS 的任何计算机上使用。有关 Solaris Containers 的开发仍在继续,可以期待未来 Solaris 10 OS 内部版本会提供更多灵活性和功能。有关更多完整信息,请参阅 docs.sun.com 上的《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》,也可以参阅 BigAdmin 的 Solaris Zones 部分。 Solaris Zones 软件简介Solaris Zones 功能所依据的基本概念与 FreeBSD Jails 相同。在 FreeBSD Jails 和 Solaris Zones 中,运行时环境的每个虚拟视图都是完全隔离的,一个环境中的进程不能向另一环境中的进程发送信号,甚至无法查看另一环境中的进程。尽管 Jails 和 Zones 都只共享一个操作系统实例,但多个运行时环境可以共存在只有一个 CPU 的计算机中。 区域 (zone) 有两种类型:全局区域 (global zone) 和非全局区域 (non-global zone)。启用了 Solaris Zones 功能的计算机有一个全局区域和多达 8191 个非全局区域。一台计算机支持的区域最大数量取决于该计算机可用的硬件资源。每个区域在使用全局区域进行引导时系统都会为其分配一个 ID,通常列为区域 ID 0。只有全局区域包含可引导的 Solaris 内核,并可识别所有设备、文件系统和其他区域。全局区域也是唯一可配置、安装和管理非全局区域的区域。 非全局区域包含全局区域中安装的 Solaris OS 的一个子集,还可能包含全局区域中没有安装的附加软件包。每个非全局区域都有自己的软件包数据库,其中列出了已安装的与该区域有关的各个软件包,并未与全局区域或其他非全局区域共享软件包信息。非全局区域还包含本地化配置信息,以及其他特定于区域的文件和目录。 配置非全局区域非全局区域由全局区域管理员使用 zonecfg -z zonename zonecfg -z zonename subcommand zonecfg -z zonename -f command_file zonecfg help
add <resource-type>
(global scope)
add <property-name> <property-value>
(resource scope)
cancel
commit
create [-F] [ -b | -t <template> ]
delete [-F]
end
exit [-F]
export [-f output-file]
help [commands] [syntax] [usage] [<command-name>]
info [<resource-type> [property-name=property-value]*]
remove <resource-type> { <property-name>=<property-value> }
(global scope)
remove <property-name>=<property-value>
(resource scope)
revert [-F]
select <resource-type> { <property-name>=<property-value> }
set <property-name>=<property-value>
verify
要设置基本区域,请在交互模式下运行 zonecfg -z myzone zonecfg:myzone> create zonecfg:myzone> export create -b set autoboot=false add inherit-pkg-dir set dir=/lib end add inherit-pkg-dir set dir=/platform end add inherit-pkg-dir set dir=/sbin end add inherit-pkg-dir set dir=/usr end 此时,可对缺省模板进行修改。在本例中,将区域 zonecfg:myzone> set zonepath=/zones/myzone zonecfg:myzone> set autoboot=true zonecfg:myzone> add net zonecfg:myzone:net> set address=192.168.1.7/24 zonecfg:myzone:net> set physical=hme0 zonecfg:myzone:net> end zonecfg:myzone> add inherit-pkg-dir zonecfg:myzone:inherit-pkg-dir> set dir=/opt/sfw zonecfg:myzone:inherit-pkg-dir> end zonecfg:myzone> add fs zonecfg:myzone:fs> set dir=/usr/local zonecfg:myzone:fs> set special=/data zonecfg:myzone:fs> set type=lofs zonecfg:myzone:fs> add options [nodevices] zonecfg:myzone:fs> end zonecfg:myzone> verify zonecfg:myzone> export create -b set zonepath=/zones/myzone set autoboot=true add inherit-pkg-dir set dir=/lib end add inherit-pkg-dir set dir=/platform end add inherit-pkg-dir set dir=/sbin end add inherit-pkg-dir set dir=/usr end add inherit-pkg-dir set dir=/opt/sfw end add fs set dir=/usr/local set special=/data set type=lofs add options nodevices end add net set address=192.168.1.7/24 set physical=hme0 end zonecfg:myzone> commit zonecfg:myzone> export -f /tmp/myzone-zone.cfg zonecfg:myzone> exit 该区域现已配置完毕,所使用的模板保存至
zoneadm -z zonename subcommand [options] zoneadm [-z zonename] list [options] zoneadm help
boot halt help [subcommand] install list [-cipv] ready reboot uninstall [-F] verify 安装和引导非全局区域要安装区域,只需发出以下命令: zoneadm -z myzone install Preparing to install zone <myzone>. Creating list of files to copy from the global zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <779> packages on the zone. Initialized <779> packages on zone. Successfully initialized zone <myzone>. 现在,对该区域进行引导,打开区域的运行时环境,通过 zoneadm -z myzone boot zlogin -C myzone 由于这是该区域安装后的初始引导,还没有内部命名配置,系统会通过控制台提示输入必要的信息。缺省情况下,区域的主机名就是区域名称。选定的名称应根据区域内部命名服务(DNS、LDAP、文件、NIS、NIS+ 及其他),解析为区域的 IPv4 地址之一。该区域可以使用与全局区域完全不同的命名服务,即使配置了相同的命名服务,相互之间也是完全独立运行的。 该区域使用 可以通过执行以下命令从全局区域中查看每个正在运行的区域的状态: zoneadm list -v
ID NAME STATUS PATH
0 global running /
2 myzone running /zones/myzone
此命令会验证该新区域是否已引导并可供使用。如果在非全局区域中运行
新引导的区域与新安装的计算机相似。除了系统缺省值外,没有任何用户帐户或配置设置,因此准备新区域以供生产使用的第一步就是创建帐户、添加其他软件和定制该区域的配置。然后,全局区域管理员就可以通过为
zlogin -l user zonename 也可以在非交互模式下从全局区域运行 zlogin myzone ls -al / total 126 drwxr-xr-x 19 root other 512 Mar 8 12:45 . drwxr-xr-x 19 root other 512 Mar 8 12:45 .. lrwxrwxrwx 1 root root 9 Mar 8 12:03 bin -> ./usr/bin drwxr-xr-x 2 root other 512 Mar 8 12:02 data drwxr-xr-x 10 root other 1024 Mar 8 12:45 dev drwxr-xr-x 51 root sys 3584 Mar 8 13:36 etc drwxr-xr-x 2 root sys 512 Feb 12 11:42 export dr-xr-xr-x 1 root root 1 Mar 8 12:45 home drwxr-xr-x 5 root sys 512 Mar 8 12:03 kernel drwxr-xr-x 4 root bin 4608 Feb 12 12:17 lib drwxr-xr-x 2 root sys 512 Mar 8 12:04 mnt dr-xr-xr-x 1 root root 1 Mar 8 12:45 net drwxr-xr-x 5 root sys 512 Mar 8 12:03 opt drwxr-xr-x 43 root sys 1536 Feb 12 11:52 platform dr-xr-xr-x 64 root root 30400 Mar 8 16:27 proc drwxr-xr-x 2 root sys 1024 Feb 12 11:48 sbin drwxrwxrwt 4 root sys 314 Mar 8 16:19 tmp drwxr-xr-x 38 root other 1024 Jul 18 2003 usr drwxr-xr-x 33 root sys 512 Mar 8 12:45 var
要删除 zlogin myzone shutdown -y -i0 -g0 zoneadm -z myzone uninstall -F zonecfg -z myzone delete -F 从全局区域获取和设置非全局区域信息除了使用zonecfg、zoneadm、zonename 和 zlogin 之外,多种标准系统命令已经过修改,以便从全局区域查看或修改区域信息。进程控制
/bin/ps -efo user,zone,pid,ppid,c,stime,tty,time,comm |grep myzone
root myzone 18386 1 0 12:45:24 ? 00:00 /usr/sbin/syslogd
root myzone 18527 1 0 12:47:04 ? 00:00 /usr/lib/ssh/sshd
root myzone 18630 18527 0 13:38:26 ? 00:03 /usr/lib/ssh/sshd
root myzone 18300 1 0 12:45:22 ? 00:00 init
root myzone 18512 1 0 12:45:33 ? 00:01 /usr/sfw/sbin/snmpd
root myzone 18399 1 0 12:45:24 ? 00:00 /usr/sbin/cron
root myzone 18638 18634 0 13:38:31 pts/2 00:00 -sh
root myzone 18523 18300 0 12:47:03 ? 00:00 /usr/lib/saf/sac
root myzone 18401 1 0 12:45:25 ? 00:00 /usr/lib/autofs/automountd
daemon myzone 18324 1 0 12:45:23 ? 00:00 /usr/lib/crypto/kcfd
root myzone 18656 18638 0 13:44:26 pts/2 00:00 tcsh
daemon myzone 18349 1 0 12:45:23 ? 00:00 /usr/sbin/rpcbind
root myzone 18400 1 0 12:45:24 ? 00:00 /usr/sbin/nscd
root myzone 18402 1 0 12:45:25 ? 00:00 /usr/sbin/inetd
smmsp myzone 18435 1 0 12:45:29 ? 00:00 /usr/lib/sendmail
root myzone 18434 1 0 12:45:29 ? 00:00 /usr/lib/sendmail
root myzone 18442 1 0 12:45:29 ? 00:00 /usr/lib/utmpd
root myzone 18297 1 0 12:45:09 ? 00:00 zsched
root myzone 18618 18300 0 13:37:58 zoneconsole \
00:00 /usr/lib/saf/ttymon
root myzone 18496 1 0 12:45:31 ? 00:00 /usr/dt/bin/dtlogin
root myzone 18526 18523 0 12:47:03 ? 00:00 /usr/lib/saf/ttymon
许多命令已得到增强,可以按区域对其输出的信息进行过滤,或在其输入中包括某个进程所属的区域。 在 Solaris OS 中,可以使用 文件系统 如果从全局区域运行带 df -Z / (/dev/dsk/c0t1d0s0 ): 1881482 blocks 247016 files /devices (/devices ): 0 blocks 0 files /usr (/dev/dsk/c0t1d0s3 ): 859490 blocks 271499 files /proc (proc ): 0 blocks 1837 files /etc/mnttab (mnttab ): 0 blocks 0 files /dev/fd (fd ): 0 blocks 0 files /var (/dev/dsk/c0t1d0s4 ): 1889810 blocks 239530 files /var/run (swap ): 2111168 blocks 15280 files /tmp (swap ): 2111168 blocks 15280 files /zones (/dev/dsk/c0t1d0s5 ): 60468666 blocks 3681959 files /zones/myzone/root/dev(/zones/myzone/dev ): 60468666 blocks 3681959 files /zones/myzone/root/lib(/lib ): 1881482 blocks 247016 files /zones/myzone/root/opt/sfw(/opt/sfw ): 60468666 blocks 3681959 files /zones/myzone/root/platform(/platform ): 1881482 blocks 247016 files /zones/myzone/root/sbin(/sbin ): 1881482 blocks 247016 files /zones/myzone/root/usr(/usr ): 859490 blocks 271499 files /zones/myzone/root/usr/local(/data ): 1881482 blocks 247016 files /zones/myzone/root/proc(proc ): 0 blocks 1837 files /zones/myzone/root/etc/mnttab(mnttab ): 0 blocks 0 files /zones/myzone/root/dev/fd(fd ): 0 blocks 0 files /zones/myzone/root/var/run(swap ): 2111168 blocks 15280 files /zones/myzone/root/tmp(swap ): 2111168 blocks 15280 files 联网
ifconfig <interface> zone {<name> | <number>}
ifconfig hme0:3 plumb 192.168.1.8 netmask 255.255.255.0 zone myzone up
要在全局区域中只输出全局区域的 IP 接口列表,请使用 ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
inet 192.168.1.7 netmask ff000000
lo0:1: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
zone myzone
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:20:9e:b5:40
hme0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
zone myzone
inet 192.168.1.7 netmask ffffff00 broadcast 192.168.1.255
ifconfig -aZ
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
inet 192.168.1.7 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:20:9e:b5:40
记帐 使用扩展记帐 ( 资源
除非另行说明,否则此处所有技术手册(包括文章、常见问题解答和样例)中的代码都按此许可提供。 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||