JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:Oracle Solaris Zones、Oracle Solaris 10 Zones 和资源管理     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分Oracle Solaris 资源管理

1.  资源管理介绍

2.  项目和任务(概述)

3.  管理项目和任务

4.  扩展记帐(概述)

5.  管理扩展记帐(任务)

6.  资源控制(概述)

7.  管理资源控制(任务)

8.  公平份额调度器(概述)

9.  管理公平份额调度器(任务)

10.  使用资源上限设置守护进程控制物理内存(概述)

11.  管理资源上限设置守护进程(任务)

12.  资源池(概述)

13.  创建和管理资源池(任务)

14.  资源管理配置示例

第 2 部分Oracle Solaris Zones

15.  Oracle Solaris Zones 介绍

16.  非全局区域配置(概述)

17.  规划和配置非全局区域(任务)

规划和配置非全局区域(任务列表)

评估当前的系统设置

磁盘空间需求

限制区域大小

确定区域主机名和网络要求

区域主机名

共享 IP 区域网络地址

IPv4 区域网络地址

IPv6 区域网络地址

专用 IP 区域网络地址

文件系统配置

创建、修订和删除非全局区域配置(任务列表)

配置、检验并提交区域

如何配置区域

下一步执行的操作

配置多个区域的脚本

如何显示非全局区域的配置

使用 zonecfg 命令修改区域配置

如何修改区域配置中的资源类型

如何清除区域配置中的属性

如何重命名区域

如何在区域中添加专用设备

如何在全局区域中设置 zone.cpu-shares

使用 zonecfg 命令恢复或删除区域配置

如何恢复区域配置

如何删除区域配置

18.  关于安装、关闭、停止、卸载和克隆非全局区域(概述)

19.  安装、引导、关闭、停止、卸载和克隆非全局区域(任务)

20.  非全局区域登录(概述)

21.  登录到非全局区域(任务)

22.  关于区域迁移和 zonep2vchk 工具

23.  迁移 Oracle Solaris 系统和迁移非全局区域(任务)

24.  关于安装了区域的 Oracle Solaris 11.1 系统上的自动安装和软件包

25.  Oracle Solaris Zones 管理(概述)

26.  管理 Oracle Solaris Zones(任务)

27.  配置和管理不可编辑的区域

28.  各种 Oracle Solaris Zones 问题的故障排除

第 3 部分Oracle Solaris 10 Zones

29.  Oracle Solaris 10 Zones 介绍

30.  评估 Oracle Solaris 10 系统和创建归档文件

31.  (可选)将 Oracle Solaris 10 native 非全局区域迁移到 Oracle Solaris 10 Zones

32.  配置 solaris10 标记区域

33.  安装 solaris10 标记区域

34.  引导区域、登录和区域迁移

词汇表

索引

配置、检验并提交区域

使用 zonecfg(1M) 手册页中所述的 zonecfg 命令可以执行以下操作。

也可以使用 zonecfg 命令永久指定全局区域的资源管理设置。

当使用 zonecfg 实用程序配置区域时,您可以使用 revert 子命令来撤消资源设置。请参见如何恢复区域配置

在系统上配置多个区域的脚本在配置多个区域的脚本中提供。

有关如何显示非全局区域配置,请参见如何显示非全局区域的配置

如何配置区域

请注意,创建非全局区域的必需元素只有 zonenamezonepath 属性。其他资源和属性都是可选的。有些可选的资源还需要在备选项之间进行选择,例如决定使用 dedicated-cpu 资源还是 capped-cpu 资源。有关可用的 zonecfg 属性和资源的信息,请参见区域配置数据

您必须是全局管理员或在全局区域中具有相应授权的用户才能执行此过程。

  1. 成为 root 用户或承担等效角色。
  2. 用所选的区域名称来设置区域配置。

    此示例过程中使用名称 my-zone

    global# zonecfg -z my-zone

    如果是第一次配置该区域,则可以看到以下系统消息:

    my-zone: No such zone configured
    Use 'create' to begin configuring a new zone.
  3. 创建新的区域配置。

    此过程使用缺省设置。

    zonecfg:my-zone> create
    create: Using system default template 'SYSdefault'
  4. 设置区域路径,在此过程中为 /zones/my-zone
    zonecfg:my-zone> set zonepath=/zones/my-zone

    区域必须位于 ZFS 数据集中。在安装或附加区域时,将自动创建 ZFS 数据集。如果无法创建 ZFS 数据集,也无法安装或附加区域。请注意,如果区域路径有父目录,它必须是已挂载数据集的挂载点。

  5. 设置自动引导值。

    如果设置为 true,则在引导全局区域时将自动引导该区域。缺省值为 false。请注意,要自动引导区域,还必须启用区域服务 svc:/system/zones:default。缺省情况下将启用该服务。

    zonecfg:my-zone> set autoboot=true
  6. 为区域设置持久引导参数。
    zonecfg:my-zone> set bootargs="-m verbose"
  7. 指定一个 CPU 专用于该区域。
    zonecfg:my-zone> add dedicated-cpu
    1. 设置 CPU 数量。
      zonecfg:my-zone:dedicated-cpu> set ncpus=1-2
    2. (可选的)设置重要性。
      zonecfg:my-zone:dedicated-cpu> set importance=10

      缺省值为 1

    3. 结束指定。
      zonecfg:my-zone:dedicated-cpu> end
  8. 修改缺省特权集。
    zonecfg:my-zone> set limitpriv="default,sys_time"

    该行添加了将系统时钟设置为缺省特权集的功能。

  9. 将调度类设置为 FSS
    zonecfg:my-zone> set scheduling-class=FSS
  10. 添加内存上限。
    zonecfg:my-zone> add capped-memory
    1. 设置内存上限。
      zonecfg:my-zone:capped-memory> set physical=1g
    2. 设置交换内存上限。
      zonecfg:my-zone:capped-memory> set swap=2g
    3. 设置锁定内存上限。
      zonecfg:my-zone:capped-memory> set locked=500m
    4. 结束内存上限指定。
      zonecfg:my-zone:capped-memory> end

    注 - 要使用 capped-memory 资源,全局区域中必须安装 resource-cap 软件包。


  11. 添加文件系统。
    zonecfg:my-zone> add fs
    1. 设置文件系统的挂载点,在此过程中为 /usr/local
      zonecfg:my-zone:fs> set dir=/usr/local
    2. 指定在区域中配置 /usr/local 之后,才能挂载全局区域中的 /opt/local
      zonecfg:my-zone:fs> set special=/opt/local

      在非全局区域中,/usr/local 文件系统是可读写的。

    3. 指定文件系统类型,在此过程中为 lofs
      zonecfg:my-zone:fs> set type=lofs

      此类型指明了内核与文件系统的交互方式。

    4. 结束文件系统指定。
      zonecfg:my-zone:fs> end

    可多次执行此步骤来添加多个文件系统。

  12. 如有必要,设置 hostid
    zonecfg:my-zone> set hostid=80f0c086
  13. 在存储池 tank 中添加一个名为 sales 的 ZFS 数据集。
    zonecfg:my-zone> add dataset
    1. 指定指向 ZFS 数据集 sales 的路径。
      zonecfg:my-zone> set name=tank/sales
    2. 结束数据集指定。
      zonecfg:my-zone> end

    区域管理员可在数据集中创建和销毁快照、文件系统和卷。区域管理员可以修改数据集的属性,并控制压缩和加密。

  14. 创建具有自动 VNIC 的专用 IP 区域。
    zonecfg:my-zone> set ip-type=exclusive
    zonecfg:my-zone> add anet
    1. 为要创建的链接将 auto 指定为底层链接。
      zonecfg:my-zone:anet> set lower-link=auto

      每次引导区域时,zoneadmd 守护进程都会自动选择用来创建 VNIC 的链接。当选择数据链路时跳过 IPoIB 链路。

    2. 结束指定。
      zonecfg:my-zone:anet> end
  15. 添加设备。
    zonecfg:my-zone> add device
    1. 设置设备匹配,在此过程中为 /dev/sound/*
      zonecfg:my-zone:device> set match=/dev/sound/*
    2. 结束设备指定。
      zonecfg:my-zone:device> end

    可多次执行此步骤来添加多个设备。

  16. 为 OFUV 组件(而不是 IB 诊断工具)添加开放光纤网络用户组件 (Open Fabric User Verb, OFUV) 设备。
    zonecfg:my-zone> add device
    1. 设置设备匹配,在此过程中为 infiniband/ofs/*
      zonecfg:my-zone:device> set match=infiniband/ofs/*
    2. 结束设备指定。
      zonecfg:my-zone:device> end

    非全局区域不支持 IB 诊断工具。添加的设备可以与 OFUV 组件(例如谓词 (verb) 和 rdma_cm)一起使用。

    可多次执行此步骤来添加多个设备。

  17. 为 OFUV 组件(而不是 IB 诊断工具)添加 OFUV 设备。
    zonecfg:my-zone> add device
    1. 设置设备匹配,在此过程中为 infiniband/hca/*
      zonecfg:my-zone:device> set match=infiniband/hca/*
    2. 结束设备指定。
      zonecfg:my-zone:device> end

    非全局区域不支持 IB 诊断工具。添加的设备可以与 OFUV 组件(例如谓词 (verb) 和 rdma_cm)一起使用。

    可多次执行此步骤来添加多个设备。

  18. 要允许使用 format 命令标记磁盘,应将整个磁盘/LUN 委托到区域,并设置 allow-partition 属性。
    zonecfg:my-zone> add device
    1. 设置设备匹配,在此过程中为 /dev/*dsk/c2t40d3*
      zonecfg:my-zone:device> set match=/dev/*dsk/c2t40d3*
    2. allow-partition 设置为 true
      zonecfg:my-zone:device> set allow-partition=true
    3. 结束设备指定。
      zonecfg:my-zone:device> end

    可多次执行此步骤来添加多个设备。

  19. 要允许在磁盘中执行 uscsi 操作,应设置 allow-raw-io 属性。
    zonecfg:my-zone> add device
    1. 设置设备匹配,在此过程中为 /dev/*dsk/c2t40d3*
      zonecfg:my-zone:device> set match=/dev/*dsk/c2t40d3*
    2. allow-raw-io 设置为 true
      zonecfg:my-zone:device> set allow-raw-io=true
    3. 结束设备指定。
      zonecfg:my-zone:device> end

      注意

      注意 - 如果允许区域在磁盘上执行 uscsi 操作,也会允许区域访问与磁盘连接到同一总线的任何其他设备。因此,启用此功能可能会带来安全风险,让攻击者有机可乘去攻击全局区域或使用同一总线上资源的其他区域。请参见 uscsi(7I)


    可多次执行此步骤来添加多个设备。

  20. 使用属性名称添加区域范围的资源控制。
    zonecfg:my-zone> set max-sem-ids=10485200

    可多次执行此步骤来添加多个资源控制。

  21. 使用 attr 资源类型来添加注释。
    zonecfg:my-zone> add attr
    1. 将名称设置为 comment
      zonecfg:my-zone:attr> set name=comment
    2. 将类型设置为 string
      zonecfg:my-zone:attr> set type=string
    3. 将值设置为说明区域的注释。
      zonecfg:my-zone:attr> set value="This is my work zone."
    4. 结束 attr 资源类型指定。
      zonecfg:my-zone:attr> end
  22. 检验区域的配置。
    zonecfg:my-zone> verify
  23. 提交区域的配置。
    zonecfg:my-zone> commit
  24. 退出 zonecfg 命令。
    zonecfg:my-zone> exit

    请注意,即使您没有在提示符下明确键入 commit,也会在键入 exit 或出现 EOF 时自动执行 commit

在命令行中使用多个子命令

提示 - zonecfg 命令还支持通过同一个 shell 调用多条子命令,这些子命令放在引号中并用分号进行分隔。

global# zonecfg -z my-zone "create ; set zonepath=/zones/my-zone"

对于共享 IP 区域,只能在 zonecfg net 资源中指定静态地址。不能使用命令行提供地址。


下一步执行的操作

请参见安装和引导区域来安装已提交的区域配置。

配置多个区域的脚本

可以使用此脚本在系统中配置和引导多个区域。所创建的区域缺省情况下是带有 anet 资源的独占 IP 区域。

在执行脚本之前,先通过运行 SCI 工具创建一个配置文件:

global# sysconfig create-profile -o sc_config.xml

此脚本采用以下参数:

您必须是在全局区域中具有 root 特权的全局管理员或具有适当权限配置文件的用户才能执行此脚本。

#!/bin/ksh
#
# Copyright 2006-2012 Oracle Corporation. All rights reserved.
# Use is subject to license terms.
#

#
# This script serves as an example of how to instantiate several zones
# with no administrative interaction.  Run the script with no arguments to
# get a usage message.  The general flow of the script is:
#
#   1) Parse and check command line arguments
#   2) Configure all zones that are not yet configured
#   3) Install the first zone, if needed
#   4) Create the remaining zones as clones of the first zone
#
# Upon successful completion, the requested number of zones will be
# been installed and booted.
#

export PATH=/usr/bin:/usr/sbin

me=$(basename $0)
function fail_usage {
    print -u2 "Usage:
    $me <#-of-zones> <zonename-prefix> <basedir> <sysconfig.xml>

Generate sysconfig.xml with:
    sysconfig create-profile -o sysconfig.xml

When running sysconfig, choose \"Automatically\" or \"None\" for network
configuration. The value entered for \"Computer Name\" will ignored:
each zone's nodename will be set to match the zone name."

    exit 2
}

function log {
    print "$(date +%T) $@"
}

function error {
    print -u2 "$me: ERROR: $@"
}

function get_zone_state {
    zoneadm -z "$1" list -p 2>/dev/null | cut -d: -f3
}

#
# Parse and check arguments
#
(( $# != 4 )) && fail_usage

# If $1 is not a number nzones will be set to 0.
integer nzones=$1
if (( nzones < 1 )); then
    error "Invalid number of zones \"$1\""
    fail_usage
fi
# Be sure that zonename prefix is an allowable zone name and not too long.
prefix=$2
if [[ $prefix != @([a-zA-Z0-9])*([-_.a-zA-Z0-9]) || ${#prefix} > 62 ]]; then
    error "Invalid zonename prefix"
    fail_usage
fi
# Be sure that basedir is an absolute path.  zoneadm will create the directory
# if needed.
dir=$3
if [[ $dir != /* ]]; then
    error "Invalid basedir"
    fail_usage
fi
# Be sure the sysconfig profile is readable and ends in .xml
sysconfig=$4
if [[ ! -f $sysconfig || ! -r $sysconfig || $sysconfig != *.xml ]]; then
    error "sysconfig profile missing, unreadable, or not *.xml"
    fail_usage
fi

#
# Create a temporary directory for all temp files
#
export TMPDIR=$(mktemp -d /tmp/$me.XXXXXX)
if [[ -z $TMPDIR ]]; then
    error "Could not create temporary directory"
    exit 1
fi
trap 'rm -rf $TMPDIR' EXIT

#
# Configure all of the zones
#
for (( i=1; i <= nzones; i++ )); do
    zone=$prefix$i
    state=$(get_zone_state $zone)
    if [[ -n $state ]]; then
        log "Skipping configuration of $zone: already $state"
        continue
    fi

    log "Configuring $zone"
    zonecfg -z "$zone" "create; set zonepath=$dir/$zone"
    if (( $? != 0 )); then
        error "Configuration of $zone failed"
        exit 1
    fi
done

#
# Install the first zone, then boot it for long enough for SMF to be
# initialized.  This will make it so that the first boot of all the clones
# goes much more quickly.
#
zone=${prefix}1
state=$(get_zone_state $zone)
if [[ $state == configured ]]; then
    log "Installing $zone"

    # Customize the nodename in the sysconfig profile
    z_sysconfig=$TMPDIR/$zone.xml
    search="<propval type=\"astring\" name=\"nodename\" value=\".*\"/>"
    replace="<propval type=\"astring\" name=\"nodename\" value=\"$zone\"/>"
    sed "s|$search|$replace|" $sysconfig > $z_sysconfig

    zoneadm -z $zone install -c $z_sysconfig
    if (( $? != 0 )); then
        error "Installation of $zone failed."
        rm -f $z_sysconfig
        exit 1
    fi
    rm -f $z_sysconfig
elif [[ $state != installed ]]; then
    error "Zone $zone is currently in the $state state."
    error "It must be in the installed state to be cloned."
    exit 1
fi
# Boot the zone no further than single-user.  All we really want is for
# svc:/system/manifest-import:default to complete.
log "Booting $zone for SMF manifest import"
zoneadm -z $zone boot -s
if (( $? != 0 )); then
    error "Failed to boot zone $zone"
    exit 1
fi
# This zlogin will return when manifest-import completes
log "Waiting for SMF manifest import in $zone to complete"
state=
while [[ $state != online ]]; do
    printf "."
    sleep 1
    state=$(zlogin $zone svcs -Ho state \
        svc:/system/manifest-import:default 2>/dev/null)
done
printf "\n"
log "Halting $zone"
zoneadm -z $zone halt
if (( $? != 0 )); then
    error "failed to halt $zone"
    exit 1
fi
firstzone=$zone

#
# Clone and boot the remaining zones
#
for (( i=2; i <= $nzones; i++ )); do
    zone=$prefix$i

    # Be sure that it needs to be installed
    state=$(get_zone_state $zone)
    if [[ $state != configured ]]; then
        log "Skipping installation of $zone: current state is $state."
        continue
    fi

    log "Cloning $zone from $firstzone"

    # Customize the nodename in the sysconfig profile
    z_sysconfig=$TMPDIR/$zone.xml
    search='<propval type="astring" name="nodename" value=".*"/>'
    replace='<propval type="astring" name="nodename" value="'$zone'"/>'
    sed "s|$search|$replace|" $sysconfig > $z_sysconfig

    # Clone the zone
    zoneadm -z $zone clone -c $z_sysconfig $firstzone
    if (( $? != 0 )); then
        error "Clone of $firstzone to $zone failed"
        rm -f $z_sysconfig
        exit 1
    fi
    rm -f $z_sysconfig

    # Boot the zone
    log "Booting $zone"
    zoneadm -z $zone boot
    if (( $? != 0 )); then
        error "Boot of $zone failed"
        exit 1
    fi
done

#
# Boot the first zone now that clones are done
#
log "Booting $firstzone"
zoneadm -z $firstzone boot
if (( $? != 0 )); then
    error "Boot of $firstzone failed"
    exit 1
fi

log "Completed in $SECONDS seconds"
exit 0

脚本的输出:

$ ./buildzones
Usage:
        buildzones <#-of-zones> <zonename-prefix> <basedir> <sysconfig.xml>

Generate sysconfig.xml with:
        sysconfig create-profile -o sysconfig.xml

When running sysconfig, choose "Automatically" or "None" for network
configuration. The value entered for "Computer Name" will be ignored:
each zone's nodename will be set to match the zone name.

# ~user/scripts/buildzones 3 bz /tank/bz /var/tmp/sysconfig.xml
12:54:04 Configuring bz1
12:54:05 Configuring bz2
12:54:05 Configuring bz3
12:54:05 Installing bz1
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20110816T195407Z.bz1.install
       Image: Preparing at /tank/bz/bz1/root.

 Install Log: /system/volatile/install.24416/install_log
AI Manifest: /usr/share/auto_install/manifest/zone_default.xml
  SC Profile: /tmp/buildzones.F4ay4T/bz1.xml
    Zonename: bz1
Installation: Starting ....

如何显示非全局区域的配置

您必须是全局区域中的全局管理员或具有适当权限配置文件的用户才能执行此过程。

  1. 成为 root 用户或承担等效角色。
  2. 显示区域配置。
    global# zonecfg -z zonename info