El nuevo comando zfs set se utiliza para compartir y publicar un sistema de archivos ZFS a través de los protocolos NFS o SMB. También puede establecer la propiedad share.nfs o share.smb al crear el sistema de archivos.
Por ejemplo, el sistema de archivos tank/sales se crea y se comparte. Los permisos de uso compartido predeterminados son de solo lectura para todos los usuarios. El sistema de archivos descendente tank/sales/logs también se comparte automáticamente porque la propiedad share.nfs es heredada por sistemas de archivos descendentes y el sistema de archivos tank/sales/log se establece en acceso de solo lectura.
# 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
Puede proporcionar acceso root a un sistema específico para un sistema de archivos compartido de la siguiente manera:
# zfs set share.nfs=on tank/home/data # zfs set share.nfs.sec.default.root=neo.daleks.com tank/home/data
En las agrupaciones que se actualizaron a la última versión de agrupación 34, hay disponible una nueva sintaxis de uso compartido que utiliza la herencia de propiedades ZFS para facilitar el mantenimiento del uso compartido. Cada característica de recurso compartido se convierte en una propiedad share independiente. Las propiedades share se identifican con nombres que empiezan con el prefijo share. Algunos ejemplos de propiedades share son share.desc, share.nfs.nosuid y share.smb.guestok.
La propiedad share.nfs controla si se activó el uso compartido de NFS. La propiedad share.smb controla si se activó el uso compartido de SMB. Los nombres de propiedad sharenfs y sharesmb antiguos se pueden seguir utilizando porque, en las nuevas agrupaciones, sharenfs es un alias de share.nfs y sharesmb es un alias de share.smb. Si desea compartir el sistema de archivos tank/home, utilice una sintaxis similar a la siguiente:
# zfs set share.nfs=on tank/home
En este ejemplo, el valor de propiedad share.nfs es heredado por cualquier sistema de archivos descendente. Por ejemplo:
# 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
En agrupaciones más antiguas, únicamente las propiedades sharenfs y sharesmb son heredadas por sistemas de archivos descendentes. Otras características de uso compartido se almacenan en el archivo .zfs/shares para cada recurso compartido y no se heredan.
Una regla especial es que siempre que se crea un nuevo sistema de archivos que hereda sharenfs o sharesmb de su elemento principal, se crea un recurso compartido predeterminado para ese sistema de archivos desde el valor sharenfs o sharesmb. Tenga en cuenta que cuando sharenfs simplemente está establecido en on, el recurso compartido predeterminado que se crea en un sistema de archivos descendente únicamente tiene las características NFS predeterminadas. Por ejemplo:
# 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
También puede crear un recurso compartido designado, lo cual proporciona más flexibilidad para configurar permisos y propiedades en un entorno SMB. Por ejemplo:
# zfs share -o share.smb=on tank/workspace%myshare
En el ejemplo anterior, el comando zfs share crea un recurso compartido SMB denominado myshare del sistema de archivos tank/workspace. Puede acceder al recurso compartido SMB y mostrar o configurar permisos específicos o ACL mediante el directorio .zfs/shares del sistema de archivos. Cada recurso compartido SMB es representado mediante un archivo .zfs/shares independiente. Por ejemplo:
# 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
Los recursos compartidos designados heredan propiedades de uso compartido del sistema de archivos principal. Si agrega la propiedad share.smb.guestok al sistema de archivos principal en el ejemplo anterior, esta propiedad es heredada por el recurso compartido designado. Por ejemplo:
# 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
Los recursos compartidos designados pueden ser útiles en el entorno NFS al definir recursos compartidos para un subdirectorio del sistema de archivos. Por ejemplo:
# 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
El ejemplo anterior también muestra que, al establecer share.auto en off para un sistema de archivos, se desactiva el uso compartido automático para ese sistema de archivos y se mantiene intacta la herencia de otras propiedades. A diferencia de la mayoría de las propiedades de uso compartido, la propiedad share.auto no se puede heredar.
Los recursos compartidos designados también se utilizan al crear un recurso compartido NFS público. Un recurso compartido público solamente se puede crear en un recurso compartido NFS designado. Por ejemplo:
# 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
Consulte share_nfs(1M) and share_smb(1M) para obtener una descripción detallada de las propiedades de recursos compartidos NFS y SMB.
Cuando se crea un recurso compartido automático (auto), se crea un nombre de recurso único a partir del nombre del sistema de archivos. El nombre creado es una copia del nombre del sistema de archivos, con la excepción de que los caracteres del nombre del sistema de archivos, los cuales serían ilegales en el nombre del recurso, se reemplazan con caracteres de subrayado (_). Por ejemplo, el nombre del recurso de data/home/john es data_home_john.
La configuración de un nombre de propiedad share.autoname permite reemplazar el nombre del sistema de archivos con un nombre específico al crear el recurso compartido automático. El nombre también se utiliza para reemplazar el nombre del sistema de archivos de prefijo en caso de herencia. Por ejemplo:
# 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
Si un comando share antiguo o el comando zfs set share se utilizan en un sistema de archivos que aún no fue compartido, el valor share.auto se establece automáticamente en off. Los comandos antiguos siempre crean recursos compartidos designados. Esta regla especial impide que el uso compartido automático interfiera con el recurso compartido designado que se crea.
Visualice el valor de las propiedades de uso compartido de archivos con el comando zfs get. En el siguiente ejemplo, se muestra cómo visualizar la propiedad share.nfs para un solo sistema de archivos:
# zfs get share.nfs tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs on local
En el siguiente ejemplo, se muestra cómo visualizar la propiedad share.nfs para sistemas de archivos descendentes:
# 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
La información extendida de la propiedad de recurso compartido no está disponible en la sintaxis del comando zfs get all.
Puede visualizar detalles específicos sobre la información del recurso compartido NFS o SMB con la siguiente sintaxis:
# 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
Dado que existen muchas propiedades de recursos compartidos, considere la posibilidad de visualizar las propiedades con un valor que no es el predeterminado. Por ejemplo:
# 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
Puede cambiar los valores de propiedad de un recurso compartido especificando propiedades nuevas o modificadas en un recurso compartido de sistema de archivos. Por ejemplo, si la propiedad de solo lectura se establece cuando se crea el sistema de archivos, se puede establecer en 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
Si crea un recurso compartido SMB, también puede agregar el protocolo del recurso compartido NFS. Por ejemplo:
# 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 -
Elimine el protocolo SMB:
# zfs set share.smb=off tank/multifs # grep multifs /etc/dfs/sharetab /tank/multifs tank_multifs nfs sec=sys,rw
Puede cambiar el nombre de un recurso compartido designado. Por ejemplo:
# 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 -
Puede dejar de compartir temporalmente un recurso compartido designado sin destruirlo utilizando el comando zfs unshare. Por ejemplo:
# 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 -
Cuando se emite el comando zfs unshare, se dejan de compartir todos los recursos compartidos del sistema de archivos. Estos recursos compartidos permanecen sin compartir hasta que se emite el comando zfs share para el sistema de archivos o se configura la propiedad share.nfs o share.smb para el sistema de archivos.
Los recursos compartidos definidos no se eliminan cuando se emite el comando zfs unshare y se vuelven a compartir la próxima vez que se emite el comando zfs share para el sistema de archivos o se configura la propiedad share.nfs o share.smb para el sistema de archivos.
Puede dejar de compartir un recurso compartido del sistema de archivos configurando la propiedad share.nfs o share.smb en off. Por ejemplo:
# zfs set share.nfs=off tank/multifs # grep multifs /etc/dfs/sharetab #
Puede eliminar permanentemente un recurso compartido designado utilizando el comando zfs destroy. Por ejemplo:
# zfs destroy tank/home/abc%a1share
A partir de Oracle Solaris 11, puede crear y publicar recursos compartidos NFS en una zona no global de Oracle Solaris.
Si un sistema de archivos ZFS está montado y se encuentra disponible en una zona no global, dicho sistema puede ser compartido en esa zona.
Un sistema de archivos se puede compartir en la zona global si no está delegado a una zona no global o si no está montado en una zona no global. Si un sistema de archivos se agrega a una zona no global, solamente se puede compartir utilizando el comando share antiguo.
Por ejemplo, los sistemas de archivos /export/home/data y /export/home/data1 están disponibles en 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