Java Solaris 加入Sun中国技术社区 我的社区 注册说明
 
ISV Online
 
Solaris Zones 中的常见问题 -- 如何在 Local Zone 中使用 CDROM
 
By chris.zhu@Sun.COM, 4/2/07  
        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 中.