Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)

ゾーンを構成、検証、および確定する

次の処理を実行するには、zonecfg コマンド (zonecfg(1M) のマニュアルページを参照) を使用します。

zonecfg コマンドは、大域ゾーンの資源管理設定を持続的に指定する場合にも使用できます。

zonecfg ユーティリティーを使用してゾーンを構成する際、revert サブコマンドを使用して、資源の設定を元に戻すことができます。「ゾーン構成を元に戻す方法」を参照してください。

システムに複数のゾーンを構成するスクリプトについては、「複数のゾーンを構成するスクリプト」を参照してください。

非大域ゾーンの構成を表示する方法については、「非大域ゾーンの構成を表示する方法」を参照してください。

Procedureゾーンの構成方法

ネイティブな非大域ゾーンの作成に必須の要素は、zonename および zonepath プロパティーだけです。そのほかの資源およびプロパティーは省略可能です。省略可能な資源には、dedicated-cpu 資源と capped-cpu 資源のどちらを使用するかを決めるなど、選択肢の中から選ぶ必要があるものもあります。使用可能な zonecfg のプロパティーと資源については、「ゾーン構成データ」を参照してください。

この手順を実行するには、大域ゾーン内で大域管理者になる必要があります。

  1. スーパーユーザーまたは Primary Administrator 役割になります。

    役割の作成と作成した役割のユーザーへの割り当てについては、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  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
    
  4. ゾーンのパス (この手順では /export/home/my-zone) を設定します。


    zonecfg:my-zone> set zonepath=/export/home/my-zone
    

    Solaris 10 10/08 より前のリリースでは、zonepath を ZFS 上に設定しないようにしてください。

  5. autoboot 値を設定します。

    true に設定すると、大域ゾーンの起動時にこのゾーンが自動的に起動します。ゾーンを自動的に起動するには、ゾーンサービス svc:/system/zones:default も有効になっている必要があります。デフォルト値は false です。


    zonecfg:my-zone> set autoboot=true
    
  6. .ゾーンの持続的なブート引数を設定します。


    zonecfg:my-zone> set bootargs="-m verbose"
    
  7. 1 つの 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=50m
      
    2. スワップメモリーの上限を設定します。


      zonecfg:my-zone:capped-memory> set swap=100m
      
    3. ロックされたメモリーの上限を設定します。


      zonecfg:my-zone:capped-memory> set locked=30m
      
    4. メモリー上限の指定を終了します。


      zonecfg:my-zone:capped-memory> end
      
  11. ファイルシステムを追加します。


    zonecfg:my-zone> add fs
    
    1. ファイルシステムのマウントポイント (この手順では /usr/local) を設定します。


      zonecfg:my-zone:fs> set dir=/usr/local
      
    2. 大域ゾーン内の /opt/zones/my-zone/local を、構成中のゾーン内で /usr/local としてマウントすることを指定します。


      zonecfg:my-zone:fs> set special=/opt/zones/my-zone/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. ストレージプール tanksales という ZFS データセットを追加します。


    zonecfg:my-zone> add dataset
    
    1. ZFS データセット sales のパスを指定します。


      zonecfg:my-zone> set name=tank/sales
      
    2. データセットの指定を終了します。


      zonecfg:my-zone> end
      
  14. (疎ルートゾーンのみ) 大域ゾーンからループバックマウントされた共有ファイルシステムを追加します。

    共有ファイルシステムを持たない完全ルートゾーンを作成する場合は、この手順を実行しないでください。「必要なディスク容量」に記述されている完全ルートゾーンの説明を参照してください。


    zonecfg:my-zone> add inherit-pkg-dir
    
    1. 大域ゾーン内の /opt/sfw を、構成中のゾーン内で読み取り専用モードでマウントすることを指定します。


      zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/sfw
      

      注 –

      ゾーンのパッケージデータベースが更新され、パッケージが反映されます。zoneadm を使用してゾーンをインストールした後で、これらの資源を変更または削除することはできません。


    2. inherit-pkg-dir の指定を終了します。


      zonecfg:my-zone:inherit-pkg-dir> end
      

    この手順を複数回実行することで、複数の共有ファイルシステムを追加できます。


    注 –

    完全ルートゾーンを作成する場合で、inherit-pkg-dir を使用してデフォルトの共有ファイルシステム資源がすでに追加されているときは、ゾーンのインストール前に、次のように zonecfg を使用して、これらのデフォルトの inherit-pkg-dir 資源を削除する必要があります。

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/lib

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/platform

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/sbin

    • zonecfg:my-zone> remove inherit-pkg-dir dir=/usr


  15. (省略可能) 排他的 IP ゾーンを作成する場合は、ip-type を設定します。


    zonecfg:my-zone> set ip-type=exclusive
    

    注 –

    add net 手順では、物理デバイスタイプだけを指定します。


  16. ネットワークインタフェースを追加します。


    zonecfg:my-zone> add net
    
    1. (共有 IP のみ) ネットワークインタフェースの IP アドレス (この手順では 192.168.0.1) を指定します。


      zonecfg:my-zone:net> set address=192.168.0.1
      
    2. ネットワークインタフェースの物理デバイスタイプ (この手順では hme デバイス) を指定します。


      zonecfg:my-zone:net> set physical=hme0
      
    3. Solaris 10 10/08: (省略可能、共有 IP のみ) ネットワークインタフェースのデフォルトのルーター (この手順では10.0.0.1) を設定します。


      zonecfg:my-zone:net> set defrouter=10.0.0.1
      
    4. 指定を終了します。


      zonecfg:my-zone:net> end
      

    この手順を複数回実行することで、複数のネットワークインタフェースを追加できます。

  17. デバイスを追加します。


    zonecfg:my-zone> add device
    
    1. デバイスの一致 (この手順では /dev/sound/*) を設定します。


      zonecfg:my-zone:device> set match=/dev/sound/*
      
    2. デバイスの指定を終了します。


      zonecfg:my-zone:device> end
      

    この手順を複数回実行することで、複数のデバイスを追加できます。

  18. プロパティー名を使用して、ゾーン規模の資源制御を追加します。


    zonecfg:my-zone> set max-sem-ids=10485200
    

    この手順を複数回実行することで、複数の資源制御を追加できます。

  19. 資源タイプ 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
      
  20. ゾーンの構成を検証します。


    zonecfg:my-zone> verify
    
  21. ゾーンの構成を確定します。


    zonecfg:my-zone> commit
    
  22. zonecfg コマンドを終了します。


    zonecfg:my-zone> exit
    

    プロンプトで commit コマンドを明示的に入力しなくても、exit を入力するか EOF が発生すると、commit の実行が自動的に試みられます。

コマンド行での複数のサブコマンドの使用

ヒント –

zonecfg コマンドは、複数のサブコマンドもサポートします。次に示すように、同じシェル呼び出しで引用符で囲み、セミコロンで区切ります。


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

次に進む手順

確定済みのゾーン構成をインストールする方法については、「ゾーンのインストールと起動」を参照してください。

複数のゾーンを構成するスクリプト

このスクリプトを使用して、システムで複数のゾーンを構成および起動できます。スクリプトには、次のパラメータを指定します。

このスクリプトを実行するには、大域ゾーン内の大域管理者になる必要があります。大域管理者は、大域ゾーン内でスーパーユーザー権限を保持するか、Primary Administrator 役割になります。


#!/bin/ksh
#
# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%	%I%	%E% SMI"

if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
		echo "usage: $0 <#-of-zones> <zonename-prefix> <basedir>"
		exit 2
fi

if [[ ! -d $3 ]]; then
		echo "$3 is not a directory"
		exit 1
fi

nprocs=`psrinfo | wc -l`
nzones=$1
prefix=$2
dir=$3

ip_addrs_per_if=`ndd /dev/ip ip_addrs_per_if`
if [ $ip_addrs_per_if -lt $nzones ]; then
		echo "ndd parameter ip_addrs_per_if is too low ($ip_addrs_per_if)"
		echo "set it higher with 'ndd -set /dev/ip ip_addrs_per_if <num>"
		exit 1
fi

i=1
while [ $i -le $nzones ]; do
	zoneadm -z $prefix$i list > /dev/null 2>&1
	if [ $? != 0 ]; then
		echo configuring $prefix$i
		F=$dir/$prefix$i.config
		rm -f $F
		echo "create" > $F
		echo "set zonepath=$dir/$prefix$i" >> $F
		zonecfg -z $prefix$i -f $dir/$prefix$i.config 2>&1 | \
		    sed 's/^/    /g' 
	else
		echo "skipping $prefix$i, already configured"
	fi
	i=`expr $i + 1`
done

i=1
while [ $i -le $nzones ]; do
	j=1
	while [ $j -le $nprocs ]; do
		if [ $i -le $nzones ]; then
			if [ `zoneadm -z $prefix$i list -p | \
			    cut -d':' -f 3` != "configured" ]; then
				echo "skipping $prefix$i, already installed"
			else
				echo installing $prefix$i
				mkdir -pm 0700 $dir/$prefix$i
				chmod 700 $dir/$prefix$i
				zoneadm -z $prefix$i install > /dev/null 2>&1 &
				sleep 1	# spread things out just a tad
			fi
		fi
		i=`expr $i + 1`
		j=`expr $j + 1`
	done
	wait
done

i=1
while [ $i -le $nzones ]; do
	echo setting up sysid for $prefix$i
	cfg=$dir/$prefix$i/root/etc/sysidcfg
	rm -f $cfg
	echo "network_interface=NONE {hostname=$prefix$i}" > $cfg
	echo "system_locale=C" >> $cfg
	echo "terminal=xterms" >> $cfg
	echo "security_policy=NONE" >> $cfg
	echo "name_service=NONE" >> $cfg
	echo "timezone=US/Pacific" >> $cfg
	echo "root_password=Qexr7Y/wzkSbc" >> $cfg  # 'l1a'
	i=`expr $i + 1`
done

i=1
para=`expr $nprocs \* 2`
while [ $i -le $nzones ]; do
	date
	j=1
	while [ $j -le $para ]; do
		if [ $i -le $nzones ]; then
			echo booting $prefix$i
			zoneadm -z $prefix$i boot &
		fi
		j=`expr $j + 1`
		i=`expr $i + 1`
	done
	wait
done

Procedure非大域ゾーンの構成を表示する方法

この手順を実行するには、大域ゾーン内で大域管理者になる必要があります。

  1. スーパーユーザーまたは Primary Administrator 役割になります。

    役割の作成と作成した役割のユーザーへの割り当てについては、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. ゾーンの構成を表示します。


    global# zonecfg -z zonename info