分类: BSD
2012-05-16 11:10:57
转自水木:
Solaris Zones利用灵活的,软件定义的方式提供了互相隔离的OS环境。
Solaris Zones在一个单独的Solaris OS实例里创建了一个或多个虚拟的OS环境。
Solaris Zones具有以下特性:安全,隔离,虚拟,细粒度,透明。
Solaris Zones分为Global zone(全局zone)和区域zone(local zone).
Global zone相当于原来的系统,是唯一能够接触物理设备和访问所有loca zone的zone。
Global zone总是在运行,即使没有其他配置其他的zone。
在Global zone里面配置的zone叫local zone,local zone与物理设备相隔绝,
在虚拟的平台上运行包括虚拟的网卡、虚拟的文件系统、虚拟的控制台等。
每个local zone都有自己的进程环境和SunOS核心服务,包括所有的网络服务
(inetd,syslogd,rpcbind等等)。
在local zone内,root不能创建设备(mknod),不能访问核心内存,不能加载内核模块.
对local zone的攻击所造成的破坏及其有限。
Solaris Zones提供在一个单OS实例下创建一个或多个虚拟环境的办法.一个zone里面
运行的应用程序与其它zone里面运行的应用程序完全隔离.
Solaris Zones对应用提供了虚拟的OS环境,去除了针对特定物理设备类型的细节部分。
这样做有助于在不同的设备类型上配置运行同一业务。
Solaris Zones支持基于CPU粒度的zone划分
Solaris Zones没有提供新的API供zone环境下的应用使用,应用就像正常使用一台机器
一样正常使用原来的API.
Solaris zones是通过软件技术实现的,其中local zone的实现是通过zoneadmd这个
daemon来实现的,以下是观察zoneadmd这个damon的情况:
root@T2000 # ps -eaf |grep zone
root 629 1 0 08:55:59 ? 0:00 zoneadmd -z test
root 784 683 0 08:56:17 zoneconsole 0:00 /usr/lib/saf/ttymon -g -d
/dev/console -l console -T vt100 -m ldterm,ttcompat -
上面表明运行了一个local zone,名字叫test,进程784表示test zone的控制台
root@T2000 # svcs |grep zone
online Jun_02 svc:/system/zones:default
root@T2000 # svcs -x zones
svc:/system/zones:default (Solaris zones)
State: online since Mon Jun 19 08:55:58 2006
See: zones(5)
See: zoneadm(1M)
See: /var/svc/log/system-zones:default.log
Impact: None.
root@T2000 # svcs -l zones
fmri svc:/system/zones:default
name Solaris zones
enabled true
state online
next_state none
state_time Fri Jun 02 15:15:45 2006
logfile /var/svc/log/system-zones:default.log
restarter svc:/system/svc/restarter:default
dependency require_all/none svc:/milestone/multi-user-server (online)
以上是用svcs观察zone的服务daemon
下面讲述创建一个local zone的过程,该local zone机器名叫mmsg180
root@T2000 # mkdir /export/zone/mmsg180
root@T2000 # chmod -R 700 /export/zone/mmsg180
root@T2000 # ls -adl /export/zone/mmsg180/
drwx------ 2 root root 512 Jun 28 14:49 /export/zone/mmsc180/
root@T2000 # zonecfg -z mmsg180
mmsg180: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:mmsg180> create
/* 创建local zone mmsg180 */
zonecfg:mmsg180> set zonepath=/export/zone/mmsg180
/* 设置zone mmsg180在全局zone下的目录 */
zonecfg:mmsg180> set autoboot=true
/* 设置zone mmsg180在全局zone启动时自动启动
zonecfg:mmsg180> add net
/* 配置zone mmsg180的网络 */
zonecfg:mmsg180:net> set address=10.40.95.150
/* 设置zone mmsg180的IP地址 */
zonecfg:mmsg180:net> set physical=ipge0
/* 将zone mmsg180的IP配置到全局zone的ipge0接口 */
zonecfg:mmsg180:net> end
/* 结束zone mmsg180的网络配置 */
zonecfg:mmsg180> verify
zonecfg:mmsg180> commit
zonecfg:mmsg180> exit
创建玩zone mmsg180,就开始安装
root@T2000 # zoneadm -z mmsg180 install
Preparing to install zone
Creating list of files to copy from the global zone.
Copying <3301> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1070> packages on the zone.
Initialized <1070> packages on zone.
Zone
Installation of <1> packages was skipped.
Installation of these packages generated warnings:
The file contains a
log of the zone installation.
安装完zone mmsg180就可以启动了,可以通过重启zones来启动zone mmsg180
root@T2000 # svcadm restart zones
也可以通过zonadm -z mmsg180 boot
这时候还需要zlogin -C mmsg180登录到zone mmsg180的console进行一些相关配置,
比如语言,终端以及机器名,Kerberos,Name service,区域,root密码以及NFS version之类的
设置,设置完后可以看到"Zone rebooting"的字样,很快就重启完zone mmsg180,这样就可以
使用zone mmsg180了.
过一会就可以看到zone mmsg180已经启动了
root@T2000 # ps -eaf |grep zone
root 14810 1 0 10:35:03 ? 0:00 zoneadmd -z mmsg180
root 14808 1 0 10:35:03 ? 0:00 zoneadmd -z test
root 15044 14839 0 10:35:20 zoneconsole 0:00 /usr/lib/saf/ttymon -g -d
/dev/console -l console -T vt100 -m ldterm,ttcompat -
在全局zone下可以用zoneadm list查看所有的zone情况:
root@T2000 # zoneadm list
global
test
mmsg180
下面从Global zone登录到zone mmsg180的console:
root@T2000 # zlogin -C mmsg180
[Connected to zone 'mmsg180' console]
Solaris 10 Zone mmsg180!
mmsg180 console login:
在local zone下输入转义字符~.退出local zone,回到global zone.
mmsg180 console login: ~.
[Connection to zone 'mmsg180' console closed]
在全局zone下查看zone mmsg180的配置
root@T2000 # zonecfg -z mmsg180
zonecfg:mmsg180> info
zonepath: /export/zone/mmsg180
autoboot: true
pool:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 10.40.95.150
physical: ipge0
zonecfg:mmsg180> exit
/usr/bin/zonename print name of current zone
删除zone可以用如下办法
root@T2000 # zoneadm -z mmsc140 uninstall
Are you sure you want to uninstall zone mmsc140 (y/[n])? y
root@T2000 #
或者
root@T2000 # zoneadm -z test uninstall -F
其实相当于删除/export/zone目录下的test目录