Solaris 10 虛擬機探究:
一、前言
1.1 Solaris 10 Zone簡介
Solaris 操作系統中的 Solaris Zones[1][2] 功能是一種用於虛擬化操作系統服務的分區技術,可提供安全的隔離環境以便承載和運行各種應用程序。
區域是指在 Solaris 操作系統的單個實例中創建的一個虛擬的操作系統環境。
區域有兩種類型:全局區域 (global zone) 和非全局區域 (non-global zone)。
全局區域包含一次 Solaris OS 的完全正常運行的安裝,該安裝可由系統硬件來引導。通過系統硬件引導的 Solaris OS 安裝過程安裝的即是全局區域。
一個系統中只能運行一個全局區域。全局區域管理員可使用 zonecfg(1M) 和 zoneadm(1M) 來創建非全局區域。全局區域控制所有非全局區域的安裝、維護、操作和損毀。
Solaris 10 Zone配合Solaris 10 Containers 可以進在分配操作系統、硬件資源。
1.2 區域根文件系統
兩種方式可以配置非全局區域的根文件系統:完全根模型和稀疏根模型。
完全根模型將所有必需的軟件包和任何選定的可選 Solaris 軟件包安裝到區域的專用文件系統中,因此可提供最大化的配置能力。
此模型的優點是:允許區域管理員定製其區域的文件系統佈局(例如,創建 /usr/local),並可以添加任意非隨附或第三方軟件包。
此模型的缺點是:無法共享虛擬內存系統共享的可執行文件和共享庫中的文本段,並且磁盤使用量也會顯著增加-如此進行配置的每個非全局區域約增加 2 GB。
全局區域管理員使用 zonecfg(1M) 的子命令 create -b 創建具有完全根模式的區域(或刪除 my-zone.xml 中的 inherited-pkg-dir 目錄)。
稀疏根模型只安裝根軟件包的子集(即將 pkginfo(4) 參數 SUNW_PKGTYPE 設置爲 root 的根軟件包)並使用只讀回送文件系統來訪問其他文件,從而可優化對象的共享。
這與配置無盤客戶機的方式類似,其中 /usr 和其他文件系統通過網絡與 NFS 掛載。
使用此模型時,缺省情況下會將目錄 /lib、/platform、/sbin 和 /usr 掛載爲回送文件系統。
此模型的優點在於可提供更高的性能,原因是可以有效地共享可執行文件和共享庫,並且區域本身的磁盤使用量會小很多。
稀疏根模型只需要將大約 100 MB 的文件系統空間用於區域本身。
爲了便於管理,我建議使用完全根模型安裝zone分區。
配置:完全根模型和稀疏根模型
#修改權限
bash-3.00# chmod 700 -r /export/home/vmtest02
#使用zonecfg命令配置Zone>>1
bash-2.05b# zonecfg -z vmtest02
zone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone> create
zonecfg:zone> set zonepath = /export/zone
zonecfg:zone> set autoboot = true
zonecfg:zone> add inherit-pkg-dir
zonecfg:zone:inherit-pkg-dir> set dir=/opt/sfw
zonecfg:zone:inherit-pkg-dir> end
zonecfg:zone> add net
zonecfg:zone:net> set physical = elxl0
zonecfg:zone:net> set address = 173.21.73.121
zonecfg:zone:net> end
#使用zonecfg命令配置Zone>>2
A、root@pater # zonecfg -z zone1
zone1: No such zone configured (提示一個不存在的zone)
Use 'create' to begin configuring a new zone.
B、zonecfg:zone1> create -b (使用Create命令創建zone1分區,使用-b參數使用完全根模型,不帶-b就是稀疏根模型)######
C、zonecfg:zone1> set zonepath=/zone1 (設置分區的操作系統文件存放在/zone1位置)
D、增加網卡
zonecfg:zone1> add net (增加網卡命令)
zonecfg:zone1:net> set address=192.168.10.23 (設置zone1分區的ip地址)
zonecfg:zone1:net> set physical=pcn0 (設置zone1的網卡橋接的哪塊網卡)
zonecfg:zone1:net> end (結束網卡配置)
E、zonecfg:zone1> verify (檢驗配置)
F、zonecfg:zone1> commit (提交配置)
我的測試環境:
## 查看配置文件
bash-3.2# zonecfg -z vmtest02
zonecfg:vmtest02> info
zonename: vmtest02
zonepath: /export/home/vmtest02
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class: FSS
ip-type: shared
hostid:
net:
address: 192.168.233.200
physical: e1000g0
defrouter: 192.168.233.2
capped-memory:
physical: 512M
[swap: 1G]
[locked: 512M]
rctl:
name: zone.max-swap
value: (priv=privileged,limit=1073741824,action=deny)
rctl:
name: zone.max-locked-memory
value: (priv=privileged,limit=536870912,action=deny)
zonecfg:vmtest02> exit
bash-3.2# zonecfg -z vmtest01
zonecfg:vmtest01> info
zonename: vmtest01
zonepath: /export/home/vmtest01
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
inherit-pkg-dir:
dir: /export/home/oracle
net:
address: 173.21.73.121
physical: elxl0
defrouter 未指定
zonecfg:vmtest01> exit
bash-3.2#
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#安裝虛擬機
zoneadm -z vmtest02 install
#啓動虛擬機
zoneadm -z vmtset02 boot
#登陸虛擬機
bash-3.2# zlogin vmtest02
[已連接到區域 'vmtest02' pts/2]
Last login: Mon Mar 9 18:45:40 on pts/6
Oracle Corporation SunOS 5.10 Generic Patch January 2005
#
關閉zone
-bash-3.2$ ls -l
total 2
drwxr-xr-x 4 oracle oinstall 512 Oct 13 17:08 app
-bash-3.2$ exit
logout
# exit
[與區域 'vmtest02' pts/2 的連接已關閉]
bash-3.2# zoneadm -z vmtest02 halt
bash-3.2#
#查看虛擬機基本信息
bash-3.2# zoneadm list -civ
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- vmtest02 installed /export/home/vmtest02 native shared
- vmtest01 installed /export/home/vmtest01 native shared
bash-3.2#
@@@@@@@@@@@@@@@@@2 進程與文件的關係
--外部機器
bash-3.2# hostname
unknown
bash-3.2#
--虛擬出來機器
-bash-3.2$ hostname
vmtest02OQ
-bash-3.2$
--虛擬出來機器
-bash-3.2$ ps -ef|grep lsnr
oracle 4501 2708 0 20:02:08 ? 0:00 /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -in
-bash-3.2$
--父進程關係
-bash-3.2$ ps -ef|grep 2708
root 2708 2708 0 17:57:16 ? 0:00 zsched
daemon 2948 2708 0 17:57:20 ? 0:00 /usr/sbin/rpcbind
root 3375 2708 0 17:58:22 ? 0:00 /usr/lib/sendmail -bl -q15m
root 3186 2708 0 17:57:23 ? 0:00 /usr/dt/bin/dtlogin -daemon
root 2720 2708 0 17:57:16 ? 0:01 /lib/svc/bin/svc.startd
root 2943 2708 0 17:57:20 ? 0:00 /usr/sbin/cron
root 2718 2708 0 17:57:16 ? 0:00 /sbin/init
...
oracle 4501 2708 0 20:02:08 ? 0:00 /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -in
root 3145 2708 0 17:57:22 ? 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
root 3136 2708 0 17:57:22 ? 0:00 /usr/sfw/sbin/snmpd
root 3484 2708 0 18:45:12 pts/6 0:01 -sh
root 3294 2708 0 17:57:24 ? 0:00 /usr/lib/dmi/dmispd
noaccess 3355 2708 0 17:57:25 ? 0:26 /usr/java/bin/java -server -Xmx128m -XX:+UseParallelGC -XX:ParallelGCThreads=4
oracle 4525 4473 0 20:06:45 pts/6 0:00 grep 2708
--虛擬機器
-bash-3.2$ ps -ef|grep lsnr
oracle 4501 2708 0 20:02:08 ? 0:00 /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -in
oracle 4528 4473 0 20:07:38 pts/6 0:00 grep lsnr
-bash-3.2$ ls -l /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr
-rwxr-x--x 1 oracle oinstall 1057088 Oct 13 17:24 /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr
-bash-3.2$
--外部機器
bash-3.2# ps -ef|grep lsnr
lihj 4501 1 0 20:02:08 ? 0:00 /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -in
bash-3.2#
bash-3.2# ls -l /export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr
/export/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: 無此文件或目錄
bash-3.2#
#################### 虛擬機的進程在外部機器上可以看到的,不過父進程是不一樣的,且外部機器上是沒有文件的!
資源的添加實驗稍後:::