Guide d'administration Oracle Solaris ZFS

Utilisation de ZFS dans un système Solaris avec zones installées

Les sections suivantes décrivent l'utilisation d'un système de fichiers ZFS sur un système avec des zones Oracle Solaris :

Pour plus d'informations sur la configuration de zones d'un système de fichiers ZFS racine migré ou auquel des patchs ont été appliqués à l'aide de Solaris Live Upgrade, reportez-vous à la section Utilisation d'Oracle Solaris Live Upgrade pour migrer ou mettre à jour un système comportant des zones (Solaris 10 10/08) ou Utilisation d'Oracle Solaris Live Upgrade pour migrer ou mettre à jour un système avec zones (version Solaris 5 10/09 ou supérieure).

Tenez compte des points suivants lors de l'association de jeux de données à des zones :

Dans les sections suivantes, le terme jeu de données ZFS fait référence à un système de fichier ou à un clone.

L'ajout d'un jeu de données permet à la zone non globale de partager l'espace avec la zone globale, mais l'administrateur de zone ne peut pas contrôler les propriétés ou créer de nouveaux systèmes de fichiers dans la hiérarchie de systèmes de fichiers sous-jacents. Cette opération est identique à l'ajout de tout autre type de système de fichiers à une zone. Effectuez-la lorsque vous souhaitez simplement partager de l'espace commun.

ZFS autorise également la délégation de jeux de données à une zone non globale, ce qui permet à l'administrateur de zone de contrôler parfaitement le jeu de données et ses enfants. L'administrateur de zone peut créer et détruire les systèmes de fichiers ou les clones au sein de ce jeu de données et modifier les propriétés des jeux de données. L'administrateur de zone ne peut pas affecter des jeux de données qui n'ont pas été ajoutés à la zone, y compris ceux qui dépassent les quotas de niveau supérieur du jeu de données délégué.

Tenez compte des points suivants lorsque vous utilisez un système de fichiers ZFS dans un système sur leque des zones Oracle Solaris sont installées :

Ajout de systèmes de fichiers ZFS à une zone non globale

Vous pouvez ajouter un système de fichiers ZFS en tant que système de fichiers générique lorsqu'il s'agit simplement de partager de l'espace avec la zone globale. La propriété mountpoint d'un système de fichiers ZFS ajouté à une zone non globale doit être définie sur legacy.

La sous-commande add fs de la commande zonecfg permet d'ajouter un système de fichiers ZFS à une zone non globale.

Dans l'exemple suivant, un système de fichiers ZFS est ajouté à une zone non globale par un administrateur global de la zone globale :


# zonecfg -z zion
zonecfg:zion> add fs
zonecfg:zion:fs> set type=zfs
zonecfg:zion:fs> set special=tank/zone/zion
zonecfg:zion:fs> set dir=/export/shared
zonecfg:zion:fs> end

Cette syntaxe permet d'ajouter le système de fichiers ZFS tank/zone/zion à la zone zion déjà configurée et montée sur /export/shared. La propriété mountpoint du système de fichiers doit être définie sur legacy et le système de fichiers ne peut pas être déjà monté à un autre emplacement. L'administrateur de zone peut créer et détruire des fichiers au sein du système de fichiers. Le système de fichiers ne peut pas être remonté à un autre emplacement, tout comme l'administrateur ne peut pas modifier les propriétés suivantes du système de fichiers : atime, readonly, compression, etc. L'administrateur de zone globale est chargé de la configuration et du contrôle des propriétés du système de fichiers.

Pour plus d'informations sur la commande zonecfg et les types de configuration de la commande zonecfg, reportez-vous à a la Partie II, Zones du Guide d’administration système : Gestion des ressources des conteneurs et des zones Oracle Solaris.

Délégation de jeux de données à une zone non globale

Si l'objectif principal est de déléguer l'administration du stockage d'une zone, le système de fichiers ZFS prend en charge l'ajout de jeux de données à une zone non globale à l'aide de la sous-commande add dataset de la commande zonecfg.

Dans l'exemple suivant, un système de fichiers ZFS est délégué à une zone non globale par un administrateur global dans la zone globale.


# zonecfg -z zion
zonecfg:zion> add dataset
zonecfg:zion:dataset> set name=tank/zone/zion
zonecfg:zion:dataset> end

Contrairement à l'ajout d'un système de fichiers, cette syntaxe entraîne la visibilité du système de fichiers ZFS tank/zone/zion dans la zone zion déjà configurée. L'administrateur de zone peut définir les propriétés de système de fichiers, et créer des systèmes de fichiers descendants. En outre, l'administrateur de zone peut créer des instantanés ainsi que des clones, et contrôler la totalité de la hiérarchie du système de fichiers.

Si vous utilisez Oracle Solaris Live Upgrade pour mettre à niveau l'environnement d'initialisation du système de fichiers ZFS avec des zones non globales, supprimez au préalable tous les jeux de données délégués. Sinon, l'opération Oracle Solaris Live Upgrade échoue en raison d'une erreur de système de fichier en lecture seule. Exemple :


zonecfg:zion>
zonecfg:zion> remove dataset name=tank/zone/zion
zonecfg:zion1> exit

Pour de plus amples informations relatives aux actions autorisées au sein des zones, reportez-vous à la section Gestion de propriétés ZFS au sein d'une zone.

Ajout de volumes ZFS à une zone non globale

Les volumes ZFS ne peuvent pas être ajoutés à une zone non globale à l'aide de la sous-commande add dataset de la commande zonecfg. Il est cependant possible d'ajouter des volumes à une zone à l'aide de la sous-commande add device de la commande zonecfg.

Dans l'exemple suivant, un volume ZFS est ajouté à une zone non globale par un administrateur global de la zone globale :


# zonecfg -z zion
zion: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zion> create
zonecfg:zion> add device
zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol
zonecfg:zion:device> end

Cette syntaxe ajoute le volume tank/vol à la zone zion . Notez que l'ajout d'un volume brut à une zone comporte des risques de sécurité implicites, même si le volume ne correspond pas à un périphérique physique. L'administrateur risque notamment de créer des systèmes de fichiers non conformes qui généreraient des erreurs graves dans le système en cas de tentative de montage. Pour de plus amples informations sur l'ajout de périphériques à de zones et les risques de sécurités associés, reportez-vous à la section Explication de la propriété zoned.

Pour savoir comment ajouter des périphériques à des zones, reportez-vous à la Partie II, Zones du Guide d’administration système : Gestion des ressources des conteneurs et des zones Oracle Solaris.

Utilisation de pools de stockage ZFS au sein d'une zone

Il est impossible de créer ou de modifier des pools de stockage ZFS au sein d'une zone. Le modèle d'administration délégué centralise le contrôle de périphériques de stockage physique au sein de la zone globale et le contrôle du stockage virtuel dans les zones non globales. Bien qu'un jeu de données au niveau du pool puisse être ajouté à une zone, toute commande modifiant les caractéristiques physiques du pool, comme la création, l'ajout ou la suppression de périphériques est interdite au sein de la zone. Même si les périphériques physiques sont ajoutés à une zone à l'aide de la sous-commande add device de la commande zonecfg, ou si les fichiers sont utilisés, la commande zpool n'autorise pas la création de nouveaux pools au sein de la zone.

Gestion de propriétés ZFS au sein d'une zone

Après avoir délégué un jeu de données à une zone, l'administrateur de zone peut contrôler les propriétés spécifiques au jeu de données. Lorsqu'un jeu de données est délégué à une zone, tous les ancêtres s'affichent en tant que jeux de données en lecture seule, alors que le jeu de données lui-même, ainsi que tous ses descendants, est accessible en écriture. Considérez par exemple la configuration suivante :


global# zfs list -Ho name
tank
tank/home
tank/data
tank/data/matrix
tank/data/zion
tank/data/zion/home

En cas d'ajout de tank/data/zion à une zone, chaque jeu de données dispose des propriétés suivantes :

Jeu de données 

Visible 

Accessible en écriture 

Propriétés immuables 

tank

Oui 

Non 

tank/home

Non 

tank/data

Oui 

Non 

tank/data/matrix

Non 

tank/data/zion

Oui 

Oui 

sharenfs, zoned, quota, reservation

tank/data/zion/home

Oui 

Oui 

sharenfs, zoned

Notez que chaque parent de tank/zone/zion est visible en lecture seule, que tous les descendants sont accessibles en écriture et que les jeux de données qui ne font pas partie de la hiérarchie parent sont invisibles. L'administrateur de zone ne peut pas modifier la propriété sharenfs car les zones non globales ne peuvent pas faire office de serveurs ZFS. L'administrateur de zone ne peut pas modifier la propriété zoned car cela entraînerait un risque de sécurité, tel que décrit dans la section suivante.

Les utilisateurs privilégiés dans la zone peuvent modifier toute autre propriété paramétrable, à l'exception des propriétés quota et reservation. Ce comportement permet à un administrateur de zone globale de contrôler l'espace disque occupé par tous les jeux de données utilisés par la zone non globale.

En outre, l'administrateur de zone globale ne peut pas modifier les propriétés sharenfs et mountpoint après la délégation d'un jeu de données à une zone non globale.

Explication de la propriété zoned

Lors qu'un jeu de données est délégué à une zone non globale, il doit être marqué spécialement pour que certaines propriétés ne soient pas interprétées dans le contexte de la zone globale. Lorsqu'un jeu de données est délégué à une zone non globale sous le contrôle d'un administrateur de zone, son contenu n'est plus fiable. Comme dans tous les systèmes de fichiers, cela peut entraîner la présence de binaires setuid, de liens symboliques ou d'autres contenus douteux qui pourraient compromettre la sécurité de la zone globale. De plus, l'interprétation de la propriété mountpoint est impossible dans le contexte de la zone globale. Dans le cas contraire, l'administrateur de zone pourrait affecter l'espace de noms de la zone globale. Afin de résoudre ceci, ZFS utilise la propriété zoned pour indiquer qu'un jeu de données a été délégué à une zone non globale à un moment donné.

La propriété zoned est une valeur booléenne automatiquement activée lors de la première initialisation d'une zone contenant un jeu de données ZFS. L'activation manuelle de cette propriété par un administrateur de zone n'est pas nécessaire. Si la propriété zoned est définie, le montage ou le partage du jeu de données est impossible dans la zone globale. Dans l'exemple suivant, le fichier tank/zone/zion a été délégué à une zone, alors que le fichier tank/zone/global ne l'a pas été :


# zfs list -o name,zoned,mountpoint -r tank/zone
NAME                  ZONED  MOUNTPOINT
tank/zone/global        off  /tank/zone/global
tank/zone/zion           on  /tank/zone/zion
# zfs mount
tank/zone/global           /tank/zone/global
tank/zone/zion             /export/zone/zion/root/tank/zone/zion

Notez la différence entre la propriété mountpoint et le répertoire dans lequel le jeu de données tank/zone/zion est actuellement monté. La propriété mountpoint correspond à la propriété telle qu'elle est stockée dans le disque et non à l'emplacement auquel est monté le jeu de données sur le système.

Lors de la suppression d'un jeu de données d'une zone ou de la destruction d'une zone, la propriété zoned n'est pas effacée automatiquement. Ce comportement est dû aux risques de sécurité inhérents associés à ces tâches. Dans la mesure où un utilisateur qui n'est pas fiable dispose de l'accès complet au jeu de données et à ses enfants, la propriété mountpoint risque d'être configurée sur des valeurs erronées ou des binaires setuid peuvent exister dans les systèmes de fichiers.

Afin d'éviter tout risque de sécurité, l'administrateur global doit effacer manuellement la propriété zoned pour que le jeu de données puisse être utilisé à nouveau. Avant de configurer la propriété zoned sur off, assurez-vous que la propriété mountpoint du jeu de données et de tous ses enfants est configurée sur des valeurs raisonnables et qu'il n'existe aucun binaire setuid, ou désactivez la propriété setuid.

Après avoir vérifié qu'aucune vulnérabilité n'existe au niveau de la sécurité, vous pouvez désactiver la propriété zoned à l'aide de la commande zfs set ou zfs inherit. Si la propriété zoned est désactivée alors que le jeu de données est en cours d'utilisation au sein d'une zone, le système peut se comporter de façon imprévue. Ne modifiez la propriété que si vous êtes sûr que le jeu de données n'est plus en cours d'utilisation dans une zone non globale.