|
Solaris Zones 中的常见问题 -- 如何在 Local Zone 中使用 CDROM
Solaris Zones 软件分区技术提供了一种虚拟操作系统服务,以创建多个隔离运行环境的方法。在使用者看来,每
一个Local Zone 就好比一台独立的机器,那么如何在LocalZone 中实现机器的一些常用功能成为一个突出的问题?针对那些最常见的问题,跟大家一起分享一下我找到的解决方案。
问题:怎样在Local Zone 中使用CDROM。
既然每一个Local Zone 都可以看作一台独立的机器,那如何在Local Zone
中使用外设就成为我们必须考虑的问题,这里我们就最常用的CDROM做一个讨论。CDROM是最常见的外设之一,大部分的软件安装都以CDROM 作为介质,因此如何在Local Zone
中使用CDROM是很多人关心的问题。就此我查询了一些资料,也做了很多的尝试,共找到了三种在Local Zone 中使用CDROM的方案,可供大家参考。
方法一:在Local Zone 中以Loopback 的方式挂接CDROM
1) 在zone 配置的时候,使用选项(ro, nodevices)把 /cdrom 以lofs 的方式挂载到LocalZone 中。
# zonecfg -z zone1
zonecfg:zone1> add fs
zonecfg:zone1:fs> set dir=/mnt
zonecfg:zone1:fs> set special=/cdrom
zonecfg:zone1:fs> set type=lofs
zonecfg:zone1:fs> add options [ro,nodevices]
zonecfg:zone1:fs> end
zonecfg:zone1> commit
zonecfg:zone1> exit
2) 重启Local Zone
# zoneadm -z zone1 reboot
3) 在Local Zone 中使用CDROM
# zlogin zone1
#ls /mnt
cdrom0 sol_10_606_sparc
可以看到CDROM挂接在了/mnt 下面, 和Global Zone 看到的一致。
删除的过程和挂接的过程类似,
1) 删除zone1 配置中关于CDROM 的部分,
# zonecfg -z zone1
zonecfg:zone1> remove fs dir=/mnt
zonecfg:zone1> commit
zonecfg:zone1> exit
2) 重启Local Zone,再登陆zone1,CDROM 就已经不在了.
# zoneadm -z zone1 reboot
# zlogin zone1
#ls /mnt
方法二:在Local Zone 中直接添加设备CDROM
1) 找到与CDROM相匹配的设备,寻找rmformat 中和CDROM/DVD 相对应的logical
node.
# rmformat
1. Logical Node: /dev/rdsk/c0t0d0s2
Physical Node:/pci@0,0/pci-ide@6/ide@0/sd@0,0
Connected Device:MATSHITA DVD-RAM SW-9585 BZS3
Device Type: DVD Reader/Writer
2) 在zone 配置的时候, 直接把相应的设备导入到Local Zone 中
# zonecfg -z zone2
zonecfg:zone2> add device
zonecfg:zone2:device> set match=/dev/*dsk/c0t0d0s*
zonecfg:zone2:device> end
zonecfg:zone2> verify
zonecfg:zone2> commit
zonecfg:zone2> exit
3) 重启Local Zone
# zoneadm -z zone2 reboot
4) 在Local Zone 中,把 CDROM挂接到希望的位置,如 /mnt/cdrom.
# zlogin zone2
# mkdir /mnt/cdrom
# mount -F hsfs /dev/dsk/c0t0d0s2 /mnt/cdrom
注:因为它和Global zone 共享CDROM,因此这种共享设备的方式需要把Globalzone 中的CDROM停掉,这一步可以在开始的时候就做。0
0 0 0 0 0 0
# /etc/init.d/volmgt stop
删除的顺序和添加的顺序正好相反:
1)在Local zone 中解除挂接
# umount /mnt/cdrom
2)在Global zone 中删除zone2 配置中关于CDROM 设备的部分
# zonecfg -z zone2
zonecfg:zone2> remove device
match=/dev/*dsk/c0t0d0s*
zonecfg:zone2> commit
zonecfg:zone2> exit
3) 重启Local Zone,再登陆zone2,CDROM 已经不在了,同时在Global zone 中重新启动volmgt
# /etc/init.d/volmgt start
方法三:NFS share
还有一种比较传统的办法,采用NFS share,既然Local Zone 可以看作一台独立的机器,那
机器间通过nfs 当然就可以实现共享了。
1) 打开nfs server 服务
# svcadm enable
svc:/network/nfs/server:default
2) 把Global Zone 中的CDROM 共享出来
# share -F nfs -o ro
/cdrom/cdrom0
3) 在Local Zone 中把CDROM给挂接上就可以了。
# zlogin zone3
# mkdir /mnt/cdrom
# mount -F nfs
globalzone:/cdrom/cdrom0 /mnt/cdrom
这里的globalzone 是在/etc/hosts 文件中定义的Global Zone 的名字,当
然该方法要求Global Zone 和Local Zone 具有同一网段的地址(这里给Local Zone 配置网络的过程就不再详述了)。
小结
三种方法中最常用的是第一种,一次性配置完成后就不需要费心了,而且和GlobalZone
也没有任何的冲突。相反, 第二种方法用的人很少,虽然你可以在sun 关于zone 的文档中找到该方法,《系统管理员指南_容器资源管理和分区技术》,但因为卷管理的daemon
程序(vold)无法在Local Zone 中运行, 输出到Local Zone 中的CDROM 并不能被自动识别,仍需要手工mount,因此并不推荐。第三种方法感觉上挺方便的,如果是偶尔的
用一下CDROM,可以使用。
不过这三种方法都有一个共同的缺点,那就是你无法在Local Zone
中通过指令自动的弹出CDROM. 如果我们安装软件需要用到多张光盘,那安装脚本里的eject 指令在LocalZone 中就无法正常执行了。这里提供一个我使用的小办法,能缓解一下这个小矛盾,很
希望有一天可以直接在Local Zone 中实现eject 的功能。
自己写了个eject 的脚本来取代/usr/bin/eject。脚本的内容很简单,就是通过rsh
调用Global Zone 中的eject。
rsh globalzone /usr/bin/eject
在Local Zone 中安装软件的时候还常遇到的一个问题就是如何显示图形界面,这里一并说了。
1) 在Global Zone 中把Local Zone 的host name 添加到可连接X
server 的列表中,这里先确认Local Zone 的host name 已经在Global Zone 的/etc/hosts 文件中了。
# xhost + zone1
2) 为Local Zone 设置环境变量DISPLAY
#
DISPLAY=globalzone:0.0;export DISPLAY
设置完毕,这样就可以在Local Zone 中行无障碍的启动图形画面了,所
有的窗口都被推到了Global Zone 中.
|
|
|
|
|
|
|