You are on page 1of 4

Solaris Zones 中的常见问题

---- 如何在 Local Zone 中使用 CDROM

Solaris Zones 软件分区技术提供了一种虚拟操作系统服务,以创建多个隔离运行环境


的方法。在使用者看来,每一个 Local Zone 就好比一台独立的机器,那么如何在 Local
Zone 中实现机器的一些常用功能成为一个突出的问题?针对那些最常见的问题,跟大家一
起分享一下我找到的解决方案。
问题:怎样在 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 的方式挂载到 Local
Zone 中。
# 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,因此这种共享设备的方式需要把 Global
zone 中的 CDROM 停掉,这一步可以在开始的时候就做。
# /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 配置网络的过程就不
再详述了)。

小结
三种方法中最常用的是第一种,一次性配置完成后就不需要费心了,而且和 Global
Zone 也没有任何的冲突。相反,第二种方法用的人很少,虽然你可以在 sun 关于 zone 的文
档中找到该方法,《系统管理员指南_容器资源管理和分区技术》,但因为卷管理的
daemon 程序(vold)无法在 Local Zone 中运行,输出到 Local Zone 中的 CDROM 并不能被
自动识别,仍需要手工 mount,因此并不推荐。第三种方法感觉上挺方便的,如果是偶尔的
用一下 CDROM,可以使用。
不过这三种方法都有一个共同的缺点,那就是你无法在 Local Zone 中通过指令自动的
弹出 CDROM。如果我们安装软件需要用到多张光盘,那安装脚本里的 eject 指令在 Local
Zone 中就无法正常执行了。这里提供一个我使用的小办法,能缓解一下这个小矛盾,很希
望有一天可以直接在 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 中。

You might also like