トップページ > ZFS関連 > ゾーン環境でのZFSの利用
カテゴリー
オラクルエンジニア通信
サポートページ
マニュアルページ
ソフトウェアダウンロード
中古UNIXマシン購入
blogs.sun.com
お勧めサイト
プライベートリンク

ゾーン環境での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仮想化:コンテナ管理
Solaris10新機能(システム管理編)
================

オラクルユニバーシティSolaris系技術トレーニング一覧

Solarisお勧め書籍

Solaris 11.2 システムハンドブック
Oracle Solaris 11 試験対策本(OCA)