JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 の管理: ZFS ファイルシステム     Oracle Solaris 11.1 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  Oracle Solaris ZFS ファイルシステム (概要)

2.  Oracle Solaris ZFS 入門

3.  Oracle Solaris ZFS ストレージプールの管理

4.  ZFS ルートプールのコンポーネントの管理

5.  Oracle Solaris ZFS ファイルシステムの管理

6.  Oracle Solaris ZFS のスナップショットとクローンの操作

7.  ACL および属性を使用した Oracle Solaris ZFS ファイルの保護

8.  Oracle Solaris ZFS 委任管理

9.  Oracle Solaris ZFS の高度なトピック

ZFS ボリューム

ZFS ボリュームをスワップデバイスまたはダンプデバイスとして使用する

iSCSI LUN として ZFS ボリュームを使用する

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

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

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

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

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

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

zoned プロパティーについて

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

ZFS 代替ルートプールを使用する

ZFS 代替ルートプールを作成する

代替ルートプールをインポートする

10.  Oracle Solaris ZFS のトラブルシューティングとプールの回復

11.  スナップショットのアーカイブとルートプールの回復

12.  推奨の Oracle Solaris ZFS プラクティス

A.  Oracle Solaris ZFS バージョンの説明

索引

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

以降のセクションでは、Oracle Solaris ゾーンを備えたシステムで ZFS を使用する方法について説明します。

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

以降のセクションでは、ZFS データセットはファイルシステムまたはクローンを指します。

データセットを追加すると、非大域ゾーンは大域ゾーンとディスク領域を共有できます。ただし、ゾーン管理者は、配下のファイルシステム階層でプロパティーを制御したり、新しいファイルシステムを作成したりすることはできません。この動作は、ほかの種類のファイルシステムをゾーンに追加する場合と同じであり、共通のディスク領域を共有することが目的の場合にのみ使用してください。

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

Oracle Solaris ゾーンがインストールされたシステム上で ZFS を操作する場合には、次の点を考慮してください。

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

大域ゾーンと領域を共有する必要がある場合は、ZFS ファイルシステムを汎用のファイルシステムとして追加して、その目的のためだけに使用できます。 非大域ゾーンに追加する ZFS ファイルシステムでは、mountpoint プロパティーを legacy に設定する必要があります。たとえば、tank/zone/zion ファイルシステムを非大域ゾーンに追加する場合、大域ゾーンの mountpoint プロパティーを次のように設定します。

# zfs set mountpoint=legacy tank/zone/zion

zonecfg コマンドの add fs サブコマンドを使用することで、ZFS ファイルシステムを非大域ゾーンに追加できます。

次の例では、大域ゾーンの大域ゾーン管理者が、ZFS ファイルシステムを非大域ゾーンに追加しています。

# zonecfg -z zion
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=tank/zone/zion
zonecfg:zion:fs> set dir=/opt/data
zonecfg:zion:fs> end

この構文では、ZFS ファイルシステム tank/zone/zion がすでに構成済みの zion ゾーンに追加され、/opt/data にマウントされます。ファイルシステムの mountpoint プロパティーは、legacy に設定する必要があります。別の場所にすでにマウントされているファイルシステムは追加できません。ゾーン管理者は、ファイルシステム内でファイルを作成および破棄することができます。ファイルシステムを別の場所に再マウントすることはできません。また、ゾーン管理者がファイルシステムのプロパティー (atimereadonlycompression など) を変更することもできません。大域ゾーン管理者は、ファイルシステムのプロパティーの設定および制御を担当します。

zonecfg コマンドの詳細と、zonecfg を使用したリソースタイプの構成方法については、『Oracle Solaris のシステム管理 (Oracle Solaris ゾーン、Oracle Solaris 10 ゾーン、およびリソース管理)』のパート II「Oracle Solaris ゾーン」を参照してください。

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

ストレージの管理をゾーンに委任するという主要目的を果たせるよう、ZFS では、zonecfg コマンドの add dataset サブコマンドを使用してデータセットを非大域ゾーンに追加することができます。

次の例では、大域ゾーンの大域ゾーン管理者が、ZFS ファイルシステムを非大域ゾーンに委任しています。

# zonecfg -z zion
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=tank/zone/zion
zonecfg:zion:dataset> set alias=tank
zonecfg:zion:dataset> end

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

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

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

次のようにして、非大域ゾーンで ZFS ボリュームを追加または作成したり、非大域ゾーン内のボリュームのデータへのアクセスを追加したりできます。

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

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

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

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

global# zfs list -Ho name
tank
tank/home
tank/data
tank/data/matrix
tank/data/zion
tank/data/zion/home

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

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

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

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

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

zoned プロパティーについて

データセットを非大域ゾーンに委任するときに、特定のプロパティーが大域ゾーンのコンテキストで解釈されないように、データセットに特別な設定を行う必要があります。データセットが非大域ゾーンに委任され、ゾーン管理者の制御下に入ると、その内容は信頼できる状態ではなくなります。どのファイルシステムにも該当することですが、setuid バイナリやシンボリックリンクなどの安全性に問題のある内容が含まれていることがあります。これらは、大域ゾーンのセキュリティーに悪影響を及ぼす可能性があります。また、mountpoint プロパティーは、大域ゾーンのコンテキストでは解釈できません。それ以外に、ゾーン管理者が大域ゾーンの名前空間に影響を及ぼす可能性もあります。後者の問題に対処するために、ZFS では zoned プロパティーを使って、データセットがある時点で非大域ゾーンに委任されていることを示しています。

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

# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion

mountpoint プロパティーと、tank/zone/zion データセットが現在マウントされているディレクトリとが異なっていることに注意してください。mountpoint プロパティーには、データセットがシステム上で現在マウントされている場所ではなく、ディスクに格納されているプロパティーが反映されます。

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

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

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

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

1 つ以上のゾーンを別のシステムに移行する必要がある場合、zfs send コマンドと zfs receive コマンドを使用することを検討してください。状況によっては、複製ストリームや再帰的ストリームを使用する方法が最適な場合もあります。

このセクションの例では、ゾーンデータをシステム間でコピーする方法について説明します。ゾーンの構成を転送し、各ゾーンを新しいシステムに接続するには、追加手順が必要になります。詳細は、『Oracle Solaris 11.1 の管理: Oracle Solaris ゾーン、Oracle Solaris 10 ゾーン、およびリソース管理』のパート II「Oracle Solaris ゾーン」を参照してください。

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

次の例では、sysA のゾーンが rpool/zones ファイルシステムにインストールされており、sys 上の tank/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 tank

次の例では、複数のゾーンのうち 1 つが sysC から sysD にコピーされます。ssh コマンドは使用できませんが、NFS サーバーインスタンスは使用できるものとします。次のコマンドを使用すると、ゾーンが別のゾーンのクローンであるかどうかを気にせずに、zfs send 再帰的ストリームを生成できます。

sysC# zfs snapshot -r rpool/zones/zone1@send-to-nfs
sysC# zfs send -rc rpool/zones/zone1@send-to-nfs > /net/nfssrv/export/scratch/zone1.zfs
sysD# zfs create tank/zones
sysD# zfs receive -d tank/zones < /net/nfssrv/export/scratch/zone1.zfs