如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 内核区域

作者:Duncan Hardie

本文介绍创建、配置和管理 Oracle Solaris 内核区域的三种方法。Oracle Solaris 内核区域是 Oracle Solaris 11.2 的一个新特性,它不仅具备 Oracle Solaris 区域的所有灵活性、可扩展性和效率,而且还拥有具有独立内核的区域。


2014 年 7 月发布


想对本文发表评论吗?请将链接发布在 Facebook 的 OTN Garage 页面上。有类似文章要分享?请将其发布在 Facebook 或 Twitter 上,我们来进行讨论。
目录
简介
关于 Oracle Solaris 区域和内核区域
每种安装方法的优点
前提条件
使用直接安装方法创建首个内核区域
将内核区域更新到更高 Oracle Solaris 版本
从 ISO 映像安装内核区域
将原生区域转换为内核区域
总结
另请参见
关于作者

简介

Oracle Solaris 11 是为大型企业环境设计的全面、集成、开放的平台。其内置的 Oracle Solaris 原生区域技术通过在单一公共内核上运行的隔离、封装、高度安全的环境提供应用虚拟化。因此,原生区域提供了位于平台核心的高效、可扩展、零开销的虚拟化解决方案。

包含内核区域特性之后,Oracle Solaris 11.2 提供了一种灵活、经济高效的云就绪解决方案,非常适合数据中心。

本文介绍如何在 Oracle Solaris 11.2 中创建一个内核区域,以及如何根据要求配置、安装和启动内核区域。

您将了解两种主要的内核区域安装方法:直接安装和通过 ISO 映像安装。此外,您还将了解第三种安装方法,使您能够将原生区域转换为内核区域。您将了解如何更新内核区域,使其使用与主机内核中运行的版本不同的 Oracle Solaris 版本。

本文中的示例会让您熟悉 Oracle Solaris 11.2 中安装、配置和管理内核区域的基本过程。

:本文演示如何通过提到“Oracle Solaris 11.3”和“Oracle Solaris 下一版本”的示例将内核区域从 Oracle Solaris 11.2 更新到更高版本。这些示例纯属假设,仅用于演示目的;目前没有比 Oracle Solaris 11.2 更高的版本。

关于 Oracle Solaris 区域和内核区域

Oracle Solaris 区域让您可以将一个应用与同一操作系统 (OS) 上的其他应用隔离开,允许您创建一个适合该特定应用的用户受控、安全受控、资源受控的环境。每个 Oracle Solaris 区域可以包含一个完整的环境,还允许您控制 CPU、内存、网络和存储等不同资源。

拥有主机系统的系统管理员可以选择严格管理系统上的所有 Oracle Solaris 区域。系统管理员还可以为其他系统管理员分配特定 Oracle Solaris 区域的权限。这种灵活性允许您对整个计算环境进行量身定制以满足特定应用的需要。

内核区域是最新类型的 Oracle Solaris 区域,不仅具备 Oracle Solaris 区域的所有灵活性、可扩展性和效率,而且还拥有具有独立内核的区域。当您尝试协调属于不同所有者的多个区域环境的更新时,此功能非常有用。

使用内核区域,可在单个内核区域级别、每个所有者方便的时间执行更新。此外,有特定版本要求的应用可以在一个系统上并行运行,并从 Oracle Solaris 区域提供的高整合比中受益。

每种安装方法的优点

在本文中,我们将使用不同方法创建三个内核区域:

  • 第一种方法将显示如何使用直接安装(即基于主机系统上运行的操作系统的安装)轻松、快速地创建新的内核区域。当需要根据新的应用或用户需求快速使额外的内核区域环境上线运行时,这种方法非常有用。
  • 使用第二种方法,您将了解如何从 ISO 映像创建内核区域。当需要部署特定内核版本以支持某个应用或环境时,此方法很有用。
  • 使用最后一种方法,您将了解如何将原生区域转换为内核区域。如果需要将应用或服务更新为在更高内核版本上运行,而不影响系统上运行的其他服务,此方法非常有用。

图 1 概括了我们要执行的步骤:

图 1. 创建内核区域的三种方法图示

图 1. 创建内核区域的三种方法图示

前提条件

创建第一个内核区域之前,我们需要完成几个任务。我们需要检查硬件是否能够运行内核区域,还需要向系统提供有关应用内存使用情况的提示。

检查硬件功能

内核区域将只在某些类型的硬件上运行,如下所示:

  • Intel CPU,BIOS 中启用 CPU 虚拟化 (VT-x) 并且支持扩展页表 (EPT),如 Nehalem 或更新的 CPU
  • AMD CPU,BIOS 中启用 CPU 虚拟化 (AMD-v) 并且支持嵌套页表 (NPT),如 Barcelona 或更新的 CPU
  • sun4v CPU,“宽”分区寄存器,如运行受支持固件版本的 Oracle SPARC T4 或 SPARC T5 处理器以及 Oracle SPARC M5、SPARC M6 或更新的处理器

您可以使用 virtinfo 命令轻松查看能够运行内核区域的系统,如清单 1 所示:

root@global:~# virtinfo
NAME            CLASS     
non-global-zone supported 
kernel-zone     supported 

清单 1

您可以从清单 1 的输出中看到,内核区域受支持。

还有其他一些硬件前提条件;有关完整列表,请参见 Oracle Solaris 内核区域文档

提供有关应用内存使用情况的信息

使用内核区域时,需要向系统提供有关应用内存使用情况的提示。此信息用于限制 ZFS 自适应替换缓存 (ARC) 的增长,使更多内存保持对应用可用,在本例中,对内核区域本身可用。

通过设置 user_reserve_hint_pct 参数提供此提示。为此提供了一个脚本,当前建议将此值设置为 80。

root@global:~# ./set_user_reserve.sh -f 80
Adjusting user_reserve_hint_pct from 0 to 80
Adjustment of user_reserve_hint_pct to 80 successful.

访问 My Oracle Support 网站,然后访问文档 ID 1663862.1,可以找到此脚本及更多信息。

使用直接安装方法创建首个内核区域

有关创建内核区域和配置其所有属性涉及的所有步骤的完整讨论,请参见创建和使用 Oracle Solaris 内核区域。本文将重点讨论部分步骤来演示如何快速地让内核区域实例上线运行。

前提条件

首先,检查 ZFS 文件系统和网络状态,如清单 2 所示:

demo@global:~$ zfs list | grep zones
rpool/VARSHARE/zones                            16.5G   348G    32K  /system/zones

demo@global:~$ dladm show-link
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net2                phys      1500   unknown  --
net0                phys      1500   up       --
net3                phys      1500   unknown  --

清单 2

:在清单 2 中,没有与任何特定区域关联的 ZFS 数据集。稍后我们将看到如何在安装区域时创建这些数据集。还需注意,没有虚拟网络接口卡 (VNIC) 设备。

我们还要查看全局区域的 Oracle Solaris 版本,如清单 3 所示,因为稍后我们将使用此信息:

root@global:~# uname -a
SunOS global 5.11 11.2 i86pc i386 i86pc

清单 3

在清单 3 中,我们可以看到版本为 Oracle Solaris 11.2。

:在本文中,我们将使用 uname 作为一种显示系统内核版本的快捷方式。但是, 建议用这种方式查看系统版本。建议的方式是查询 entire 软件包,如清单 4 所示,该清单也显示版本为 Oracle Solaris 11.2。(有关如何在查询整个软件包时对输出解码的说明,请参见“了解 Oracle Solaris 11 软件包版本控制”。)

demo@dcsw-79-168:~$ pkg list entire
NAME (PUBLISHER)                                  VERSION                    IFO
entire                                            0.5.11-0.175.2.0.0.41.0    i—

清单 4

我们还可以看到,系统设置了发布者:

root@global:~# pkg publisher
PUBLISHER                TYPE     STATUS P LOCATION
solaris                  origin   online F http://ipkg.us.oracle.com/solaris11/dev/

第 1 步:创建内核区域

首先使用命令行创建首个内核区域,如清单 5 所示:

root@global:~# zonecfg -z myfirstkz create -t SYSsolaris-kz

清单 5

在清单 5 中,注意我们只需提供区域名称 (myfirstkz) 和内核区域标记 (SYSsolaris-kz)。

默认情况下,所有 Oracle Solaris 区域均配置有一个名为 anet 的自动 VNIC,它会自动为我们提供一个网络设备。我们看不到这个网络设备,但它会在区域引导时自动创建(并且在区域关闭时自动删除)。可以使用 dladm 命令对此进行检查:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net2                phys      1500   unknown  --
net0                phys      1500   up       --
net3                phys      1500   unknown  --

我们还可以看到,现在还没有为该内核区域创建存储:

root@global:~# zfs list | grep zones
rpool/VARSHARE/zones                            16.5G   348G    32K  /system/zones

可以使用 zoneadm 命令验证该内核区域现在是否处于已配置状态:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - myfirstkz        configured  -                            solaris-kz excl  

我们来看看刚创建的内核区域的默认设置。这可以通过将 info 选项传递到 zonecfg 命令实现,如清单 6 所示:

root@global~# zonecfg -z myfirstkz info
zonename: myfirstkz
brand: solaris-kz
autoboot: false
autoshutdown: shutdown
bootargs: 
pool: 
scheduling-class: 
hostid: 0x3888f5a3
tenant: 
anet:
        lower-link: auto
        allowed-address not specified
        configure-allowed-address: true
        defrouter not specified
        allowed-dhcp-cids not specified
        link-protection: mac-nospoof
        mac-address: auto
        mac-prefix not specified
        mac-slot not specified
        vlan-id not specified
        priority not specified
        rxrings not specified
        txrings not specified
        mtu not specified
        maxbw not specified
        rxfanout not specified
        vsi-typeid not specified
        vsi-vers not specified
        vsi-mgrid not specified
        etsbw-lcl not specified
        cos not specified
        evs not specified
        vport not specified
        id: 0
device:
        match not specified
        storage: dev:/dev/zvol/dsk/rpool/VARSHARE/zones/myfirstkz/disk0
        id: 0
        bootpri: 0
capped-memory:
        physical: 2G

清单 6

在清单 6 的输出中,我们可以看到该区域名为 myfirstkz,是个内核区域(brand:solaris-kz),有一个引导磁盘(其位置为 dev:/dev/zvol/dsk/rpool/VARSHARE/zones/myfirstkz/disk0),最后,为此内核区域分配了 2 GB 物理内存。

但看不到为此内核区域分配的 CPU 资源量。未指定任何内容时,默认值是分配一个虚拟 CPU。稍后启动内核区域时,我们将看到如何验证这一点。

第 2 步:安装内核区域

现在已经创建了内核区域,我们需要安装它。

首次安装,我们将使用被称作直接安装 的安装方法。使用直接安装,安装程序运行在主机上。安装程序将创建并格式化内核区域的引导磁盘,并使用主机的软件包发布者在该磁盘上安装 Oracle Solaris 软件包。由于安装程序在主机上运行,只能安装与主机上正在活动运行的 Oracle Solaris 完全相同的版本。

此安装方法利用了 Oracle Solaris 11 映像包管理系统。您将需要确保有权访问映像包管理系统信息库;在本例中,我们可以通过网络访问该信息库。有关映像包管理系统的更多信息,请参见“Oracle Solaris 11 映像包管理系统 (IPS) 基础知识简介”。

运行以下命令安装 myfirstkz 内核区域:

root@global:~# zoneadm -z myfirstkz install
Progress being logged to /var/log/zones/zoneadm.20140724T124406Z.myfirstkz.install
pkg cache: Using /var/pkg/publisher.
 Install Log: /system/volatile/install.7395/install_log
 AI Manifest: /tmp/zoneadm6814.Voa43n/devel-ai-manifest.xml
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
Installation: Starting ...

        Creating IPS image
        Installing packages from:
            solaris
                origin:  http://ipkg.us.oracle.com/solaris11/dev/
        The following licenses have been accepted and not displayed.
        Please review the licenses for the following packages post-install:
          consolidation/osnet/osnet-incorporation                     
        Package licenses may be viewed using the command:
          pkg info --license <pkg_fmri>

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                            483/483   64276483/483   64276/64276  543.8/543.8 11.6M/s

PHASE                                          ITEMS
Installing new actions                   87529/87529
Updating package state database                 Done 
Updating package cache                           0/0 
Updating image state                            Done 
Creating fast lookup database                   Done 
Installation: Succeeded
        Done: Installation completed in 538.018 seconds.

可以使用 zoneadm 命令查看 myfirstkz 内核区域的状态:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - myfirstkz        installed   -                            solaris-kz excl

:内核区域需要安装在引导磁盘上;使用如清单 7 所示命令,我们可以看到已经创建了这一引导磁盘:

root@global:~# zfs list | grep zones
rpool/VARSHARE/zones                            16.5G   348G    32K  /system/zones
rpool/VARSHARE/zones/myfirstkz                  16.5G   348G    31K  /system/zones/myfirstkz
rpool/VARSHARE/zones/myfirstkz/disk0            16.5G   361G  2.92G  -

清单 7

您可以在清单 7 中看到,已经自动创建了 /myfirstkz/disk0 数据集。

第 3 步:引导内核区域并完成系统配置

myfirstkz 上线运行的最后一步是引导它并设置系统配置。我们将在命令行用一条命令引导该区域,然后访问其控制台,如清单 8 所示,因此可以看见大部分控制台输出:

root@global:~# zoneadm -z myfirstkz boot; zlogin -C myfirstkz
[Connected to zone 'myfirstkz' console]
Boot device: disk0  File and args: 
reading module /platform/i86pc/amd64/boot_archive...done.
reading kernel file /platform/i86pc/kernel/amd64/unix...done.
SunOS Release 5.11 Version 11.2 64-bit
Copyright (c) 1983, 2014, Oracle and/or its affiliates. All rights reserved.
Loading smf(5) service descriptions: 183/183
Configuring devices.

清单 8

:清单 8 中所示 zlogin-C 选项让我们能够访问区域控制台;该命令将带我们进入该区域,并允许我们在该区域内工作。

因为没有可用的系统配置文件,所以启动了 System Configuration Tool,如图 2 所示。

图 2. System Configuration Tool 初始屏幕

图 2. System Configuration Tool 初始屏幕

按 F2 继续。

在 System Identity 屏幕(如图 3 所示)中,输入 myfirstkz 作为计算机名,然后按 F2 继续。

图 3. System Identity 屏幕

图 3. System Identity 屏幕

在 Network 屏幕(如图 4 所示)中,输入适合您网络的网络设置,然后按 F2。在此,我们将选择 Automatically

图 4. Network 屏幕

图 4. Network 屏幕

在 Time Zone:Regions 屏幕(如图 5 所示)中,选择适合您所在位置的时区区域。在本例中,我们选择 Europe。然后按 F2。

图 5. Time Zone:Regions 屏幕

图 5. Time Zone:Regions 屏幕

在 Time Zone:Locations 屏幕(如图 6 所示)中,选择适合您所在位置的时区位置,然后按 F2。

图 6. Time Zone:Locations 屏幕

图 6. Time Zone:Locations 屏幕

在 Time Zone 屏幕(如图 7 所示)中,选择适合您所在位置的时区,然后按 F2。

图 7. Time Zone 屏幕

图 7. Time Zone 屏幕

在 Locale:Language 屏幕(如图 8 所示)中,选择适合您所在位置的语言,然后按 F2。

图 8. Locale:Language 屏幕

图 8. Locale:Language 屏幕

在 Locale:Territory 屏幕(如图 9 所示)中,选择适合您所在位置的语言地区,然后按 F2。

图 9. Locale:Territory 屏幕

图 9. Locale:Territory 屏幕

在 Date and Time 屏幕(如图 10 所示)中,设置日期和时间,然后按 F2。

图 10. Date and Time 屏幕

图 10. Date and Time 屏幕

在 Keyboard 屏幕(如图 11 所示)中,选择适合的键盘,然后按 F2。

图 11. Keyboard 屏幕

图 11. Keyboard 屏幕

在 Users 屏幕(如图 12 所示)中,选择 root 密码,输入用户帐户信息。然后按 F2。

图 12. Users 屏幕

图 12. Users 屏幕

在 Support — Registration 屏幕(如图 13 所示)中,输入 My Oracle Support 凭证。然后按 F2。

图 13. Support - Registration 屏幕

图 13. Support - Registration 屏幕

在 Support - Network Configuration 屏幕(如图 14 所示)中,选择如何将配置数据发送到 Oracle。然后按 F2。

图 14. Support - Network Configuration 屏幕

图 14. Support - Network Configuration 屏幕

在 System Configuration Summary 屏幕(如图 15 所示)中,验证所选配置正确,然后按 F2 应用设置。

图 15. System Configuration Summary 屏幕

图 15. System Configuration Summary 屏幕

区域将继续引导,很快您就会看到控制台登录:

SC profile successfully generated as:
/etc/svc/profile/sysconfig/sysconfig-20140724-130314/sc_profile.xml

Exiting System Configuration Tool. Log is available at:
/system/volatile/sysconfig/sysconfig.log.287
Hostname: myfirstkz
Jul 24 15:20:29 myfirstkz sendmail[1690]: My unqualified host name (myfirstkz) unknown; sleeping for retry
Jul 24 15:20:29 myfirstkz sendmail[1700]: My unqualified host name (myfirstkz) unknown; sleeping for retry

myfirstkz console login: 

区域现在已准备好,您可以登录了。在本示例中,现在使用“~.”转义序列退出控制台。

使用 zoneadm 命令可以检查该区域是否已经引导并运行:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   2 myfirstkz        running     -                            solaris-kz excl  

与希望的一样,当区域引导时,自动为我们创建了 VNIC。可以使用 dladm 命令进行验证,如清单 9 所示:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net2                phys      1500   unknown  --
net0                phys      1500   up       --
net3                phys      1500   unknown  --
myfirstkz/net0      vnic      1500   up       net0

清单 9

在清单 9 中,我们可以看到 VNIC 作为 myfirstkz/net0 列出。

第 4 步:登录内核区域

最后一步是登录您的区域去看看。可以从全局区域使用 zlogin 命令实现,如清单 10 所示:

root@global:~# zlogin myfirstkz
[Connected to zone 'myfirstkz' pts/1]
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@myfirstkz:~# uname -a
SunOS myfirstkz 5.11 11.2 i86pc i386 i86pc
root@myfirstkz:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           dhcp     ok           10.134.79.210/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe47:ca30/10
root@myfirstkz:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
root@myfirstkz:~# zfs list
NAME                              USED  AVAIL  REFER  MOUNTPOINT
rpool                            4.65G  10.7G  32.5K  /rpool
rpool/ROOT                       2.58G  10.7G    31K  legacy
rpool/ROOT/solaris-5             2.58G  10.7G  2.08G  /
rpool/ROOT/solaris-5/var          510M  10.7G   508M  /var
rpool/VARSHARE                   2.52M  10.7G  2.43M  /var/share
rpool/VARSHARE/pkg                 63K  10.7G    32K  /var/share/pkg
rpool/VARSHARE/pkg/repositories    31K  10.7G    31K  /var/share/pkg/repositories
rpool/VARSHARE/zones               31K  10.7G    31K  /system/zones
rpool/dump                       1.03G  10.8G  1.00G  -
rpool/export                     96.5K  10.7G    32K  /export
rpool/export/home                64.5K  10.7G    32K  /export/home
rpool/export/home/demo           32.5K  10.7G  32.5K  /export/home/demo
rpool/swap                       1.03G  10.8G  1.00G  -
root@myfirstkz:~# zonename
global
root@myfirstkz:~# exit
logout

[Connection to zone 'myfirstkz' pts/1 closed]

清单 10

:在清单 10 中,我们未使用 zlogin 命令的 -C 选项,这意味着未通过区域的控制台访问它。这样我们就可以在结束时直接退出 shell 离开区域。

我们看看清单 10 中所示的输出,看看有什么发现:

  • uname 命令的输出显示我们运行在 Oracle Solaris 11.2(全局区域中使用的运行 myfirstkz 内核区域的内核版本)上。
  • ipadm 命令的输出显示 myfirstkz 的 IP 地址。一共有四项:两个环回设备(IPv4 和 IPv6)、IP 地址为 10.134.79.210 的 IPv4 net0 设备,最后是一个 IPv6 net0 设备。
  • dladm 命令的输出显示自动创建的 net0 VNIC。
  • zfs list 命令的输出显示我们的 ZFS 数据集。
  • 最后,zonename 命令的输出显示我们的区域名称为 global。对于原生区域,这将是实际区域名称。不过,内核区域实际上运行一个完整的内核实例,因此内核区域中运行的用户拥有自己的全局区域实例。

如果要在内核区域中确定区域名称,可以使用 virtinfo 命令:

root@global:~# zlogin myfirstkz
[Connected to zone 'myfirstkz' pts/1]
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@myfirstkz:~# virtinfo -c current get zonename
NAME        CLASS   PROPERTY VALUE     
kernel-zone current zonename myfirstkz 
root@myfirstkz:~# exit
logout

:我们在 myfirstkz 中看不到有关全局区域的任何信息,只能看到自己区域的属性。

现在验证了 myfirstkz 已上线运行。您可以将登录信息提供给用户,让用户将其团队内核区域当做一个系统一样完成其配置。

将内核区域更新到更高 Oracle Solaris 版本

内核区域的一个重要特性就是能够运行与主机全局区域内核版本不同的内核区域。

从 Oracle Solaris 11.2 开始,内核区域既支持向后兼容,也支持向前兼容。实际上,这意味着您不仅可以有一个运行 Oracle Solaris 11.2 的内核区域,而主机运行更高版本的 Oracle Solaris(如 Oracle Solaris 11.3,如果有的话),也可以有一个运行更高版本 Oracle Solaris(如 Oracle Solaris 11.3)的内核区域,而主机运行 Oracle Solaris 11.2。图 16 说明了这一功能。

图 16. 内核区域向前兼容和向后兼容示例

图 16. 内核区域向前兼容和向后兼容示例

将 myfirstkz 更新到更高 Oracle Solaris 版本

我们来将内核区域更新为使用更高的 Oracle Solaris 版本(假设的“Oracle Solaris 下一版本”),而非主机上运行的版本 (Oracle Solaris 11.2)。

首先,我们使用清单 11 所示命令查看主机全局区域有哪些引导环境:

root@global:~# beadm list
BE                 Active Mountpoint Space   Policy Created          
--                 ------ ---------- -----   ------ -------          
solaris            -      -          44.67M  static 2012-01-26 18:59 
solaris-1          -      -          47.78M  static 2014-06-25 08:12 
solaris-2          -      -          46.71M  static 2014-06-25 08:40 
solaris-3          -      -          1.03G   static 2014-06-25 23:30 
solaris-3-backup-1 -      -          221.0K  static 2014-07-10 14:23 
solaris-4          NR     /          52.77G  static 2014-07-20 18:41 
solaris-backup-1   -      -          144.0K  static 2012-01-26 19:28 

清单 11

在清单 11 中,我们可以看到原生区域引导环境的列表(如果有的话)。不过,我们看不到有内核区域引导环境列出,因为内核区域有自己的引导磁盘。

我们来查看当前发布者并将内核区域指向具有更新内核的发布者。首先登录 myfirstkz,如清单 12 所示:

root@global:~# zlogin myfirstkz
[Connected to zone 'myfirstkz' pts/2]
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@myfirstkz:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
solaris                     origin   online F http://ipkg.us.oracle.com/solaris11/dev/
root@myfirstkz:~# pkg set-publisher -G '*' -g http://ipkg.us.oracle.com/solaris-n/dev/ solaris
root@myfirstkz:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
solaris                     origin   online F http://ipkg.us.oracle.com/solaris-n/dev/

清单 12

请注意,本例将使用一个内部创建的信息库。当有更高版本的 Oracle Solaris 时,您可以自行复制此信息库。在清单 12 中,我们可以看到我们运行的是 Oracle Solaris 11.2,发布者已设置为指向 dev 信息库。

更新之前,我们来看看内核区域当前面对的引导环境:

root@myfirstkz:~# beadm list
BE        Active Mountpoint Space Policy Created          
--        ------ ---------- ----- ------ -------          
solaris-5 NR     /          7.91M static 2014-07-24 13:44 

现在更新内核区域,如清单 13 所示:

root@myfirstkz:~# pkg update --accept
------------------------------------------------------------
Package: pkg://solaris/consolidation/osnet/osnet-incorporation@5.12,5.12-
5.12.0.0.0.52.0:20140714T022826Z
License: lic_OTN

You acknowledge that your use of this Oracle Solaris software product
is subject to (i) the license terms that you accepted when you obtained
the right to use Oracle Solaris software; or (ii) the license terms that
you agreed to when you placed your Oracle Solaris software order with
Oracle; or (iii) the Oracle Solaris software license terms included with
the hardware that you acquired from Oracle; or, if (i), (ii) or (iii)
are not applicable, then, (iv) the OTN License Agreement for Oracle
Solaris (which you acknowledge you have read and agree to) available at
http://www.oracle.com/technetwork/licenses/solaris-cluster-express-license-
167852.html.
Note: Software downloaded for trial use or downloaded as replacement
media may not be used to update any unsupported software.



            Packages to remove:  37
           Packages to install:  57
            Packages to update: 432
           Mediators to change:   4
       Create boot environment: Yes
Create backup boot environment:  No
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                            526/526   23157/23157  363.4/363.4 16.7M/s

PHASE                                          ITEMS
Removing old actions                       6580/6580
Installing new actions                     9594/9594
Updating modified actions                24807/24807
Updating package state database                 Done 
Updating package cache                       469/469 
Updating image state                            Done 
Creating fast lookup database                   Done 
Updating package cache                           1/1 

A clone of solaris-5 exists and has been updated and activated.
On the next boot the Boot Environment solaris-6 will be
mounted on '/'.  Reboot when ready to switch to this updated BE.

Updating package cache                           1/1 

---------------------------------------------------------------------------
NOTE: Please review release notes posted at:

http://www.oracle.com/pls/topic/lookup?ctx=solaris11&id=SERNS
---------------------------------------------------------------------------

清单 13

在清单 13 所示命令中,使用 --accept 选项自动接受任何许可。我们在输出中可以看到已经创建了引导环境。下面看看这是什么环境,如清单 14 所示:

root@myfirstkz:~# beadm list
BE        Active Mountpoint Space Policy Created          
--        ------ ---------- ----- ------ -------          
solaris-5 N      /          7.91M static 2014-07-24 13:44 
solaris-6 R      -          7.39G static 2014-07-24 17:04

清单 14

在清单 14 中,我们可以从 solaris-6 引导环境旁边的 R 看到,重新启动之后将选择这个新环境。

最后,重新启动区域。

root@myfirstkz:~# reboot

[Connection to zone 'myfirstkz' pts/2 closed]
root@global:~# 

现在返回主机全局区域,可以使用 zoneadm 查看内核区域状态,如清单 15 所示:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   3 myfirstkz        running     -                            solaris-kz excl  

清单 15

如清单 15 所示,内核区域已经重新启动,再次运行中。

下面登录,如清单 16 所示,查看运行的是何种内核版本:

root@global:~# zlogin myfirstkz
[Connected to zone 'myfirstkz' pts/2]
Oracle Corporation      SunOS 5.n      sn_52  June 2014

清单 16

清单 16 显示我们正在运行的是一个完全不同的内核:假设的“Oracle Solaris 下一版本”。

下面运行清单 17 所示命令,离开内核区域之前最后看一看引导环境:

root@myfirstkz:~# beadm list
BE        Active Mountpoint Space  Policy Created          
--        ------ ---------- -----  ------ -------          
solaris-5 -      -          12.35M static 2014-07-24 13:44 
solaris-6 NR     /          7.50G  static 2014-07-24 17:04 
root@myfirstkz:~# exit
logout

[Connection to zone 'myfirstkz' pts/2 closed]

清单 17

在清单 17 中,我们可以看到现在运行在新的引导环境中。

通过 ISO 映像安装内核区域

有时,您可能不想直接安装内核区域,而是希望通过 ISO 映像安装。内核区域支持这种安装方法,本节将介绍如何安装。

借此机会,我们还将介绍如何为内核区域分配一些专用 CPU 资源,以及如何增加额外内存和增加其引导磁盘的大小。

第 1 步:配置专用 CPU 资源和更多内存

我们来创建一个新的内核区域,与前面所做的类似,但这次将使用 zonecfg 命令添加一些专用 CPU 资源。

首先检查现在有多少 CPU 资源:

root@global:~# psrinfo -t
socket: 0
  core: 0
    cpus: 0,8
  core: 1
    cpus: 1,9
  core: 2
    cpus: 2,10
  core: 3
    cpus: 3,11
socket: 1
  core: 8
    cpus: 4,12
  core: 9
    cpus: 5,13
  core: 10
    cpus: 6,14
  core: 11
    cpus: 7,15

现在,创建一个名为 iso-kz 的新内核区域,然后为其分配相当于四个 CPU 的专用 CPU 资源:

root@global:~# zonecfg -z iso-kz create -t SYSsolaris-kz
root@global:~# zonecfg -z iso-kz
zonecfg:iso-kz> add dedicated-cpu
zonecfg:iso-kz:dedicated-cpu> set ncpus=4
zonecfg:iso-kz:dedicated-cpu> end
zonecfg:iso-kz> verify
zonecfg:iso-kz> commit
zonecfg:iso-kz> exit

我们可以使用 zonecfg 命令检查区域创建和资源配置是否成功:

root@global:~# zonecfg -z iso-kz info dedicated-cpu
dedicated-cpu:
         ncpus: 4
         cpus not specified
         cores not specified
         sockets not specified

可以将内核区域设置为拥有虚拟 CPU专用 CPU。这两种类型之间的主要区别在于共享。

  • 对于虚拟 CPU,CPU 资源与系统其余部分或其他区域共享,如果内核区域不忙,还可以用作他途。
  • 对于专用 CPU,CPU 资源为内核区域专享,除特定内核区域之外,均不得使用。

我们还可以使用 zonecfg 命令向内核区域额外添加内存:

root@global:~# zonecfg -z iso-kz
zonecfg:iso-kz> select capped-memory
zonecfg:iso-kz:capped-memory> set physical=3g
zonecfg:iso-kz:capped-memory> end
zonecfg:iso-kz> verify
zonecfg:iso-kz> commit
zonecfg:iso-kz> exit
root@global:~# zonecfg -z iso-kz info capped-memory
capped-memory:
         physical: 3G

第 2 步:使用更大磁盘安装内核区域

现在该安装区域了。为此,我们将使用一个假想的 Oracle Solaris 11.3 ISO 映像,并将增加安装磁盘的大小。默认为 16 GB 磁盘,我们将其增加至 24 GB。清单 18 显示如何在安装时执行此操作:

root@global:~# zoneadm -z iso-kz install -b /root/sol-11_3-42-text-x86.iso -x install-size=24g

清单 18

在清单 18 中,您可以看到此次使用的映像将使用文本安装程序。

回答常规安装问题之后,我们可以登录到区域,如清单 19 所示:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   3 myfirstkz        running     -                            solaris-kz excl  
   5 iso-kz           running     -                            solaris-kz excl  

root@global:~# zlogin iso-kz
[Connected to zone 'iso-kz' pts/2]
Oracle Corporation      SunOS 5.11      11.3    June 2014
root@:~# 
root@solarisiso-kz:~# psrinfo -t
socket: 0
  core: 0
    cpu: 0
  core: 1
    cpu: 1
  core: 2
    cpu: 2
  core: 3
    cpu: 3
 root@:~# exit
logout

[Connection to zone 'iso-kz' pts/2 closed]

清单 19

在清单 19 中,我们可以看到分配了四个专用 CPU,且所运行的版本不同于主机全局区域。

继续之前,我们先关闭两个内核区域:

root@global:~# zoneadm -z myfirstkz shutdown
root@global:~# zoneadm -z iso-kz shutdown

将原生区域转换为内核区域

最后一个要尝试的操作是将原生区域转换为内核区域,可以通过 Oracle Solaris 统一存档轻松实现。

本例将使用一个已创建的原生区域。如果您不确定如何创建原生区域,请参见“如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域”。

首先看看要转换的原生区域,如清单 20 所示:

root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   6 native-zone      running     /system/zones/native-zone    solaris    excl  
   - myfirstkz        installed   -                            solaris-kz excl  
   - iso-kz           installed   -                            solaris-kz excl  

root@global:~# zlogin native-zone
[Connected to zone 'native-zone' pts/2]
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@native-zone:~# touch my_special_files
root@native-zone:~# zonename
native-zone
root@native-zone:~# exit
logout

[Connection to zone 'native-zone' pts/2 closed]
root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - myfirstkz        installed   -                            solaris-kz excl  
   - iso-kz           installed   -                            solaris-kz excl  
   - native-zone      installed   /system/zones/native-zone    solaris    excl  

清单 20

在清单 20 中,我们可以看到该原生区域已上线运行,并且我们已经登录并创建了一个名为 my_special_files 的文件。本示例只是反映从实际环境接收区域时所有已有的配置。最后,我们查看了区域名称,然后注销,关闭原生区域。

:使用统一存档捕获区域的一大好处是可以在运行的区域上执行捕获,这意味着可以避免中断对最终用户的服务。在此情况下,因为需要将原生区域转换为内核区域(而非克隆原生区域),所以关闭原生区域。

现在创建原生区域的统一存档:

root@global:~# archiveadm create -z native-zone ./native-zone-archive.uar
Initializing Unified Archive creation resources...
Unified Archive initialized: /root/native-zone-archive.uar
Logging to: /system/volatile/archive_log.26165
Executing dataset discovery...
Dataset discovery complete
Preparing archive system image...
Beginning archive stream creation...
Archive stream creation complete
Beginning final archive assembly...
Archive creation complete

创建存档之后,可以查看其内容:

root@global:~# ls -l
total 5602777
-rw-r--r--   1 root     root     901992448 Jul  1 06:18 0.175.2_ai_i386.iso
-rw-r--r--   1 root     root     1308958720 Jul 24 17:27 native-zone-archive.uar
-rw-r--r--   1 demo     staff    675102720 Jul 24 07:37 sol-11_2-42-text-x86.iso

root@global:~# archiveadm info -v ./native-zone-archive.uar 
Archive Information
          Creation Time:  2014-07-24T21:54:08Z
            Source Host:  global
           Architecture:  i386
       Operating System:  Oracle Solaris 11.3 X86
       Recovery Archive:  No
              Unique ID:  e1bf0d42-338b-e879-fec4-ab78290ef55c
        Archive Version:  1.0

Deployable Systems
     'native-zone'
             OS Version:  0.5.11
              OS Branch:  0.175.3.0.0.1.0
              Active BE:  solaris
                  Brand:  solaris
            Size Needed:  978MB
              Unique ID:  f488ea7c-ab1e-6cc4-d407-c60fce1e3818
               AI Media:  0.175.3_ai_i386.iso
              Root-only:  Yes

接下来,我们配置新内核区域,完成安装准备之后,传入存档,如清单 21 所示:

root@global:~# zonecfg -z converted-zone-kz create -t SYSsolaris-kz
root@global:~# zoneadm -z converted-zone-kz install -a ./native-zone-archive.uar
Progress being logged to /var/log/zones/zoneadm.20140724T233807Z.converted-zone-kz.install
[Connected to zone 'converted-zone-kz' console]
Boot device: cdrom1  File and args: -B install=true,auto-shutdown=true -B aimanifest=/system/shared/ai.xml
reading module /platform/i86pc/amd64/boot_archive...done.
reading kernel file /platform/i86pc/kernel/amd64/unix...done.
SunOS Release 5.11 Version 11.2 64-bit
Copyright (c) 1983, 2014, Oracle and/or its affiliates. All rights reserved.
Remounting root read/write
Probing for device nodes ...
Preparing image for use
Done mounting image
Configuring devices.
Hostname: solaris
Using specified install manifest : /system/shared/ai.xml

solaris console login: 
Automated Installation started
The progress of the Automated Installation will be output to the console
Detailed logging is in the logfile at /system/volatile/install_log
Press RETURN to get a login prompt at any time.

23:40:15    Install Log: /system/volatile/install_log
23:40:15    Using XML Manifest: /system/volatile/ai.xml
23:40:15    Using profile specification: /system/volatile/profile
23:40:15    Starting installation.
23:40:15    0% Preparing for Installation
23:40:15    100% manifest-parser completed.
23:40:15    100% None
23:40:15    0% Preparing for Installation
23:40:18    1% Preparing for Installation
23:40:18    2% Preparing for Installation
23:40:19    3% Preparing for Installation
23:40:19    4% Preparing for Installation
23:40:19    5% archive-1 completed.
23:40:21    8% target-discovery completed.
23:40:23    Pre-validating manifest targets before actual target selection
23:40:23    Selected Disk(s) : c1d0
23:40:24    Pre-validation of manifest targets completed
23:40:24    Validating combined manifest and archive origin targets
23:40:24    Selected Disk(s) : c1d0
23:40:24    9% target-selection completed.
23:40:24    10% ai-configuration completed.
23:40:24    9% var-share-dataset completed.
23:40:29    10% target-instantiation completed.
23:40:29    10% Beginning archive transfer
23:40:29    Commencing transfer of stream: ce6d4b69-ad85-e7e1-aaf7-fdbfdc17f001-0.zfs
to rpool
23:40:35    30% Transferring contents
23:40:39    50% Transferring contents
23:40:43    70% Transferring contents
23:40:54    86% Transferring contents
23:41:09    Completed transfer of stream: 'ce6d4b69-ad85-e7e1-aaf7-fdbfdc17f001-0.zfs' 
from file:///system/shared/uafs/OVA
23:41:12    Archive transfer completed
23:41:31    90% generated-transfer-965-1 completed.
23:41:31    90% Beginning IPS transfer
23:41:31    Setting post-install publishers to:
23:41:31        solaris
23:41:31            origin:  http://ipkg.us.oracle.com/solaris11/dev/
23:41:32    90% generated-transfer-965-2 completed.
23:41:32    Changing target pkg variant. This operation may take a while
23:51:17    90% apply-pkg-variant completed.
23:51:21    Setting boot devices in firmware
23:51:21    91% boot-configuration completed.
23:51:21    91% update-dump-adm completed.
23:51:21    92% setup-swap completed.
23:51:22    92% device-config completed.
23:51:23    92% apply-sysconfig completed.
23:51:23    93% transfer-zpool-cache completed.
23:51:36    98% boot-archive completed.
23:51:36    98% transfer-ai-files completed.
23:51:37    98% cleanup-archive-install completed.
23:51:38    100% create-snapshot completed.
23:51:39    100% None
23:51:39    Automated Installation succeeded.
23:51:39    You may wish to reboot the system at this time.
Automated Installation finished successfully
Shutdown requested. Shutting down the system
Log files will be available in /var/log/install/ after reboot
svc.startd: The system is coming down.  Please wait.
root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - myfirstkz        installed   -                            solaris-kz excl  
   - iso-kz           installed   -                            solaris-kz excl  
   - native-zone      installed   /system/zones/native-zone    solaris    excl  
   - converted-zone-kz installed   -                            solaris-kz excl  

清单 21

由清单 21 可见,安装过程成功完成,我们得到一个安装好的内核区域。

现在启动新转换的区域并查看,如清单 22 所示:

root@global:~# zoneadm -z converted-zone-kz boot
root@global:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   3 converted-zone-kz running     -                            solaris-kz excl  
   - duckstack        unavailable -                            solaris-kz excl  
   - native-zone      installed   /system/zones/native-zone    solaris    excl  
root@global:~# zlogin converted-zone-kz
[Connected to zone 'converted-zone-kz' pts/1]

Oracle Corporation      SunOS 5.11      11.2    June 2014
root@unknown:~# ls
my_special_files

清单 22

由清单 22 可见,原生区域的内容得到保留。

总结

在本文中,我们介绍了如何创建、安装、引导和配置内核区域。您了解到 Oracle Solaris 内核区域可以运行与主机上运行的内核版本不同的内核版本。我们还看到如何执行直接安装和基于 ISO 映像的安装。最后,我们还看到如何使用统一存档将原生区域转换为内核区域。

另请参见

另请参见以下资源:

关于作者

Duncan Hardie 是 Oracle Solaris 产品经理,负责 Oracle Solaris 云和虚拟化技术。他随着 Oracle 收购 Sun Microsystems 而加入 Oracle,最开始从事容错产品的设备驱动程序设计,后转入与监视、高性能计算和虚拟化相关的面向客户的服务。目前,Duncan 帮助 Oracle Solaris 产品定义、交付和定位。

修订版 1.0,2014 年 7 月 28 日

关注我们:
博客 | Facebook | Twitter | YouTube