Oracle Solaris ZFS 管理ガイド

ZFS ファイルシステムをマウントおよび共有する

この節では、ZFS でマウントポイントと共有ファイルシステムをどのように管理するかについて説明します。

ZFS マウントポイントを管理する

デフォルトで、ZFS ファイルシステムは作成時に自動的にマウントされます。この節で説明するように、ユーザーはファイルシステムの特定のマウントポイント動作を決定することができます。

zpool create-m オプションを使用すれば、プールを作成するときにプールのデータセットのデフォルトマウントポイントを設定することもできます。プールの作成の詳細については、「ZFS ストレージプールを作成する」を参照してください。

すべての ZFS ファイルシステムは、ZFS の起動時にサービス管理機能 (SMF) の svc://system/filesystem/local サービスを使用してマウントされます。ファイルシステムは、/path にマウントされます。path はファイルシステムの名前です。

デフォルトのマウントポイントを上書きするには、zfs set コマンド使って mountpoint プロパティーを特定のパスに設定します。ZFS では、zfs mount -a コマンドが呼び出されるときに、指定されたマウントポイントが必要に応じて自動的に作成され、関連付けられたファイルシステムが自動的にマウントされます。/etc/vfstab ファイルを編集する必要はありません。

mountpoint プロパティーは継承されます。たとえば、pool/homemountpoint プロパティーが /export/stuff に設定されている場合、pool/home/usermountpoint プロパティー値の /export/stuff/user を継承します。

ファイルシステムがマウントされないようにするには、mountpoint プロパティーを none に設定します。さらに、canmount プロパティーを使えば、ファイルシステムをマウント可能にするかどうかを制御できます。canmount プロパティーの詳細については、canmount プロパティー」を参照してください。

また、従来のマウントインタフェース経由でファイルシステムを明示的に管理することもできます。それには、zfs set を使って mountpoint プロパティーを legacy に設定します。このようにすると、ファイルシステムが自動的にマウントおよび管理されなくなります。代わりに、mountumount コマンドなどのレガシーツールと、/etc/vfstab ファイルを使用する必要があります。レガシーマウントの詳細については、「レガシーマウントポイント」を参照してください。

自動マウントポイント

mountpoint プロパティーが legacy に設定されていないデータセットは、すべて ZFS によって管理されます。次の例では、作成されたデータセットのマウントポイントが ZFS によって自動的に管理されます。


# zfs create pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /pool/filesystem           default
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

次の例に示すように、mountpoint プロパティーを明示的に設定することもできます。


# zfs set mountpoint=/mnt pool/filesystem
# zfs get mountpoint pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mountpoint    /mnt                       local
# zfs get mounted pool/filesystem
NAME             PROPERTY      VALUE                      SOURCE
pool/filesystem  mounted       yes                        -

mountpoint プロパティーを変更すると、ファイルシステムが古いマウントポイントから自動的にマウント解除されて、新しいマウントポイントに再マウントされます。マウントポイントのディレクトリは必要に応じて作成されます。ファイルシステムがアクティブであるためにマウント解除できない場合は、エラーが報告され、手動で強制的にマウント解除する必要があります。

レガシーマウントポイント

mountpoint プロパティーを legacy に設定することで、ZFS ファイルシステムをレガシーツールを使って管理することができます。レガシーファイルシステムは、mountumount コマンド、および /etc/vfstab ファイルを使用して管理する必要があります。レガシーファイルシステムは、ZFS が起動するときに自動的にマウントされません。ZFS の mount および umount コマンドは、この種類のデータセットでは使用できません。次の例では、ZFS データセットをレガシーモードで設定および管理する方法を示しています。


# zfs set mountpoint=legacy tank/home/eschrock
# mount -F zfs tank/home/eschrock /mnt

起動時にレガシーファイルシステムを自動的にマウントするには、/etc/vfstab ファイルにエントリを追加する必要があります。次に、/etc/vfstab ファイル内のエントリの例を示します。


#device         device        mount           FS      fsck    mount   mount
#to mount       to fsck       point           type    pass    at boot options
#

tank/home/eschrock -		/mnt		   zfs		-		yes		-	

device to fsck エントリと fsck pass エントリは - に設定されていますが、これは、fsck コマンドが ZFS ファイルシステムで使用できないからです。ZFS データの整合性の詳細については、「トランザクションのセマンティクス」を参照してください。

ZFS ファイルシステムをマウントする

ZFS では、ファイルシステムが作成されるときまたはシステムが起動するときに、ファイルシステムが自動的にマウントされます。zfs mount コマンドを使用する必要があるのは、マウントオプションを変更したりファイルシステムを明示的にマウントまたはマウント解除したりする必要がある場合だけです。

zfs mount コマンドを引数なしで実行すると、現在マウントされているファイルシステムのうち、ZFS が管理しているファイルシステムがすべて表示されます。レガシー管理されているマウントポイントは表示されません。次に例を示します。


# zfs mount
tank                            /tank
tank/home                       /tank/home
tank/home/bonwick               /tank/home/bonwick
tank/ws                         /tank/ws

-a オプションを使用すると、ZFS が管理しているファイルシステムをすべてマウントできます。レガシー管理されているファイルシステムはマウントされません。次に例を示します。


# zfs mount -a

デフォルトでは、空でないディレクトリの最上位にマウントすることは許可されません。空でないディレクトリの最上位に強制的にマウントする場合は、-O オプションを使用する必要があります。次に例を示します。


# zfs mount tank/home/lalt
cannot mount '/export/home/lalt': directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/lalt

レガシーマウントポイントは、レガシーツールを使って管理する必要があります。ZFS ツールを使用しようとすると、エラーになります。次に例を示します。


# zfs mount pool/home/billm
cannot mount 'pool/home/billm': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm

ファイルシステムがマウントされるときに使用されるマウントオプションは、データセットに関連付けられたプロパティー値に基づいて決まります。プロパティーとマウントオプションは、次のような関係になっています。

表 6–4 ZFS のマウント関連プロパティーとマウントオプション

プロパティー 

マウントオプション 

atime

atime/noatime

devices

devices/nodevices

exec

exec/noexec

nbmand

nbmand/nonbmand

readonly

ro/rw

setuid

setuid/nosetuid

xattr

xattr/noaxttr

マウントオプション nosuid は、nodevices,nosetuid の別名です。

一時的なマウントプロパティーを使用する

前節で説明したどのマウントオプションの場合にも、-zfs mount コマンドと o オプションを使って明示的に設定されている場合には、関連するプロパティー値が一時的に上書きされます。これらのプロパティー値は zfs get コマンドを実行すると temporary として報告されますが、ファイルシステムがマウント解除されるときに元の値に戻ります。データセットがマウントされるときにプロパティー値を変更した場合は、変更がすぐに有効になり、一時的な設定がすべて上書きされます。

次の例では、tank/home/perrin ファイルシステムに読み取り専用マウントオプションが一時的に設定されます。ファイルシステムがマウント解除されているものと仮定しています。


# zfs mount -o ro tank/home/perrin

現在マウントされているファイルシステムのプロパティー値を一時的に変更するときは、特別な remount オプションを使用する必要があります。次の例では、現在マウントされているファイルシステムの atime プロパティーを一時的に off に変更しています。


# zfs mount -o remount,noatime tank/home/perrin
# zfs get atime tank/home/perrin
NAME             PROPERTY      VALUE                      SOURCE
tank/home/perrin atime         off                        temporary

zfs mount コマンドの詳細については、zfs(1M) を参照してください。

ZFS ファイルシステムをマウント解除する

zfs unmount サブコマンドを使用して、ZFS ファイルシステムをマウント解除できます。unmount コマンドの引数として、マウントポイントまたはファイルシステム名のいずれかを指定できます。

次の例では、ファイルシステム名を使ってファイルシステムをマウント解除しています。


# zfs unmount tank/home/tabriz

次の例では、マウントポイントを使ってファイルシステムをマウント解除しています。


# zfs unmount /export/home/tabriz

ファイルシステムがビジー状態の場合には、unmount コマンドは失敗します。ファイルシステムを強制的にマウント解除する場合は、-f オプションを使用できます。アクティブに使用されているファイルシステムを強制的にマウント解除する場合は、十分に注意してください。アプリケーションが予期しない動作を行うことがあります。


# zfs unmount tank/home/eschrock
cannot unmount '/export/home/eschrock': Device busy
# zfs unmount -f tank/home/eschrock

下位互換性を提供するために、従来の umount コマンドを使用して ZFS ファイルシステムをマウント解除することもできます。次に例を示します。


# umount /export/home/bob

zfs umount コマンドの詳細については、zfs(1M) を参照してください。

ZFS ファイルシステムを共有および共有解除する

ZFS でファイルシステムを自動的に共有するには、sharenfs プロパティーを設定します。このプロパティーを使用すれば、新規ファイルシステムを共有するときに /etc/dfs/dfstab ファイルを変更する必要はありません。sharenfs プロパティーは、コンマ区切りのオプションリストとして、share コマンドに渡されます。値 on は、デフォルトの共有オプションの別名で、すべてのユーザーに read/write アクセス権を提供します。値 off を指定すると、ファイルシステムが ZFS によって管理されなくなり、従来の方法 (/etc/dfs/dfstab ファイルなど) で共有できるようになります。sharenfs プロパティーが off でないすべてのファイルシステムは、起動時に共有されます。

共有セマンティクスを制御する

デフォルトでは、すべてのファイルシステムは共有されていません。新規ファイルシステムを共有する場合は、次のような zfs set 構文を使用します。


# zfs set sharenfs=on tank/home/eschrock

sharenfs プロパティーは継承されます。継承したプロパティーが off でないファイルシステムは、作成時に自動的に共有されます。次に例を示します。


# zfs set sharenfs=on tank/home
# zfs create tank/home/bricker
# zfs create tank/home/tabriz
# zfs set sharenfs=ro tank/home/tabriz

tank/home/brickertank/home/tabriz は、tank/home から sharenfs プロパティーを継承するため、最初は書き込み可能として共有されます。このプロパティーが ro (読み取り専用) に設定されたあとは、tank/home に設定されている sharenfs プロパティーに関係なく、tank/home/tabriz は読み取り専用として共有されます。

ZFS ファイルシステムの共有を解除する

ほとんどのファイルシステムは、起動、作成、および破棄されるときに自動的に共有または共有解除されますが、場合によってはファイルシステムの共有を明示的に解除しなければならないことがあります。このような場合は、zfs unshare コマンドを使用します。次に例を示します。


# zfs unshare tank/home/tabriz

このコマンドを実行すると、tank/home/tabriz ファイルシステムの共有が解除されます。システムの上のすべての ZFS ファイルシステムを共有解除する場合は、-a オプションを使用する必要があります。


# zfs unshare -a

ZFS ファイルシステムを共有する

通常の操作にはほとんどの場合、起動時や作成時のファイルシステムの共有に関する ZFS の自動動作で十分です。なんらかの理由でファイルシステムの共有を解除する場合でも、zfs share コマンドを使用すれば再度共有できます。次に例を示します。


# zfs share tank/home/tabriz

- a オプションを使用すれば、システム上のすべての ZFS ファイルシステムを共有できます。


# zfs share -a

従来の共有の動作

sharenfs プロパティーが off に設定された場合は、ZFS はどのような場合にもファイルシステムを共有または共有解除することがありません。この値を使用すれば、/etc/dfs/dfstab ファイルなどの従来の方法でファイルシステムの共有を管理することができます。

従来の mount コマンドと異なり、従来の share および unshare コマンドは ZFS ファイルシステムでも使用できます。このため、sharenfs プロパティーのオプションとは異なるオプションを使って、ファイルシステムを手動で共有することもできます。この管理モデルは推奨されていません。ZFS を使用して NFS 共有を完全に管理するか、または /etc/dfs/dfstab ファイルを使用して完全に管理する方法を選択してください。ZFS 管理モデルは、従来のモデルより少ない操作で簡単に管理できるように設計されています。