La commande zfs set permet de partager et de publier un système de fichiers ZFS via les protocoles NFS ou SMB. Vous pouvez également définir les propriétés share.nfs ou share.smb quand le système de fichiers est créé.
Par exemple, le système de fichiers tank/sales est créé et partagé. Les autorisations de partage en lecture et écriture s'applique par défaut à tout le monde. Le système de fichiers descendant tank/sales/logs est aussi partagé automatiquement, car la propriété share.nfs est héritée par les systèmes de fichiers descendants et l'accès du système de fichiers tank/sales/log est défini en lecture seule.
# 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
Vous pouvez fournir un accès root à un système spécifique pour un système de fichiers partagé comme suit :
# zfs set share.nfs=on tank/home/data # zfs set share.nfs.sec.default.root=neo.daleks.com tank/home/data
Dans les pools mis à niveau à la version 34, une nouvelle syntaxe de partage simplifie la gestion des partages à l'aide de l'héritage de propriétés ZFS. Chaque caractéristique de partage devient une propriété share distincte. Les propriétés share sont identifiées par les noms comportant le préfixe share.. Des exemples de propriétés share sont share.desc, share.nfs.nosuid, et share.smb.guestok.
La propriété share.nfs contrôle l'activation du partage NFS. La propriété share.smb contrôle l'activation du partage SMB. Les noms des propriétés héritées sharenfs et sharesmb peuvent toujours être utilisés, car dans les nouveaux pools, sharenfs est un alias pour share.nfs et sharesmb est un alias pour share.smb. Si vous voulez partager le système de fichiers tank/home, utilisez une syntaxe similaire à la suivante :
# zfs set share.nfs=on tank/home
Dans cet exemple, la valeur de propriété share.nfs est héritée par tous les systèmes de fichiers descendants. Par exemple :
# 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
Dans les anciens pools, seules les propriétés sharenfs et sharesmb sont héritées par les systèmes de fichiers descendants. D'autres caractéristiques de partage sont stockées dans le fichier .zfs/shares pour chaque partage et ne sont pas héritées.
Une règle spéciale établit que quand un système de fichiers créé hérite de sharenfs ou sharesmb de son parent, un partage par défaut est créé pour ce système de fichiers à partir de la valeur sharenfs ou sharesmb. Notez que quand sharenfs est simplement activée, le partage par défaut créé dans un système de fichiers descendant possède uniquement les caractéristiques NFS par défaut. Par exemple :
# 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
Vous pouvez aussi créer un partage nommé, qui offre plus de flexibilité dans la définition des autorisations et des propriétés dans un environnement SMB. Par exemple :
# zfs share -o share.smb=on tank/workspace%myshare
Dans l'exemple précédent, la commande zfs share crée un partage SMB nommé myshare du système de fichiers tank/workspace. Vous pouvez accéder au partage SMB et afficher ou définir des autorisations ou ACL spécifiques via le répertoire .zfs/shares du système de fichiers. Chaque partage SMB est représenté par un fichier .zfs/shares distinct. Par exemple :
# 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
Les partages nommés héritent des propriétés de partage du système de fichiers parent. Si vous ajoutez la propriété share.smb.guestok au système de fichiers parent dans l'exemple précédent, la propriété est héritée par le partage nommé. Par exemple :
# 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
Les partages nommés peuvent être utilisés dans l'environnement NFS lors de la définition de partages pour un sous-répertoire du système de fichiers. Par exemple :
# 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
L'exemple ci-dessus illustre que la désactivation de share.auto pour un système de fichiers désactive le partage automatique pour ce dernier tout en laissant toutes les autres propriétés d'héritage intactes. Contrairement à la plupart des propriétés de partage, share.auto n'est pas héritable.
Les partages nommés servent également dans la création d'un partage NFS public. Un partage public peut uniquement être créé sur un partage NFS nommé. Par exemple :
# 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
Reportez-vous aux pages de manuel share_nfs(1M) et share_smb(1M) pour une description détaillée des propriétés de partages NFS et SMB.
Quand un partage automatique est créé, un nom de ressource unique est construit à partir du nom du système de fichiers. Le nom construit est une copie du nom du système de fichiers, à ceci près que les caractères du nom du système de fichiers qui ne sont pas autorisés dans un nom de ressource sont remplacés par des traits de soulignement (_). Par exemple, le nom de ressource de data/home/john est data_home_john.
La configuration d'un nom de propriété share.autoname permet de remplacer le nom de système de fichiers par un nom spécifique lors de la création du partage automatique. Le nom spécifique sert aussi à remplacer le nom de système de fichiers de préfixe en cas d'héritage. Par exemple :
# 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 une commande share ou zfs set share est utilisée sur un système de fichiers qui n'a pas encore été partagé, sa valeur share.auto est automatiquement définie sur off. Les commandes héritées créent toujours des partages nommés. Cette règle spéciale empêche le partage automatique d'interférer avec le partage nommé qui est créé.
Affichez la valeur des propriétés de partage de fichier à l'aide de la commande zfs get. L'exemple suivant illustre comment afficher la propriété share.nfs pour un système de fichiers :
# zfs get share.nfs tank/sales NAME PROPERTY VALUE SOURCE tank/sales share.nfs on local
L'exemple suivant illustre comment afficher la propriété share.nfs pour des systèmes de fichiers descendants :
# 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
Les informations de propriétés de partage étendues ne sont pas disponibles dans la syntaxe de la commande zfs get all.
Vous pouvez afficher des détails spécifiques concernant des informations de partage NFS ou SMB à l'aide de la syntaxe suivante :
# 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
Comme il existe de nombreuses propriétés de partage, envisagez de les afficher avec une valeur autre que par défaut. Par exemple :
# 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
Vous pouvez modifier les valeurs de propriété d'un partage en spécifiant des propriétés nouvelles ou modifiées sur un partage de système de fichiers. Par exemple, si la propriété lecture seule est définie quand le système de fichiers est créé, la propriété ne peut pas être désactivée.
# 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 vous créez un partage SMB, vous pouvez aussi ajouter le protocole de transfert NFS. Par exemple :
# 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 -
Supprimez le protocole SMB :
# zfs set share.smb=off tank/multifs # grep multifs /etc/dfs/sharetab /tank/multifs tank_multifs nfs sec=sys,rw
Il est possible de renommer un partage nommé. Par exemple :
# 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 -
Vous pouvez temporairement arrêter un partage nommé sans le détruire à l'aide de la commande zfs unshare. Par exemple :
# 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 -
Quand la commande zfs unshare est utilisée, tous les partages de système de fichiers sont arrêtés. Ces partages restent ainsi jusqu'à ce que la commande zfs share soit émise pour le système de fichiers ou que les propriétés share.nfs ou share.smb soient définies pour le système de fichiers.
Les partages définis ne sont pas supprimés quand la commande zfs unshare est émise et sont de nouveau actifs à l'émission suivante de la commande zfs share pour le système de fichiers ou quand la propriété share.nfs ou share.smb est définie pour le système de fichiers.
Vous pouvez arrêter un partage de système de fichiers en définissant la propriété share.nfs ou share.smb sur off. Par exemple :
# zfs set share.nfs=off tank/multifs # grep multifs /etc/dfs/sharetab #
Vous pouvez supprimer définitivement un partage nommé avec la commande zfs destroy. Par exemple :
# zfs destroy tank/home/abc%a1share
Depuis Oracle Solaris 11, vous pouvez créer et publier des partages NFS dans une zone non globale d'Oracle Solaris.
Lorsqu'un système de fichiers ZFS est monté et disponible dans une zone non globale, il peut être partagé dans cette zone.
Un système de fichiers peut être partagé dans la zone globale à condition de ne pas être délégué à ou monté dans une zone non globale. Si un système de fichiers est ajouté à une zone non globale, il peut être partagé à l'aide de la commande héritée share.
Par exemple, les systèmes de fichiers /export/home/data et export/home/data1 sont disponibles dans 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