ゾーン環境でのZFSの利用
ZFS ファイルシステムをゾーンで利用する方法には大きく分けて以下の2通りの方法があります。
●
汎用ファイルシステムとしてゾーンに追加する
この方法は zonecfg コマンドの add fs
サブコマンドで設定できます。グローバルゾーンで作成した ZFS
ファイルシステムを非グローバルゾーンでデータの格納領域としてそのまま利用することができますが、ゾーンの管理者権限では ZFS
のプロパティを変更することやマウントポイントを変更することなどはできません。また、ZFS ファイルシステムの mountpoint
プロパティはあらかじめ legacy に設定されている必要があります。
●
データセットとしてゾーンに追加する
この方法は zonecfg コマンドの add dataset
サブコマンドで設定できます。グローバルゾーンで作成した ZFS ファイルシステムを非グローバルゾーンでも ZFS
ファイルシステムとして操作可能な状態で利用することができます。グローバルゾーンから委任された ZFS
ファイルシステム以下の階層であれば、ゾーンの管理者権限で ZFS のプロパティ変更やファイルシステムの新規作成などの ZFS
オペレーションを実行することができます。
■ ZFS ミラープールの作成
以下のように適当なディスクorスライスを使用してミラープールを作成します。
これから作成するゾーン用に zone1 と zone2 という ZFS ファイルシステムも作成しておきます。
#
zpool create -f webdata mirror
c0t7d0s3 c0t7d1s3
#
zpool add webdata mirror c0t7d0s4
c0t7d1s4
#
zfs create webdata/zone1
#
zfs create webdata/zone2
#
zpool status
プール: webdata
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
NAME
STATE READ WRITE CKSUM
webdata
オンライン 0
0 0
mirror オンライン
0 0 0
c0t7d0s3 オンライン 0
0 0
c0t7d1s3 オンライン 0
0 0
mirror オンライン
0 0 0
c0t7d0s4 オンライン 0
0 0
c0t7d1s4 オンライン 0
0 0
エラー: 既知のデータエラーはありません
#
zfs list
NAME
USED AVAIL REFER MOUNTPOINT
webdata
168K 9.60G 27.5K /webdata
webdata/zone1
24.5K 9.60G 24.5K /webdata/zone1
webdata/zone2
24.5K 9.60G 24.5K /webdata/zone2
#
■ 基本的なゾーンの作成
まず、以下のような最低限の構成で zone1 と zone2 を作成します。
#
zonecfg -z zone1
zone1: そのような構成済みゾーンはありません
'create' を使用して、新しいゾーンの構成を開始してください。
zonecfg:zone1>
create
zonecfg:zone1>
set
zonepath=/export/zone1
zonecfg:zone1>
set autoboot=true
zonecfg:zone1>
add net
zonecfg:zone1:net>
set
physical=qfe0
zonecfg:zone1:net>
set
address=192.168.110.101
zonecfg:zone1:net>
end
zonecfg:zone1>
exit
#
zoneadm -z zone1 install
Preparing to install zone <zone1>.
Creating list of files to copy from the global zone.
Copying <2569> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1088> packages on the zone.
Initialized <1088> packages on zone.
Zone <zone1> is initialized.
The file </export/zone1/root/var/sadm/system/logs/install_log>
contains a log of the zone installation.
#
#
zoneadm -z zone1 boot
#
zlogin -C zone1
(初期設定)
....
#
zonecfg -z zone2
zone2: そのような構成済みゾーンはありません
'create' を使用して、新しいゾーンの構成を開始してください。
zonecfg:zone2>
create
zonecfg:zone2>
set
zonepath=/export/zone2
zonecfg:zone2>
set autoboot=true
zonecfg:zone2>
add net
zonecfg:zone2:net>
set
physical=qfe0
zonecfg:zone2:net>
set
address=192.168.110.102
zonecfg:zone2:net>
end
zonecfg:zone2>
exit
#
zoneadm -z zone2 install
Preparing to install zone <zone2>.
Creating list of files to copy from the global zone.
Copying <2569> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1088> packages on the zone.
Initialized <1088> packages on zone.
Zone <zone2> is initialized.
The file </export/zone2/root/var/sadm/system/logs/install_log>
contains a log of the zone installation.
#
#
zoneadm -z zone2 boot
#
zlogin -C zone2
(初期設定)
....
#
zoneadm list -vc
ID
NAME
STATUS PATH
0
global
running /
7
zone1
running /export/zone1
8
zone2
running /export/zone2
#
上記のように初期設定が終わり running 状態になっていればOKです。
■ 汎用ファイルシステムとしてゾーンに追加する
グローバルゾーンで作成した webdata/zone1 ファイルシステムを zone1
で通常のファイルシステムのように利用できるように追加します。
まず、webdata/zone1 ファイルシステムの mountpoint プロパティを legacy に変更します。
#
zfs set mountpoint=legacy
webdata/zone1
#
zfs get mountpoint webdata/zone1
NAME
PROPERTY
VALUE
SOURCE
webdata/zone1 mountpoint
legacy
local
#
以下のように zone1 の構成を変更します。
これにより zone1 の /www ディレクトリに ZFS ファイルシステム webdata/zone1 がマウントされるようになります。
#
zonecfg -z zone1
zonecfg:zone1>
add fs
zonecfg:zone1:fs>
set
special=webdata/zone1
zonecfg:zone1:fs>
set dir=/www
zonecfg:zone1:fs>
set type=zfs
zonecfg:zone1:fs>
end
zonecfg:zone1>
exit
#
設定を反映させるため zone1 を再起動させます。
#
zlogin zone1 init 6
再起動後、以下のように zone1 にログインして、ZFS でマウントされているファイルシステムを確認します。
#
zlogin zone1
[ゾーン 'zone1' pts/3 に接続されました]
Last login: Fri Oct 27 16:33:36 on pts/3
Sun Microsystems Inc. SunOS
5.10 Generic January 2005
#
df -F zfs -h
Filesystem
size used avail capacity Mounted on
webdata/zone1
9.6G 24K 9.6G
1% /www
#
上記のように汎用ファイルシステムとして容量などは認識しておりますが、以下のような ZFS のオペレーションはできません。(ストレージプールや
ZFS ファイルシステムとして認識しておりません)
#
zfs list
no datasets available
#
zpool list
no pools available
また、zoned プロパティは off のままです。
#
zfs get -r zoned webdata/zone1
NAME
PROPERTY
VALUE
SOURCE
webdata/zone1
zoned
off
default
#
■ データセットとしてゾーンに追加する
グローバルゾーンで作成した webdata/zone2 ファイルシステムを zone2 で通常の ZFS
ファイルシステムのように利用できるように追加します。
まず、webdata/zone2 ファイルシステムの mountpoint プロパティを /www に設定します。この設定は zone2
の中でも反映されます。
#
zfs set mountpoint=/www
webdata/zone2
#
zfs get mountpoint webdata/zone2
NAME
PROPERTY
VALUE
SOURCE
webdata/zone2 mountpoint
/www
local
#
以下のように zone2 の構成を変更します。
これで webdata/zone2 が zone2 でも ZFS ファイルシステムとして認識できます。
#
zonecfg -z zone2
zonecfg:zone2>
add dataset
zonecfg:zone2:dataset>
set
name=webdata/zone2
zonecfg:zone2:dataset>
end
zonecfg:zone2>
exit
#
設定を反映させるため zone2 を再起動させます。
#
zlogin zone2 init 6
再起動後、以下のように zone2 にログインして、ZFS でマウントされているファイルシステムを確認します。
#
zlogin zone2
[ゾーン 'zone2' pts/3 に接続されました]
Sun Microsystems Inc. SunOS
5.10 Generic January 2005
#
df -h -F zfs
Filesystem
size used avail capacity Mounted on
webdata/zone2
9.6G 24K 9.6G
1% /www
#
zone1 の時と同じように、zfs マウントされていることはわかります。
違いは以下のように zfs や zpool コマンドでwebdata/zone2 が認識されていることです。
#
hostname
zone2
#
zfs list
NAME
USED AVAIL REFER MOUNTPOINT
webdata
178K 9.60G 24.5K /webdata
webdata/zone2
24.5K 9.60G 24.5K /www
#
zpool list
NAME
SIZE USED AVAIL
CAP HEALTH ALTROOT
webdata
9.75G 181K 9.75G
0% ONLINE -
#
また、以下のように委任された webdata/zone2 以下であれば、ゾーン管理者の権限でファイルシステムを新規に作成することもできます。
#
zfs create webdata/zone2/db_server
#
zfs create webdata/zone2/web_server
#
zfs list
NAME
USED AVAIL REFER MOUNTPOINT
webdata
240K 9.60G 24.5K /webdata
webdata/zone2
76.5K 9.60G 27.5K /www
webdata/zone2/db_server 24.5K 9.60G 24.5K
/www/db_server
webdata/zone2/web_server 24.5K 9.60G 24.5K
/www/web_server
#
当然、webdata ファイルシステムには権限がないので、以下のようなファイルシステムの作成は失敗します。
#
zfs create webdata/test
cannot create 'webdata/test': permission denied
#
また、先程新規に作成したファイルシステムに以下のようにクォータの設定をすることもできます。
#
zfs set quota=1g
webdata/zone2/web_server
#
zfs set quota=2g
webdata/zone2/db_server
#
zfs list
NAME
USED AVAIL REFER MOUNTPOINT
webdata
240K 9.60G 24.5K /webdata
webdata/zone2
76.5K 9.60G 27.5K /www
webdata/zone2/db_server 24.5K
2.00G 24.5K
/www/db_server
webdata/zone2/web_server 24.5K
1024M 24.5K
/www/web_server
#
ちなみに上記の設定だと zone1 と zone2
で同じプールを共有しているので、上位ファイルシステムにもクォータ設定をしておくのが現実的です。
うっかり以下のように設定しようとしてしまいますが、割り当てられたデータセット自体のクォータ設定はゾーン管理者の権限ではできません。(よく考えれば
当然ですよね。)
#
zfs set quota=5g webdata/zone2
cannot set quota for 'webdata/zone2': permission denied
#
そこでグローバルゾーンに戻ってクォータ設定をします。
#
exit
[ゾーン 'zone2' pts/3 への接続が閉じられました]
#
zonename
global
#
zfs set quota=5g webdata/zone2
#
zfs set quota=3g webdata/zone1
#
zfs list
NAME
USED AVAIL REFER MOUNTPOINT
webdata
240K 9.60G 24.5K /webdata
webdata/zone1
24.5K 3.00G 24.5K legacy
webdata/zone2
76.5K 5.00G 27.5K /www
webdata/zone2/db_server 24.5K 2.00G 24.5K
/www/db_server
webdata/zone2/web_server 24.5K 1024M 24.5K
/www/web_server
#
非常に簡単ですね。
================
詳細は以下のトレーニングコース参照
Solaris 10 ZFS 管理
Solaris 10コンテナ(ゾーン)
Solaris10新機能(システム管理編)
================
Solaris系技術トレーニング一覧