Solaris ZFS 管理ガイド
  Procure somente este livro
Fazer download desta apostila em PDF (2012 KB)

第 10 章 ZFS のその他のトピック

この章では、ZFS ボリューム、ゾーンがインストールされた Solaris システムで ZFS を使用する方法、ZFS 代替ルートプール、および ZFS 権利プロファイルについて説明します。

この章は、次の節で構成されます。

ZFS ボリューム

ZFS ボリュームとは、ブロックデバイスを表すデータセットです。ZFS ボリュームは、/dev/zvol/{dsk,rdsk}/path ディレクトリのデバイスとして識別されます。

次の例では、5G バイトの ZFS ボリューム tank/vol が作成されます。


# zfs create -V 5gb tank/vol

ボリュームを作成すると、そのボリュームの初期サイズの予約が自動的に設定されます。予約されるサイズは、予期しない動作が発生しないように、ボリュームのサイズと等しくなるように継続的に調整されます。たとえば、ボリュームのサイズを縮小すると、データが破壊される可能性があります。ボリュームのサイズを変更するときは、注意深く行う必要があります。

また、サイズが変化するボリュームのスナップショットを作成する場合は、スナップショットをロールバックしたり、スナップショットからのクローンを作成しようとすると、ファイルシステムの不一致が発生する可能性があります。

ボリュームに適用可能なファイルシステムプロパティーについては、表 6–1 を参照してください。

ゾーンがインストールされた Solaris システムを使用している場合は、非大域ゾーンの中で ZFS ボリュームを作成または複製することはできません。非大域ゾーンからボリュームを作成または複製しようとすると、すべて失敗します。ZFS ボリュームを大域ゾーンで使用する方法については、「ZFS ボリュームを非大域ゾーンに追加する」を参照してください。

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

ZFS ルートファイルシステムをインストールするとき、または UFS ルートファイルシステムから移行するときに、ZFS ルートプールの ZFS ボリュームにスワップデバイスが作成されます。次に例を示します。


# swap -l
swapfile                  dev    swaplo   blocks     free
/dev/zvol/dsk/rpool/swap 253,3        16  8257520  8257520

ZFS ルートファイルシステムをインストールするとき、または UFS ルートファイルシステムから移行するときに、ZFS ルートプールの ZFS ボリュームにダンプデバイスが作成されます。ダンプデバイスを設定したあとは、ダンプデバイスの管理は不要です。次に例を示します。


# dumpadm
      Dump content: kernel pages
       Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/t2000
  Savecore enabled: yes

CR 6724860 のため、ZFS ダンプボリュームを使用している場合は、クラッシュダンプを保存するには savecore を手動で実行する必要があります。

システムのインストール後またはアップグレード後にスワップ領域やダンプデバイスを変更する必要がある場合は、以前の Solaris 10 リリースと同様に swap コマンドと dumpadm コマンドを使用します。追加のスワップ領域を設定する必要がある場合は、特定のサイズの ZFS ボリュームを作成してから、そのデバイスでスワップを有効にします。次に例を示します。


# zfs create -V 2G rpool/swap2
# swap -a /dev/zvol/dsk/rpool/swap2
# swap -l
swapfile                   dev  swaplo blocks   free
/dev/zvol/dsk/rpool/swap  256,1      16 2097136 2097136
/dev/zvol/dsk/rpool/swap2 256,5      16 4194288 4194288

ZFS ファイルシステム上のファイルには、スワップしないでください。ZFS スワップファイルの構成はサポートされていません。

スワップボリュームとダンプボリュームのサイズの調整については、「ZFS スワップデバイスおよびダンプデバイスのサイズを調整する」を参照してください。

ZFS ボリュームを Solaris iSCSI ターゲットとして使用する

この Solaris リリースでは、Solaris iSCSI ターゲットおよびイニシエータがサポートされています。

また、ボリュームに shareiscsi プロパティーを設定すれば、簡単に ZFS ボリュームを iSCSI ターゲットとして作成できます。次に例を示します。


# zfs create -V 2g tank/volumes/v2
# zfs set shareiscsi=on tank/volumes/v2
# iscsitadm list target
Target: tank/volumes/v2
    iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
    Connections: 0

iSCSI ターゲットが作成されたら、iSCSI イニシエータを設定します。Solaris iSCSI ターゲットおよびイニシエータの詳細については、『Solaris のシステム管理 (デバイスとファイルシステム)』の第 14 章「Solaris iSCSI ターゲットおよびイニシエータの構成 (手順)」を参照してください。


注 –

また、Solaris iSCSI ターゲットは、iscsitadm コマンドを使って作成および管理することもできます。ZFS ボリュームに shareiscsi プロパティーを設定した場合は、iscsitadm コマンドを使用して同じターゲットデバイスをまた作成しないでください。同じデバイスのターゲット情報が重複して作成されてしまうためです。


iSCSI ターゲットとしての ZFS ボリュームは、ほかの ZFS データセットとまったく同じように管理されます。ただし、iSCSI ターゲットでは、名前の変更、エクスポート、およびインポートの操作が少し異なります。

  • ZFS ボリュームの名前を変更しても、iSCSI ターゲットの名前は変わりません。次に例を示します。


    # zfs rename tank/volumes/v2 tank/volumes/v1
    # iscsitadm list target
    Target: tank/volumes/v1
        iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
        Connections: 0
  • 共有 ZFS ボリュームが含まれるプールをエクスポートすると、ターゲットが削除されます。共有 ZFS ボリュームが含まれるプールをインポートすると、ターゲットが共有されます。次に例を示します。


    # zpool export tank
    # iscsitadm list target
    # zpool import tank
    # iscsitadm list target
    Target: tank/volumes/v1
        iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-cc80-cf9a72aa062a
        Connections: 0

iSCSI ターゲットの構成情報はすべてデータセット内に格納されます。NFS 共有ファイルシステムと同様に、別のシステム上にインポートされる iSCSI ターゲットは正しく共有されます。

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

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

ZFS ルートファイルシステムがインストールされたシステムにゾーンを構成し、Solaris Live Upgrade で移行やパッチの適用を行う方法については、「ゾーンが含まれているシステムを Solaris Live Upgrade で移行またはアップグレードする (Solaris 10 10/08)」または「ゾーンが含まれているシステムを Solaris Live Upgrade で移行またはアップグレードする (Solaris 10 5/09 および Solaris 10 10/09)」を参照してください。

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

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

  • ZFS ボリュームをデバイスとして非大域ゾーンに追加できます。

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

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

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

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

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

  • 非大域ゾーンに追加する ZFS ファイルシステムは、mountpoint プロパティーを legacy に設定する必要があります。

  • CR 6449301 のため、非大域ゾーンが構成されている場合は、非大域ゾーンに ZFS データセットを追加しないでください。代わりに、ゾーンのインストール後に ZFS データセットを追加してください。

  • ソース zonepath とターゲット zonepath がどちらも ZFS 上に存在し、同じプール内にある場合、zoneadm clone は自動的に ZFS クローンを使ってゾーンを複製するようになりました。zoneadm clone コマンドは、ソース zonepath の ZFS スナップショットを取得して、ターゲット zonepath を設定します。zfs clone コマンドを使用してゾーンを複製することはできません。詳細は、『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』のパート II「ゾーン」を参照してください。

  • ZFS ファイルシステムを非大域ゾーンに委任する場合は、Solaris Live Upgrade を使用する前にそのファイルシステムを該当の非大域ゾーンから削除する必要があります。削除しないと、読み取り専用ファイルシステムエラーのため、Live Upgrade 操作が失敗します。

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

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

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=/export/shared
zonecfg:zion:fs> end

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

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

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

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

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


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

ファイルシステムを追加する場合と異なり、この構文を実行すると、ZFS ファイルシステム tank/zone/zion がすでに構成済みの zion ゾーンから見えるようになります。ゾーン管理者は、ファイルシステムのプロパティーを設定し、子を作成することができます。また、ゾーン管理者は、スナップショットを作成し、クローンを作成し、およびファイルシステム階層全体を制御することができます。

Solaris Live Upgrade を使用して非大域ゾーンを含む ZFS BE をアップグレードする場合は、Live Upgrade 操作の前にあらゆる委任データセットを削除してください。削除しないと、読み取り専用ファイルシステムエラーのため、Upgrade 操作が失敗します。次に例を示します。


zonecfg:zion>
zonecfg:zone1> remove dataset name=tank/zone/zion
zonecfg:zone1> exit

ゾーンでどのような操作が許可されるかの詳細については、「ZFS プロパティーをゾーンで管理する」を参照してください。

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

zonecfg コマンドの add dataset サブコマンドを使用して、ZFS ボリュームを非大域ゾーンに追加することはできません。ZFS ボリュームを追加しようとしていることが検出されると、ゾーンは起動できません。ただし、zonecfg コマンドの add device サブコマンドを使って、ボリュームをゾーンに追加することはできます。

次の例では、大域ゾーンの大域管理者が ZFS ボリュームを非大域ゾーンに追加しています。


# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add device
zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol
zonecfg:zion:device> end

この構文では、tank/vol ボリュームがゾーンにエクスポートされます。raw ボリュームをゾーンに追加する操作は、そのボリュームが物理ディスクに対応していない場合でも、潜在的なセキュリティー上の危険を伴います。特に、ゾーン管理者が作成したファイルシステムの形式が正しくない場合には、マウントしようとするときにファイルシステムでパニックが発生します。デバイスをゾーンに追加することおよびそれに関連するセキュリティー上の危険の詳細については、zoned プロパティーについて」を参照してください。

デバイスをゾーンに追加する方法の詳細については、『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』のパート II「ゾーン」を参照してください。

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 をゾーンに追加した場合には、各データセットのプロパティーは次のようになります。

データセット 

表示可能 

書き込み可能 

不変のプロパティー 

tank

はい 

いいえ 

tank/home

いいえ 

tank/data

はい 

いいえ 

tank/data/matrix

いいえ 

tank/data/zion

はい 

はい 

sharenfszonedquota reservation

tank/data/zion/home

はい 

はい 

sharenfszoned

tank/zone/zion のすべての親は読み取り専用として表示され、すべての子は書き込み可能になり、親階層に含まれないデータセットは完全に非表示になります。非大域ゾーンは NFS サーバーとして動作できないため、ゾーン管理者が sharenfs プロパティーを変更することはできません。また、次の節で説明するように、zoned プロパティーを変更するとセキュリティー上の危険にさらされるため、ゾーン管理者はこの操作を行うこともできません。

quota プロパティーとデータセット自体を除いて、ほかの設定可能なプロパティーはすべて変更できます。大域ゾーン管理者は、この動作を利用して、非大域ゾーンで使用されるすべてのデータセットが使用する容量を制御できます。

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

zoned プロパティーについて

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

zoned プロパティーはブール値で、ZFS データセットを含むゾーンが最初に起動するときに自動的にオンに設定されます。ゾーン管理者が、このプロパティーを手動でオンに設定する必要はありません。zoned プロパティーが設定されている場合には、そのデータセットを大域ゾーンでマウントまたは共有することはできません。また、zfs share -a コマンドまたは zfs mount -a コマンドを実行するときに、このデータセットは無視されます。次の例では、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 プロパティーをオフに設定すると、システムが予期しない動作をする可能性があります。このプロパティーを変更するのは、データセットが非大域ゾーンで使用されていないことを確認した場合にのみ行なってください。

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

プールが作成されると、そのプールはデフォルトでホストシステムに関連付けられます。ホストシステムでは、プールに関する情報を管理しているので、プールが使用できなくなったときにそのことを自動的に検出することができます。この情報は、通常の操作では有効な情報ですが、代替メディアから起動するときまたはリムーバブルメディアにプールを作成するときには障害になることがあります。この問題を解決するために、ZFS には「代替ルート」プール機能が用意されています。代替ルートプールは、システムの再起動後には有効でなくなり、すべてのマウントポイントはプールのルートへの相対パスに変更されます。

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

代替ルートプールの作成は、リムーバブルメディアを使用するときによく行われます。このような場合には、必要なファイルシステムは通常 1 つだけなので、ターゲットシステムでユーザーが選択した場所にマウントする必要があります。-R オプションを使用して代替ルートプールを作成すると、ルートファイルシステムのマウントポイントは代替ルートと同じ / に自動的に設定されます。

次の例では、morpheus という名前のプールが 代替ルートパスとしての /mnt に作成されます。


# zpool create -R /mnt morpheus c0t0d0
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt/

ファイルシステムが 1 つだけで (morpheus)、そのマウントポイントがプールの代替ルート /mnt であることに注意してください。ディスクに格納されているマウントポイントは、実際に / になっています。/mnt のフルパスは、代替ルートプールのコンテキストでのみ解釈されます。このファイルシステムをエクスポートすれば、別のシステムの任意の代替ルートプールにインポートすることができます。

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

代替ルートを使って、プールをインポートすることもできます。この機能は、回復を行う状況で利用できます。つまり、マウントポイントを現在のルートのコンテキストではなく、修復を実行できるように一時的なディレクトリとして解釈するような状況で利用できます。すでに説明したように、この機能はリムーバブルメディアをマウントするときにも使用できます。

次の例では、morpheus という名前のプールが代替ルートパスとしての /mnt にインポートされます。この例では、morpheus がすでにエクスポート済みであることを前提としています。


# zpool import -R /mnt morpheus
# zpool list morpheus
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
morpheus               33.8G   68.0K   33.7G     0%  ONLINE     /mnt
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt/morpheus

ZFS 権利プロファイル

スーパーユーザー (root) アカウントを使用しないで ZFS 管理タスクを実行する必要がある場合は、次のいずれかのプロファイルが割り当てられた役割引き受けて ZFS 管理タスクを実行できます。

  • ZFS ストレージ管理 – ZFS ストレージプール内でデバイスを作成、破棄、および操作できます

  • ZFS ファイルシステム管理 – ZFS ファイルシステムを作成、破棄、および変更できます

役割の作成または割り当ての詳細については、『Solaris のシステム管理 (セキュリティサービス)』を参照してください。

RBAC の役割を使用して ZFS ファイルシステムを管理するほかに、ZFS 委任管理を使用して ZFS 管理タスクを分散することも検討できます。詳細は、第 9 章ZFS 委任管理を参照してください。