この節では、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/home の mountpoint プロパティーが /export/stuff に設定されている場合、pool/home/user は mountpoint プロパティー値の /export/stuff/user を継承します。
ファイルシステムがマウントされないようにするには、mountpoint プロパティーを none に設定します。さらに、canmount プロパティーを使えば、ファイルシステムをマウント可能にするかどうかを制御できます。canmount プロパティーの詳細については、「canmount プロパティー」を参照してください。
また、従来のマウントインタフェース経由でファイルシステムを明示的に管理することもできます。それには、zfs set を使って mountpoint プロパティーを legacy に設定します。このようにすると、ファイルシステムが自動的にマウントおよび管理されなくなります。代わりに、mount や umount コマンドなどのレガシーツールと、/etc/vfstab ファイルを使用する必要があります。レガシーマウントの詳細については、「レガシーマウントポイント」を参照してください。
mountpoint プロパティーを legacy または none から特定のパスに変更すると、ZFS はそのファイルシステムを自動的にマウントします。
ファイルシステムが ZFS によって管理されているのにそのマウントが現在解除されている場合は、mountpoint プロパティーを変更しても、そのファイルシステムのマウントは解除されたままになります。
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 ファイルシステムをレガシーツールを使って管理することができます。レガシーファイルシステムは、mount と umount コマンド、および /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 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 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 でファイルシステムを自動的に共有するには、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/bricker と tank/home/tabriz は、tank/home から sharenfs プロパティーを継承するため、最初は書き込み可能として共有されます。このプロパティーが ro (読み取り専用) に設定されたあとは、tank/home に設定されている sharenfs プロパティーに関係なく、tank/home/tabriz は読み取り専用として共有されます。
ほとんどのファイルシステムは、起動、作成、および破棄されるときに自動的に共有または共有解除されますが、場合によってはファイルシステムの共有を明示的に解除しなければならないことがあります。このような場合は、zfs unshare コマンドを使用します。次に例を示します。
# zfs unshare tank/home/tabriz |
このコマンドを実行すると、tank/home/tabriz ファイルシステムの共有が解除されます。システムの上のすべての ZFS ファイルシステムを共有解除する場合は、-a オプションを使用する必要があります。
# zfs unshare -a |
通常の操作にはほとんどの場合、起動時や作成時のファイルシステムの共有に関する 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 管理モデルは、従来のモデルより少ない操作で簡単に管理できるように設計されています。