Oracle Solaris 11.1 リリースでは、ZFS プロパティーの継承を活用することで、ZFS 共有の管理を簡素化しています。プールバージョン 34 が動作しているプールで新しい共有構文が有効になっています。
次に示すのは、NFS および SMB のファイルシステムパッケージです。
NFS クライアントおよびサーバーパッケージ
service/file-system/nfs (サーバー)
service/file-system/nfs (クライアント)
その他の NFS 構成情報については、Oracle Solaris 12 でのネットワークファイルシステムの管理を参照してください。
SMB クライアントおよびサーバーパッケージ
service/file-system/smb (サーバー)
service/file-system/smb (クライアント)
SMB パスワード管理を含む、その他の SMB 構成情報については、Managing SMB File Sharing and Windows Interoperability in Oracle Solaris 11.4 の Managing SMB Mounts in Your Local Environmentを参照してください。
ファイルシステムごとに複数の共有を定義できます。共有名は、各共有を一意に識別します。ファイルシステム内の特定のパスを共有するために使用されるプロパティーを定義できます。デフォルトでは、すべてのファイルシステムが共有されません。通常、共有が作成されるまで、NFS サーバーサービスは開始されません。有効な共有が作成されると、NFS サービスは自動的に開始されます。ZFS ファイルシステムの mountpoint プロパティーが legacy に設定されている場合、レガシー share コマンドを使用することによってのみファイルシステムを共有できます。
share.nfs プロパティーは、以前のリリースの sharenfs プロパティーを置き換えて、NFS 共有を定義および公開します。
share.smb プロパティーは、以前のリリースの sharesmb プロパティーを置き換えて、SMB 共有を定義および公開します。
sharenfs プロパティーと sharesmb プロパティーは、どちらもshare.nfs プロパティーと sharenfs プロパティーの別名です。
ブート時のファイルシステムの共有に /etc/dfs/dfstab ファイルは使用されなくなりました。これらのプロパティーを設定すると、ファイルシステムが自動的に共有されます。システムのリブート時にファイルシステムが自動的に共有されるように、SMF は ZFS または UFS 共有情報を管理します。この機能は、sharenfs または sharesmb プロパティーが off に設定されていないすべてのファイルシステムがブート時に共有されることを意味します。
sharemgr インタフェースは使用できなくなりました。レガシー share コマンドは、レガシー共有の作成に引き続き使用できます。次の例を参照してください。
share –a コマンドは、以前の share –ap コマンドに似ており、ファイルシステムの共有は永続的です。share –p オプションは使用できなくなりました。
たとえば、tank/home ファイルシステムを共有する場合は、次のような構文を使用します。
$ zfs set share.nfs=on tank/home
前の例では、tank/home ファイルシステムに対して share.nfs プロパティーが on に設定されており、share.nfs プロパティー値はすべての子孫ファイルシステムに継承されます。例:
$ zfs create tank/home/userA $ zfs create tank/home/userB
追加のプロパティー値を指定したり、既存のファイルシステム共有の既存のプロパティー値を変更したりすることもできます。例:
$ zfs set share.nfs.nosuid=on tank/home/userA $ zfs set share.nfs=on tank/home/userA
機密コンテンツを保護するために、企業はファイルおよびファイルシステムにラベルを付けることができます。ラベル付きファイルシステムによって、暗号化やアクセス制御などのより厳密なセキュリティー要件を強制できます。
Oracle Solaris 11.4 はデフォルトで、ラベル付き NFS ファイルの共有を禁止しています。share.nfs.labeled プロパティーを通じてこれらのファイルに共有アクセス権を付与できます。ZFS 共有プロパティー値を変更するの例を参照してください。
ラベル付きファイルシステムについては、次のリソースを参照してください。
Oracle Solaris 12 でのファイルのセキュリティー保護とファイル整合性の検証 の 第 2 章, データ損失保護のためのファイルのラベル付け
Managing Network File Systems in Oracle Solaris 11.4 の Sharing a Labeled File System
Oracle Solaris 11 の構文は引き続きサポートされているため、2 つのステップでファイルシステムを共有できます。この構文は、すべてのプールバージョンでサポートされています。
まず、zfs set share コマンドを使用して ZFS ファイルシステムの NFS または SMB 共有を作成します。
$ zfs create rpool/fs1 $ zfs set share=name=fs1,path=/rpool/fs1,prot=nfs rpool/fs1 name=fs1,path=/rpool/fs1,prot=nfs
次に、sharenfs または sharesmb プロパティーを on に設定して共有を公開します。例:
$ zfs set sharenfs=on rpool/fs1 $ grep fs1 /etc/dfs/sharetab /rpool/fs1 fs1 nfs sec=sys,rw
ファイルシステム共有は、レガシー zfs get share コマンドを使用して表示できます。
$ zfs get share rpool/fs1 NAME PROPERTY VALUE SOURCE rpool/fs1 share name=fs1,path=/rpool/fs1,prot=nfs local
また、ファイルシステムを共有するための share コマンドは、Oracle Solaris 10 リリースの構文と同様に、ファイルシステム内のディレクトリを共有するためにも引き続きサポートされています。たとえば、ZFS ファイルシステムを共有するには、次のように行います。
$ share -F nfs /tank/zfsfs $ grep zfsfs /etc/dfs/sharetab /tank/zfsfs tank_zfsfs nfs sec=sys,rw
上の構文は UFS ファイルシステムの共有と同じです。
$ share -F nfs /ufsfs $ grep ufsfs /etc/dfs/sharetab /ufsfs - nfs rw /tank/zfsfs tank_zfsfs nfs rw
zfs set コマンドは、NFS または SMB プロトコルを介して ZFS ファイルシステムを共有および公開するために使用します。あるいは、ファイルシステムの作成時に share.nfs または share.smb プロパティーを設定することもできます。
たとえば、tank/sales ファイルシステムを作成および共有します。デフォルトの共有アクセス権は、全員に対する読み取り/書き込みです。share.nfs プロパティーは子孫のファイルシステムに継承されるため、子孫の tank/sales/logs ファイルシステムも自動的に共有され、tank/sales/log ファイルシステムは読み取り専用アクセスに設定されます。
$ zfs create -o share.nfs=on tank/sales $ zfs create -o share.nfs.ro=\* tank/sales/logs $ zfs get -r share.nfs tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs on local tank/sales% share.nfs on inherited from tank/sales tank/sales/log share.nfs on inherited from tank/sales tank/sales/log% share.nfs on inherited from tank/sales
次のように、共有ファイルシステムの特定のシステムにルートアクセスすることができます。
$ zfs set share.nfs=on tank/home/data $ zfs set share.nfs.sec.default.root=neo.daleks.com tank/home/data
最新のプールバージョン 34 にアップグレードされているプールでは、ZFS プロパティーの継承を使用して共有の維持を容易にする新しい共有構文を使用できます。各共有特性は、別々の share プロパティーになります。それらの share プロパティーは、share. 接頭辞で始まる名前によって識別されます。share プロパティーの例には、share.desc、share.nfs.nosuid、および share.smb.guestok などがあります。
share.nfs プロパティーは NFS 共有が有効であるかどうかを制御します。share.smb プロパティーは SMB 共有が有効であるかどうかを制御します。新しいプールでは、sharenfs は share.nfs の別名であり、sharesmb は share.smb の別名であるため、レガシー sharenfs および sharesmb プロパティー名は引き続き使用できます。tank/home ファイルシステムを共有する場合、次のような構文を使用します。
$ zfs set share.nfs=on tank/home
この例では、share.nfs プロパティー値はすべての子孫ファイルシステムに継承されます。例:
$ zfs create tank/home/userA $ zfs create tank/home/userB $ grep tank/home /etc/dfs/sharetab /tank/home tank_home nfs sec=sys,rw /tank/home/userA tank_home_userA nfs sec=sys,rw /tank/home/userB tank_home_userB nfs sec=sys,rw
古いプールでは、sharenfs および sharesmb プロパティーのみが子孫ファイルシステムによって継承されます。他の共有特性は、共有ごとに .zfs/shares ファイルに格納され、継承されません。
特別な規則は、sharenfs または sharesmb を親から継承する新しいファイルシステムを作成したときは必ず、sharenfs または sharesmb 値からそのファイルシステムのデフォルトの共有が作成されるというものです。sharenfs が単に on のときは、子孫ファイルシステムで作成されるデフォルトの共有にはデフォルトの NFS 特性のみが含まれることに注意してください。例:
$ zpool get version tank NAME PROPERTY VALUE SOURCE tank version 33 default $ zfs create -o sharenfs=on tank/home $ zfs create tank/home/userA $ grep tank/home /etc/dfs/sharetab /tank/home tank_home nfs sec=sys,rw /tank/home/userA tank_home_userA nfs sec=sys,r
名前付き共有を作成することもできます。これにより、SMB 環境でアクセス権およびプロパティーを設定する際の柔軟性が向上します。例:
$ zfs share -o share.smb=on tank/workspace%myshare
前の例では、zfs share コマンドによって、tank/workspace ファイルシステムの myshare という SMB 共有が作成されます。このファイルシステムの .zfs/shares ディレクトリを介して SMB 共有にアクセスしたり、特定のアクセス権や ACL を表示または設定したりできます。各 SMB 共有は、個別の .zfs/shares ファイルで表されます。例:
$ ls -lv /tank/workspace/.zfs/shares -rwxrwxrwx+ 1 root root 0 May 15 10:31 myshare 0:everyone@:read_data/write_data/append_data/read_xattr/write_xattr /execute/delete_child/read_attributes/write_attributes/delete /read_acl/write_acl/write_owner/synchronize:allow
名前付き共有は親ファイルシステムから共有プロパティーを継承します。前の例で share.smb.guestok プロパティーを親ファイルシステムに追加した場合、このプロパティーは名前付き共有に継承されます。例:
$ zfs get -r share.smb.guestok tank/workspace NAME PROPERTY VALUE SOURCE tank/workspace share.smb.guestok on inherited from tank tank/workspace%myshare share.smb.guestok on inherited from tank
名前付き共有は、NFS 環境でファイルシステムのサブディレクトリに対して共有を定義するときに役立つことがあります。例:
$ zfs create -o share.nfs=on -o share.nfs.anon=99 -o share.auto=off tank/home $ mkdir /tank/home/userA $ mkdir /tank/home/userB $ zfs share -o share.path=/tank/home/userA tank/home%userA $ zfs share -o share.path=/tank/home/userB tank/home%userB $ grep tank/home /etc/dfs/sharetab /tank/home/userA userA nfs anon=99,sec=sys,rw /tank/home/userB userB nfs anon=99,sec=sys,rw
上記の例は、ファイルシステムの share.auto を off に設定すると、そのファイルシステムの自動共有のみが off になり、他のすべてのプロパティー継承は変更されないことも示しています。他のほとんどの共有プロパティーと異なり、share.auto プロパティーは継承可能ではありません。
名前付き共有は、公開 NFS 共有の作成時にも使用します。公開共有は、名前付きの NFS 共有でのみ作成できます。例:
$ zfs create -o mountpoint=/pub tank/public $ zfs share -o share.nfs=on -o share.nfs.public=on tank/public%pubshare $ grep pub /etc/dfs/sharetab /pub pubshare nfs public,sec=sys,rw
NFS および SMB 共有プロパティーの詳細は、share_nfs(8)および share_smb(8) のマニュアルページを参照してください。
自動共有が作成されると、ファイルシステム名から一意のリソース名が構築されます。構築される名前はファイルシステム名のコピーですが、リソース名では使用できない文字がファイルシステム名に含まれている場合、それらは下線 (_) で置き換えられます。たとえば、data/home/john のリソース名は data_home_john になります。
share.autoname プロパティー名を設定すると、自動共有の作成時にファイルシステム名を特定の名前で置き換えることができます。この特定の名前は、継承の際に先頭部分のファイルシステム名を置き換えるためにも使用されます。例:
$ zfs create -o share.smb=on -o share.autoname=john data/home/john $ zfs create data/home/john/backups $ grep john /etc/dfs/sharetab /data/home/john john smb /data/home/john/backups john_backups smb
まだ共有されていないファイルシステムでレガシー share コマンドまたは zfs set share コマンドを使用すると、その share.auto 値は自動的に off に設定されます。レガシーコマンドは常に名前付き共有を作成します。この特別な規則によって、自動共有が作成中の名前付き共有を妨害するのを防ぐことができます。
ファイル共有プロパティーの値を表示するには、zfs get コマンドを使用します。次の例は、単一ファイルシステムの share.nfs プロパティーを表示する方法を示しています。
$ zfs get share.nfs tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs on local
次の例は、子孫ファイルシステムの share.nfs プロパティーを表示する方法を示しています。
$ zfs get -r share.nfs tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs on local tank/sales% share.nfs on inherited from tank/sales tank/sales/log share.nfs on inherited from tank/sales tank/sales/log% share.nfs on inherited from tank/sales
zfs get all コマンド構文では、共有プロパティーの拡張情報は利用できません。
NFS または SMB 共有に関する詳細を表示するには、次の構文を使用します。
$ zfs get share.nfs.all tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs.aclok off default tank/sales share.nfs.anon default tank/sales share.nfs.charset.* ... default tank/sales share.nfs.cksum default tank/sales share.nfs.index default tank/sales share.nfs.log default tank/sales share.nfs.noaclfab off default tank/sales share.nfs.nosub off default tank/sales share.nfs.nosuid off default tank/sales share.nfs.public - - tank/sales share.nfs.sec default tank/sales share.nfs.sec.* ... default
共有プロパティーの数が多いため、デフォルト以外の値でプロパティーを表示することを検討してください。例:
$ zfs get -e -s local,received,inherited share.all tank/home NAME PROPERTY VALUE SOURCE tank/home share.auto off local tank/home share.nfs on local tank/home share.nfs.anon 99 local tank/home share.protocols nfs local tank/home share.smb.guestok on inherited from tank
共有プロパティー値を変更するには、ファイルシステム共有で新規または変更されたプロパティーを指定します。たとえば、ファイルシステムの作成時に読み取り専用プロパティーを設定した場合、そのプロパティーを off に設定できます。
$ zfs create -o share.nfs.ro=\* tank/data $ zfs get share.nfs.ro tank/data NAME PROPERTY VALUE SOURCE tank/data share.nfs.sec.sys.ro * local $ zfs set share.nfs.ro=none tank/data $ zfs get share.nfs.ro tank/data NAME PROPERTY VALUE SOURCE tank/data share.nfs.sec.sys.ro off local
SMB 共有を作成した場合は、NFS 共有プロトコルを追加することもできます。例:
$ zfs set share.smb=on tank/multifs $ zfs set share.nfs=on tank/multifs $ grep multifs /etc/dfs/sharetab /tank/multifs tank_multifs nfs sec=sys,rw /tank/multifs tank_multifs smb -
SMB プロトコルを削除します。
$ zfs set share.smb=off tank/multifs $ grep multifs /etc/dfs/sharetab /tank/multifs tank_multifs nfs sec=sys,rw
名前付き共有の名前を変更できます。例:
$ zfs share -o share.smb=on tank/home/abc%abcshare $ grep abc /etc/dfs/sharetab /tank/home/abc abcshare smb - $ zfs rename tank/home/abc%abcshare tank/home/abc%a1share $ grep abc /etc/dfs/sharetab /tank/home/abc a1share smb -
ラベル付きファイルシステムに共有アクセス権を付与できます。次の例で、rpool/export/home は共有するように構成されたラベル付きファイルシステムです。
$ zfs create -o multilevel=on -o encryption=on rpool/ftp-files $ zfs set =/ftpsource rpool/ftp-files $ setlabel "Conf - Internal Use Only" /ftpsource $ zfs set share.nfs.labeled=on rpool/ftp-files $ zfs set share.nfs=on rpool/ftp-files
zfs share コマンドを使用してラベル付きファイルシステムの共有を有効にすることもできます。
$ zfs share -o nfs=on -o share.nfs.labeled=on rpool/ftp-files
名前付き共有を破棄しないで一時的に共有解除するには、zfs unshare コマンドを使用します。例:
$ zfs unshare tank/home/abc%a1share $ grep abc /etc/dfs/sharetab # $ zfs share tank/home/abc%a1share $ grep abc /etc/dfs/sharetab /tank/home/abc a1share smb -
zfs unshare コマンドを発行すると、すべてのファイルシステム共有が共有解除されます。これらの共有は、そのファイルシステムに対して zfs share コマンドを発行するか、そのファイルシステムに対して share.nfs または share.smb プロパティーを設定するまで共有解除のままです。
zfs unshare コマンドを発行しても定義された共有は削除されず、次回そのファイルシステムに対して zfs share コマンドを発行するか、そのファイルシステムに対して share.nfs または share.smb プロパティーを設定したときに再度共有されます。
ファイルシステム共有を共有解除するには、share.nfs または share.smb プロパティーを off に設定します。例:
$ zfs set share.nfs=off tank/multifs $ grep multifs /etc/dfs/sharetab #
名前付き共有を完全に削除するには、zfs destroy コマンドを使用します。例:
$ zfs destroy tank/home/abc%a1share
Oracle Solaris 11, 以降、非大域ゾーン内で NFS 共有を作成して公開できます。
ZFS ファイルシステムは、非大域ゾーンでマウントされて使用できるようになれば、そのゾーン内で共有できます。
ファイルシステムは、非大域ゾーンに委任されておらず、かつ非大域ゾーンにマウントされていない場合に、大域ゾーン内で共有できます。ファイルシステムを非大域ゾーンに追加した場合、レガシー share コマンドを使用することによってのみそれを共有できます。
たとえば、/export/home/data および /export/home/data1 ファイルシステムは、zfszone で使用できます。
zfszone$ share -F nfs /export/home/data zfszone# cat /etc/dfs/sharetab
zfszone$ zfs set share.nfs=on tank/zones/export/home/data1 zfszone$ cat /etc/dfs/sharetab
次の移行の問題を確認してください。
古い共有プロパティーを使ったファイルシステムのインポート - プールをインポートする場合、または Oracle Solaris 11 より前に作成されたファイルシステムストリームを受け取る場合、sharenfs および sharesmb プロパティーのプロパティー値にすべての共有プロパティーが直接含まれています。ほとんどの場合、これらのレガシー共有プロパティーは、各ファイルシステムが共有されるとすぐに、同等の名前付き共有セットに変換されます。ほとんどの場合、インポート操作によってマウントおよび共有がトリガーされるため、名前付き共有への変換はインポートプロセス中に直接行われます。
Oracle Solaris 11 からのアップグレード - 名前付き共有は新しい形式に変換されるため、プールをバージョン 34 にアップグレードしたあとの最初のファイルシステムの共有には長い時間がかかることがあります。アップグレードプロセスによって作成された名前付き共有は正しいものですが、共有プロパティー継承を利用できない可能性があります。
共有プロパティー値を表示します。
$ zfs get share.nfs filesystem $ zfs get share.smb filesystem
古い BE でブートする場合は、sharenfs および sharesmb プロパティーを元の値にリセットします。
Oracle Solaris からのアップグレード 11 - Oracle Solaris 11 および 11.1 では、sharenfs および sharesmb プロパティーには off と on の値しか設定できません。これらのプロパティーは、共有特性の定義に使用できなくなりました。
ブート時のファイルシステムの共有に /etc/dfs/dfstab ファイルは使用されなくなりました。ブート時に、有効なファイルシステム共有を含むマウント済みの ZFS ファイルシステムがすべて自動的に共有されます。共有は、sharenfs または sharesmb が on に設定されると有効になります。
sharemgr インタフェースは使用できなくなりました。レガシー share コマンドは、レガシー共有の作成に引き続き使用できます。share –a コマンドは、以前の share –ap コマンドに似ており、ファイルシステムの共有は永続的です。share –p オプションは使用できなくなりました。
システムのアップグレード - このリリースでのプロパティーの変更により、Oracle Solaris 11 BE でブートすると、ZFS 共有が不正になります。ZFS 以外の共有は影響を受けません。古い BE でブートすることを計画している場合は、ZFS 共有構成を復元できるように、pkg update 操作の前にまず、既存の共有構成のコピーを保存します。
古い BE で、sharemgr show –vp コマンドを使用して、すべての共有およびそれらの構成を一覧表示します。
共有プロパティー値を表示するには、次のコマンドを使用します。
$ zfs get sharenfs filesystem $ zfs get sharesmb filesystem
古い BE に戻す場合は、sharenfs および sharesmb プロパティーと、sharemgr で定義されたすべての共有を元の値にリセットします。
旧バージョンの共有解除動作 - unshare –a コマンドまたは unshareall コマンドを使用すると、ファイルシステムの共有が解除されますが、SMF 共有リポジトリは更新されません。既存の共有を再度共有しようとすると、共有リポジトリで競合がチェックされ、エラーが表示されます。
次の共有エラー状況を確認してください。
新しい共有または以前の共有が共有されない
プールおよびファイルシステムバージョンが最新であることを確認する - share.nfs または share.smb プロパティーを設定することによって新しい共有が共有されない場合は、プールバージョンが 34、ファイルシステムバージョンが 6 であることを確認してください。
共有は NFS サービスが起動する前に存在する必要がある- NFS サーバーサービスは、ファイルシステムが共有されるまで実行されません。最初に NFS 共有を作成し、共有へのリモートアクセスを試してください。
既存の共有を含むシステムはアップグレードされたが、共有が利用できない - 既存の共有を含むシステムはアップグレードされるが、共有を再共有しようとすると失敗します。share.auto プロパティーが無効になっているため、共有は共有されていない可能性があります。share.auto が off に設定されている場合は、名前付き共有のみが利用可能であり、以前の共有構文との互換性が,適用されます。既存の共有は次のようになります。
$ zfs get share NAME PROPERTY VALUE SOURCE tank/data share name=data,path=/tank/data,prot=nfs local
share.auto プロパティーが有効になっていることを確認します。有効でない場合は、有効にします。
$ zfs get -r share.auto tank/data $ zfs set share.auto=on tank/data
ファイルシステムを再共有します。
$ zfs set -r share.nfs=on tank/data
前述のコマンドを正常に実行するには、その前に名前付き共有を削除して再作成する必要がある場合もあります。
$ zfs list -t share -Ho name -r tank/data | xargs -n1 zfs destroy
必要に応じて、名前付き共有を再作成します。
$ zfs create -o share.nfs=on tank/data%share
名前付き共有を含む共有プロパティーがスナップショットに含まれていない - 共有プロパティーおよび .zfs/shares ファイルの扱いが、zfs clone 操作と zfs send 操作では異なります。.zfs/shares ファイルはスナップショットに含まれており、zfs clone および zfs send 操作で保存されます。zfs send 操作と zfs receive 操作中のプロパティーの動作については、ZFS スナップショットストリームに異なるプロパティー値を適用するを参照してください。クローン操作後、プロパティーが ZFS ファイルシステム階層内のクローンの新しい位置から継承されるのに対し、ファイルはすべてクローン前のスナップショットからのものです。
名前付き共有要求が失敗する - 名前付き共有を作成するための要求が共有が自動共有と競合するために失敗したときは、auto.share プロパティーを無効にする必要がある場合があります。
共有を含むプールが以前にエクスポートされた - プールが読み取り専用でインポートされると、そのプロパティーもそのファイルも変更できないため、新しい共有の作成は失敗します。プールがエクスポートされる前に共有が存在していた場合、可能であれば既存の共有特性が使用されます。
次の表は、既知の共有状態と、必要に応じてそれらの解決方法を示しています。
|