Go to main content

Oracle® Solaris 11.4 での ZFS ファイルシステムの管理

印刷ビューの終了

更新: 2018 年 9 月
 
 

ゾーンがインストールされている Oracle Solaris システムで ZFS を使用する

Oracle Solaris オペレーティングシステムの Oracle Solaris ゾーン機能では、システム上にアプリケーションを実行するための隔離された環境が提供されます。以降のセクションでは、Oracle Solaris ゾーンを備えたシステムで ZFS を使用する方法について説明します。

ZFS データセットをゾーンに関連付けるときは、次の点に留意してください。

  • ZFS ファイルシステムまたは ZFS クローンをネイティブゾーンに追加できますが、管理者制御を委任しても委任しなくてもかまいません。

  • ZFS ボリュームをデバイスとしてネイティブゾーンに追加できます。

  • この時点で、ZFS スナップショットをゾーンに関連付けることはできません。


注 -  Oracle Solaris カーネルゾーンは、ネイティブな Oracle Solaris ゾーンとは異なる方法でストレージを使用します。カーネルゾーンでのストレージ使用の詳細は、solaris-kz(7) のマニュアルページのストレージアクセスのセクションを参照してください。

共有ストレージでのストレージ使用については、Oracle Solaris ゾーンの作成と使用 の 第 14 章, Oracle Solaris Zones on Shared Storageを参照してください。


fs リソースを使用して ZFS ファイルシステムを追加すると、ネイティブゾーンが大域ゾーンまたはカーネルゾーンとディスク領域を共有できるようになります。ただし、ゾーン管理者はプロパティーを制御したり、ベースとなるファイルシステム階層内に新しいファイルシステムを作成したりできません。この操作は、ゾーンにほかの任意のタイプのファイルシステムを追加することと同じです。ネイティブゾーンへのファイルシステムの追加は、共通のディスク領域を共有するためにのみ行うようにしてください。

また、ZFS データセットをネイティブゾーンに委任することもでき、これによってゾーン管理者に対してデータセットおよびそのすべての子に完全な制御が付与されます。ゾーン管理者は、そのデータセット内でファイルシステムやクローンを作成および破棄したり、データセットのプロパティーを変更したりできます。ゾーン管理者は、委任されたデータセットに設定されている最上位レベルの割り当て制限の超過を含め、ゾーンに追加されていないデータセットを操作することはできません。

ソース zonepath とターゲット zonepath の両方が ZFS ファイルシステム上に存在し、同じプール内にある場合は、zfs clone ではなく、zoneadm clone コマンドがゾーンをクローニングするためのコマンドになります。zoneadm clone コマンドは、ソース zonepath の ZFS スナップショットを作成し、ターゲット zonepath を設定します。詳細は、Oracle Solaris ゾーンの作成と使用を参照してください。

ZFS ファイルシステムを非大域ゾーンに追加する

ネイティブゾーンに追加する ZFS ファイルシステムでは、mountpoint プロパティーを legacy に設定する必要があります。たとえば、system1/zone/zion ファイルシステムの場合は、大域ゾーンまたはカーネルゾーンで次のコマンドを入力します。

global$ zfs set mountpoint=legacy system1/zone/zion

次に、zonecfg コマンドの add fs サブコマンドを使用して、そのファイルシステムをネイティブゾーンに追加します。


注 -  ファイルシステムを追加するには、それが以前に別の場所にマウントされていないことを確認してください。
global$ zonecfg -z zion
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=system1/zone/zion
zonecfg:zion:fs> set dir=/opt/data
zonecfg:zion:fs> end

この構文では、ZFS ファイルシステム system1/zone/zion がすでに構成済みの zion ゾーンに追加され、/opt/data にマウントされます。ゾーン管理者は、ファイルシステム内でファイルを作成および破棄することができます。このファイルシステムを別の場所に再マウントすることはできません。同様に、ゾーン管理者は、このファイルシステムのプロパティー (atimereadonlycompression など) を変更できません。

大域ゾーン管理者は、ファイルシステムのプロパティーの設定および制御を担当します。

zonecfg コマンドおよび zonecfg でのリソースタイプの構成の詳細については、Oracle Solaris ゾーンの作成と使用を参照してください。

データセットを非大域ゾーンに委任する

ストレージ管理をゾーンに委任するというプライマリ目標を満たすために、ZFS は、zonecfg add dataset コマンドの使用を通じてネイティブゾーンへのデータセットの追加をサポートします。

次の例では、大域ゾーンまたはカーネルゾーンの大域ゾーン管理者によって、ZFS ファイルシステムがネイティブゾーンに委任されています。

global$ zonecfg -z zion
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=system1/zone/zion
zonecfg:zion:dataset> set alias=system1
zonecfg:zion:dataset> end

ファイルシステムを追加する場合と異なり、この構文を実行すると、ZFS ファイルシステム system1/zone/zion がすでに構成済みの zion ゾーンから見えるようになります。zion ゾーン内では、このファイルシステムは system1/zone/zion としてアクセスできませんが、system1 という名前の仮想プールとしてアクセスできます。委任されるファイルシステムの別名は、仮想プールとして、元のプールのビューをゾーンに提供します。別名プロパティーは、仮想プールの名前を指定します。別名が指定されていない場合、ファイルシステム名の最後のコンポーネントに一致するデフォルトの別名が使用されます。 この例では、デフォルトの別名は zion になります。

委任されたデータセット内で、ゾーン管理者はファイルシステムプロパティーを設定したり、子孫ファイルシステムを作成したりできます。また、ゾーン管理者は、スナップショットやクローンを作成し、およびファイルシステム階層全体を制御することができます。委任されたファイルシステム内に ZFS ボリュームが作成された場合、これらのボリュームは、デバイスリソースとして追加される ZFS ボリュームと競合する可能性があります。

ZFS ボリュームを非大域ゾーンに追加する

次の方法で、ネイティブゾーンで ZFS ボリュームを追加または作成したり、またはネイティブゾーン内のボリュームのデータへのアクセスを追加したりできます。

  • ネイティブゾーンでは、特権ゾーン管理者は、以前に委任されたファイルシステムの子孫として ZFS ボリュームを作成できます。たとえば、前の例で委任されたファイルシステム system1/zone/zion の場合は、次のコマンドを入力できます。

    $ zfs create -V 2g system1/zone/zion/vol1

    このボリュームが作成されたあと、ゾーン管理者はネイティブゾーンでそのボリュームのプロパティーやデータを管理したり、スナップショットを作成したりできます。

  • 大域ゾーンまたはカーネルゾーンで zonecfg add device コマンドを使用して、ネイティブゾーンでアクセスできるデータを含んだ ZFS ボリュームを指定します。例:

    global$ zonecfg -z zion
    zonecfg:zion> add device
    zonecfg:zion:device> set match=/dev/zvol/dsk/system1/volumes/vol2
    zonecfg:zion:device> end

    この例では、ネイティブゾーンでボリュームデータにのみアクセスできます。

ZFS ストレージプールをゾーンで使用する

ZFS ストレージプールをネイティブゾーンの内部で作成または変更することはできません。委任管理モデルを使用することで、大域ゾーンまたはカーネルゾーン内の物理ストレージデバイスの制御と仮想ストレージの制御をすべてネイティブゾーンで行うことができます。プールレベルのデータセットをネイティブゾーンに追加することはできますが、デバイスを作成したり、追加したり、削除したりするなど、プールの物理特性を変更するコマンドはネイティブゾーンの内部から実行することはできません。zonecfg add device コマンドを使用して物理デバイスをネイティブゾーンに追加する場合でも、ファイルを使用する場合でも、zpool コマンドを使用してネイティブゾーンの内部に新しいプールを作成することはできません。

データストレージ管理の点から言えば、カーネルゾーンの方が強力で高い柔軟性を備えています。大域ゾーンのように、デバイスおよびボリュームをカーネルゾーンに委任できます。また、ZFS ストレージプールをカーネルゾーンの内部で作成できます。

ZFS プロパティーをゾーンで管理する

データセットをゾーンに委任したあとで、ゾーン管理者は特定のデータセットプロパティーを制御できます。データセットがゾーンに委任されると、そのすべての祖先は読み取り専用データセットとして表示されます。ただし、データセット自体およびそのすべての子孫は書き込み可能です。たとえば、次のような構成を考えてみます。

global$ zfs list -Ho name
system1
system1/home
system1/data
system1/data/matrix
system1/data/zion
system1/data/zion/home

system1/data/zion がデフォルト zion エイリアスでゾーンに追加された場合には、各データセットのプロパティーは次のようになります。

データセット
表示可能
書き込み可能
不変のプロパティー
system1
いいえ
-
-
system1/home
いいえ
-
-
system1/data
いいえ
-
-
system1/data/zion
はい
はい
zoned、quota、reservation
system1/data/zion/home
はい
はい
zoned

system1/zone/zion のすべての親は表示できず、すべての子孫は書き込み可能です。zoned プロパティーを変更すると、次のセクションで説明するセキュリティーリスクにさらされるため、ゾーン管理者はこのプロパティーを変更できません。

ゾーンの特権ユーザーは、その他の設定可能なプロパティーはすべて変更できます。ただし、quota プロパティーと reservation プロパティーは除きます。大域ゾーン管理者は、この動作を利用して、ネイティブゾーンで使用されるすべてのデータセットが使用するディスク容量を制御できます。

また、データセットをネイティブゾーンに委任したあとに、大域ゾーン管理者が share.nfs および mountpoint プロパティーを変更することもできません。

zoned プロパティーについて

データセットがネイティブゾーンに委任されると、特定のプロパティーが大域ゾーンまたはカーネルゾーンのコンテキスト内で解釈されないようにするために、データセットを特別にマーク付けする必要があります。データセットがネイティブゾーンに委任され、ゾーン管理者の制御下に入ると、その内容は信頼できる状態ではなくなります。すべてのファイルシステムと同様に、大域ゾーンまたはカーネルゾーンのセキュリティーに悪影響を与える可能性のある setuid バイナリ、シンボリックリンク、またはそれ以外の疑わしい内容が存在する場合があります。また、mountpoint プロパティーは、大域ゾーンまたはカーネルゾーンのコンテキストでは解釈できません。それ以外に、ゾーン管理者が大域ゾーンまたはカーネルゾーンの名前空間に影響を及ぼす可能性もあります。後者に対応するために、ZFS は、zoned プロパティーを使用して、データセットがある時点でネイティブゾーンに委任されたことを示します。

zoned プロパティーはブール値で、ZFS データセットを含むゾーンが最初にブートするときに自動的にオンに設定されます。ゾーン管理者が、このプロパティーを手動で設定する必要はありません。zoned プロパティーを設定した場合、そのデータセットを大域ゾーンまたはカーネルゾーンでマウントしたり共有したりすることはできません。次の例では、system1/zone/zion はゾーンに委任されていますが、system1/zone/global は追加されていません。

$ zfs list -o name,zoned,mountpoint -r system1/zone
NAME                  ZONED   MOUNTPOINT              MOUNTED
system1/zone/global     off   /system1/zone/global        yes
system1/zone/zion        on   /system1/zone/zion          yes
$ zfs mount
system1/zone/global           /system1/zone/global
system1/zone/zion             /export/zone/zion/root/system1/zone/zion


root@kzx-05:~# zonecfg -z sol info dataset                                                
dataset:
    name: rpool/foo
    alias: foo
root@kzx-05:~# zfs list -o name,zoned,mountpoint,mounted -r rpool/foo                     
NAME       ZONED  MOUNTPOINT                  MOUNTED
rpool/foo     on  /system/zones/sol/root/foo      yes
root@kzx-05:~# zfs mount | grep /foo                                                      
rpool/foo                       /system/zones/sol/root/foo

データセットがゾーンから削除されたり、ゾーンが破棄されたりした場合でも、zoned プロパティーが自動的にクリアされることはありません。この動作により、これらのタスクに関連する固有のセキュリティーリスクが回避されます。信頼されないユーザーがデータセットやその子孫への完全なアクセス権を持っているため、mountpoint プロパティーが不正な値に設定されたり、ファイルシステム上に setuid バイナリが存在したりする可能性があります。

意図しないセキュリティー上の危険を防ぐために、データセットをなんらかの方法で再利用する場合には、大域ゾーン管理者が zoned プロパティーを手動でクリアする必要があります。zoned プロパティーを off に設定する前に、データセットおよびそのすべての子孫の mountpoint プロパティーが適切な値に設定されていること、および setuid バイナリが存在しないことを確認するか、または setuid プロパティーを無効に設定します。

セキュリティーが脆弱なままでないことを確認したあとで、zfs set または zfs inherit コマンドを使用して zoned プロパティーをオフに設定できます。データセットがゾーンで使用されているときに zoned プロパティーをオフに設定すると、システムが予期しない動作をする可能性があります。このプロパティーを変更することは、データセットがネイティブゾーンで使用されていないことを確認した場合にのみ行なってください。

ほかのシステムにゾーンをコピーする

1 つ以上のゾーンを別のシステムに移行する必要がある場合は、オペレーティングシステム内のすべてのクローニングおよび回復操作を管理し、大域ゾーン、ネイティブゾーン、およびカーネルゾーンで動作する Oracle Solaris 統合アーカイブを使用します。統合アーカイブの詳細は、Oracle Solaris 12 でのシステム復旧とクローンを参照してください。ほかのシステムへのゾーンのコピーなどのゾーンの移行に関する手順については、Creating and Using Oracle Solaris Zones の 第 10 章, Transforming Systems to Oracle Solaris Zonesを参照してください。

あるシステム上のすべてのゾーンを別のシステム上の別の ZFS プールに移動する必要がある場合は、スナップショットやクローンが保持されるという理由から、レプリケーションストリームの使用を検討してください。スナップショットとクローンは、pkg updatebeadm create、および zoneadm clone コマンドで幅広く使用されます。

次の例では、sysA のゾーンが rpool/zones ファイルシステムにインストールされており、それらを sysB 上の newpool/zones ファイルシステムにコピーする必要があります。次のコマンドは、スナップショットを作成し、複製ストリームを使用してデータを sysB にコピーします。

sysA$ zfs snapshot -r rpool/zones@send-to-sysB
sysA$ zfs send -R rpool/zones@send-to-sysB | ssh sysB zfs receive -d newpool

注 -  これらのコマンドは、操作の ZFS の側面のみを示しています。このタスクを完了するには、ゾーン関連のほかのコマンドを実行する必要があります。具体的な情報は、Creating and Using Oracle Solaris Zones の 第 10 章, Transforming Systems to Oracle Solaris Zonesを参照してください。