Solaris 10 の zone 管理

最終更新日:2006年04月19日

はじめに

zone の概要

1台の物理サーバ上に複数の仮想的な独立したSolaris環境を実現する技術。
仮想的なSolaris環境は分離,独立しておりお互いに影響を与える事なく動作する。
zone には、"global zone" と "non-global zone" の2種類があり、Solars 10 をインストールした環境が global zone となり1つしか存在しない。global zone の上に構築される仮想サーバが non-global zone である。
global zone は全ての non-global zone に干渉する事ができるが、non-global zone は他のzone(global zone 含む)にはいっさい干渉できない隔離された環境である。

詳細は 参照。

zone の管理コマンド


zoneの管理コマンドを以下に示す。
コマンド 役割
zonecfg non-global zone の構成を作成/変更
zoneadm non-global zone の管理
zlogin global zone から non-global zone へのログイン

zonecfgコマンドのヘルプ

$ zonecfg
使用法: zonecfg help
        zonecfg -z <zone>                       (対話式)
        zonecfg -z <zone> <command>
        zonecfg -z <zone> -f <command-file>
コマンド:

add <resource-type>
        (global scope)
add <property-name> <property-value>
        (resource scope)
cancel
commit
create [-F] [ -b | -t <template> ]
delete [-F]
end
exit [-F]
export [-f output-file]
help [commands] [syntax] [usage] [<command-name>]
info [<resource-type> [property-name=property-value]*]
remove <resource-type> { <property-name>=<property-value> }
        (global scope)
remove <property-name>=<property-value>
        (resource scope)
revert [-F]
select <resource-type> { <property-name>=<property-value> }
set <property-name>=<property-value>
verify
$ 
$ 
$ zonecfg help
コマンド:

add <resource-type>
        (global scope)
add <property-name> <property-value>
        (resource scope)
        指定されたリソースを構成に追加します。

cancel
        リソースおよびプロパティの指定を取り消します。

commit
        現在の構成を確定します。構成は zoneadm で使用できるように
        確定する必要があります。構成を確定するまでは revert コマ
        ンドを使用して変更を削除できます。この操作は
        zonecfg セッションの完了時に自動的に試みられます。

create [-F] [ -b | -t <template> ]
        指定されたゾーンの構成を作成します。create を使用して、新しい
        ゾーンの構成を開始する必要があります。既存の構成を上書きする場
        合は、-F フラグを使用して処理を強制的に実行できます。<テンプ
        レート> を指定するとゾーン名が <テンプレート> ではなく <ゾーン名>
        となる点を除き、指定されたテンプレートと同一の構成を作成します。
        'create -b' を指定すると、構成が空白になります。引数を指定せずに
        'create' を使用すると、Sun のデフォルトの設定が適用されます。

delete [-F]
        指定されたゾーンを削除します。-F フラグを使用すると
        処理を強制的に実行できます。

end
        リソースおよびプロパティの指定を終了します。

exit [-F]
        プログラムを終了します。-F フラグを使用すると強制的に実行できます。

export [-f output-file]
        構成を標準出力に出力します。または、出力ファイルを指定した
        場合はコマンドファイルでの使用に適した書式で出力します。

help [commands] [syntax] [usage] [<command-name>]
        ヘルプメッセージを出力します。

info [<resource-type> [property-name=property-value]*]
        現在の構成に関する情報を表示します。リソースタイプを
        指定すると、関連するリソースタイプに関する情報だけが
        表示されます。リソース ID を指定すると、
        そのリソースに関する情報だけが表示されます。

remove <resource-type> { <property-name>=<property-value> }
        (global scope)
remove <property-name>=<property-value>
        (resource scope)
        指定されたリソースを構成から削除します。中括弧('{', '}') は、
        括弧の間に 1 つまたは複数のリソースを指定することを意味します。

revert [-F]
        構成を、最後に確定された状態に戻します。-F フラグを
        使用すると、処理を強制的に実行できます。

select <resource-type> { <property-name>=<property-value> }
        変更するリソースを選択します。コマンド "end" を
        使用すると、リソースの変更が完了します。プロパティ
        名と値のペアは、リソースを一意に識別するものでなけ
        ればなりません。中括弧 ('{', '}') は、括弧の間に
        1 つまたは複数のリソースを指定することを意味します。

set <property-name>=<property-value>
        プロパティ値を設定します。

verify
        現在の構成が正しいかどうかを確認します (一部のリソース
        タイプには必須のプロパティが存在します)。

zoneadmコマンドのヘルプ

$ zoneadm help
使用法: zoneadm help
        zoneadm [-z <zone>] list
        zoneadm -z <zone> <サブコマンド>

サブコマンド:

help
        使用法を出力する。

boot [-s]
        指定されたゾーンを起動 (ブート) します。  -s フラグを使用すると、
        シングルユーザー状態でゾーンをブートできます。

halt
        停止スクリプトを省略し、ゾーンの実行時リソースを削除して
        指定されたゾーンを停止します。

ready
        ゾーンでアプリケーションを実行する準備を行いますが、ゾーン内で
        ユーザープロセスは開始しません。

reboot
        ゾーンを再起動します (停止 / ブートシーケンスと同義)。
        ゾーンがアクティブでない場合には失敗します。

list [-cipv]
        現在のゾーン、またはゾーンが指定されている場合はそのゾーンを
        表示します。デフォルトでは、実行中のゾーンがすべて表示されます。
        インストールされたゾーンをすべて表示する場合は -i オプションを
        指定し、構成済みのゾーンをすべて表示する場合は -c オプション
        を指定します。一般的な -z <ゾーン> オプションを指定すると、状態
        に関係なく指定したゾーンだけが表示されます。このオプションを -i
        オプションおよび -cオプションと共に使用することはできません。
        -v オプションは、ゾーン名、ID、現在の状態、ルートディレクトリ、
        オプションなどの詳細な情報を表示する場合に使用できます。
        -p オプションは、マシンで構文解析可能な出力を要求する場合に使用
        できます。-vオプションと -p オプションを同時に使用することはでき
        ません。-v オプションも -p オプションも使用しない場合、
        ゾーン名だけが表示されます。

verify
        物理ネットワークインタフェースが存在するかどうかなど、
        構成をマシン上で安全にインスタンス化できることを確認
        してください。

install
        構成をシステムにインストールします。

uninstall [-F]
        構成をシステムからアンインストールします。-F フラグを
        使用すると、処理を強制的に実行できます。

zloginコマンドの主なオプション

zloginコマンドの主なオプションを以下に示す
(このコマンドは global zone の特権ユーザのみが実行できる)
コマンドオプション 内容
zlogin -C ゾーン名 指定された non-global zone のコンソールに接続
コンソール接続の切断は ~. または ~^D (チルダ'~'を押してからCTRL+D)
zlogin ゾーン名 指定された non-global zone に接続(rootユーザ)
zlogin -l ユーザ名 ゾーン名 ユーザ名を指定して non-global zone に接続

zone の構成情報作成


新規にゾーンを作成するにはまず構成情報を作成する必要がある。
構成情報を作成する方法として がある。

対話モードによる作成方法

zonecfgコマンドの対話モードで"testZone"ゾーンを作成する例を以下に示す。
# zonecfg -z testZone
testZone: No such zone configured
Use 'create' to begin configuring a new zone.
('create'を実行して新しいゾーンの構成開始)
zonecfg:testZone> create
zonecfg:testZone> 
(testZone を作成するディレクトリの指定)
zonecfg:testZone> set zonepath=/zone/testZone
zonecfg:testZone> 
(ネットワークインタフェースの設定)
zonecfg:testZone> add net
zonecfg:testZone:net> set physical=iprb0           ← 使用する物理インタフェース名
zonecfg:testZone:net> set address=192.168.10.11    ← IPアドレス
zonecfg:testZone:net> end
zonecfg:testZone> 
(自動起動の設定)
zonecfg:testZone> set autoboot=true
zonecfg:testZone> 
(設定の確認:'info'での出力例、PAGER環境変数で指定したコマンドで出力される)
zonecfg:testZone> info
zonepath: /zone/testZone
autoboot: true
pool:
inherit-pkg-dir:         ← 'inherit-pkg-dir'は共有ファイルシステムで global zone と共有する。
        dir: /lib            non-global zone においてRead-Onlyの
inherit-pkg-dir:             ループバックファイルシステム(lofs)としてマウントされる
        dir: /platform       ので書き込み出来ない。
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
net:
        address: 192.168.10.11
        physical: iprb0
zonecfg:testZone> 
(設定の確認:'export'での出力例、コマンドファイル作成時などに使用)
zonecfg:testZone> export
create -b
set zonepath=/zone/testZone
set autoboot=true
add inherit-pkg-dir
set dir=/lib
end
add inherit-pkg-dir
set dir=/platform
end
add inherit-pkg-dir
set dir=/sbin
end
add inherit-pkg-dir
set dir=/usr
end
add net
set address=192.168.10.11
set physical=iprb0
end
zonecfg:testZone> 
(構成情報の確認、何も出力されなければ正しい)
zonecfg:testZone> verify
zonecfg:testZone> 
(設定終了、自動的に'commit'されて設定がファイルに出力される)
zonecfg:testZone> exit
# 
# 
(確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   - testZone         configured     /zone/testZone    ← "testZone"が作成されている
以上の作業で設定ファイル /etc/zones/testZone.xml が作成される。
/etc/zones/testZone.xml の内容を以下に示す。
$ cat /etc/zones/testZone.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
    DO NOT EDIT THIS FILE.  Use zonecfg(1M) instead.
-->
<zone name="testZone" zonepath="/zone/testZone" autoboot="true">
  <inherited-pkg-dir directory="/lib"/>
  <inherited-pkg-dir directory="/platform"/>
  <inherited-pkg-dir directory="/sbin"/>
  <inherited-pkg-dir directory="/usr"/>
  <network address="10.31.191.18" physical="iprb0"/>
</zone>

コマンドファイルによる作成方法

既存の"testZone"ゾーンからコマンドファイルを作成し、"testZone01"ゾーンを作成する例を以下に示す。
("testZone"の設定を'export'してコマンドファイル作成)
# zonecfg -z testZone export > testZone01.txt
# 
# vi testZone01.txt
------------------------------------------------------------
 ファイルを編集して"testZone01"のコマンドファイルを作成する 
 最低でも zonepath, address の変更は必要                    
------------------------------------------------------------
# 
# 
(作成したコマンドファイルから"testZone01"の構成作成)
# zonecfg -z testZone01 -f testZone01.txt
# 
(確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   - testZone         configured     /zone/testZone
   - testZone01       configured     /zone/testZone01  ← "testZone01"が作成されている

zone の作成

システムのインストール

global zone にインストールされたファイルを利用して'zonepath'で指定したディレクトリにシステムを作成する。
# zoneadm -z testZone install
Preparing to install zone <testZone>.
Creating list of files to copy from the global zone.
Copying <17403> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1052> packages on the zone.
Initialized <1052> packages on zone.
Zone <testZone> is initialized.
(以下略。完了まで多少の時間が必要、プロンプトが表示されたら終了)
# 
# 
(状態の確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   - testZone         installed      /zone/testZone    ← STATUSが"installed"になる

初期設定(ブート)

"testZone"ゾーンをブートして初期設定を行う。
(ブート実行)
# zoneadm -z testZone boot
# 
(コンソール接続して初期設定実施)
# zlogin -C testZone
[ゾーン 'testZone' コンソールに接続しました]
(初回起動時はSMFサービスの読み込みで少し時間がかかる)


Select a Language

  0. English
  1. Japanese

Please make a choice (0 - 1), or press h or ? for help: 

(中略。Solaris 10 の初期インストール時と同じように設定を行う。)

rebooting system due to change(s) in /etc/default/init


[NOTICE: Zone rebooting]


SunOS Release 5.10 Version Generic 32-bit
Copyright 1983-2005 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: testZone

testZone console login: ~.
[ゾーン 'testZone' コンソールへの接続が閉じられました]
(コンソール接続の切断は ~. または ~^D (チルダ'~'を押してからCTRL+D))
# 
# 
(状態の確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   1 testZone         running        /zone/testZone    ← STATUSが"running"になる

zone の管理

状態の確認

$ zoneadm list -vc

起動(boot)

# zoneadm -z ゾーン名 boot

再起動(reboot)

# zoneadm -z ゾーン名 reboot

停止

# zoneadm -z ゾーン名 halt

コンソール接続(global zone から)

# zlogin -C ゾーン名

rootユーザで接続(global zone から)

# zlogin ゾーン名

ユーザを指定して接続(global zone から)

# zlogin -l ユーザ名 ゾーン名

プロセスの確認(global zone から)

# ps -z ゾーン名 -Z

zone の削除

状態確認

$ zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   1 testZone         running        /zone/testZone    ← STATUSが"running"なので動作している

停止

(停止処理)
# zoneadm -z testZone halt
# 
(状態の確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   - testZone         installed      /zone/testZone    ← STATUSが"installed"になる

アンインストール

(アンインストール処理)
# zoneadm -z testZone uninstall
ゾーン testZone を uninstall してよろしいですか (y/[n])? y    ← 確認で"y"を入力
# 
(状態の確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   - testZone         configured     /zone/testZone    ← STATUSが"configured"になる

構成情報削除

(構成情報削除処理)
# zonecfg -z testZone delete
Are you sure you want to delete zone testZone (y/[n])? y    ← 確認で"y"を入力
# 
(状態の確認)
# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /                 ← testZone の情報が消えている

(以上の処理で /etc/zones から testZone.xml ファイルも削除される)