BigAdmin System Administration Portal
Article de fond
Print-friendly VersionPrint-friendly Version

Présentation et guide de ZFS

Don Turnbull, mars 2007 (mis à jour en mars 2009)

Ressources ZFS
 
 

ZFS est la toute dernière méthode de gestion du stockage de Sun Microsystems dans le système d'exploitation Solaris 10. ZFS intègre un gestionnaire de volumes avec un système de fichiers conforme POSIX et disposant d'un large éventail d'outils de gestion. Du point de vue des applications, le système de fichiers se comporte comme un système de fichiers classique, mais offre des performances et une capacité nettement accrues. Enfin, le système ZFS met à la disposition de l'administrateur système une large gamme d'outils comparables aux meilleures solutions de gestion du volume et de sauvegarde.

Ce guide est destiné à fournir une présentation qui soit utile aux personnes effectuant une configuration ZFS pour la première fois. ZFS intègre de nombreuses fonctions et options non traitées dans ce guide. Ces fonctions s'avèrent utiles dans certaines circonstances qui ne se prêtent pas à figurer dans cette vue d'ensemble. Veuillez vous reporter aux pages de manuels zfs(1M) et zpool(1M) pour davantage d'informations. Des documentations supplémentaires sont disponibles sur docs.sun.com. Une autre très bonne ressource est la communauté ZFS OpenSolaris. Pour des ressources supplémentaires, reportez-vous à la section Pour de plus amples informations, ci-dessous.


Concepts généraux

Pools de stockage

ZFS organise les périphériques physiques dans des pools logiques appelés pools de stockage. Les numéros d'unités logiques (LUN, Logical Unit Number) des disques individuels ainsi que des baies de disques visibles par le système d'exploitation peuvent être inclus dans un pool ZFS. ZFS peut également se baser sur des structures de stockage moins conventionnelles, mais ces fonctions ne sont pas traitées dans ce guide.

Les pools de stockage peuvent être des ensembles de disques entrelacés sans redondance (RAID 0), des disques en miroir (RAID 1), des ensembles de miroirs entrelacés (RAID 1 + 0), ou entrelacés avec parité (RAID Z). Des disques supplémentaires peuvent être ajoutés aux pools à tout moment, mais doivent être ajoutés avec le même niveau RAID. Par exemple, si un pool est configuré avec des volumes RAID 1, des disques peuvent uniquement être ajoutés au pool dans des ensembles en miroir dans le même nombre que celui défini lors de la création du pool. À partir du moment où des disques sont ajoutés aux pools, le stockage supplémentaire est automatiquement utilisé.

Remarque : l'ajout de disques à un pool entraîne l'écriture de données sur les nouveaux disques lorsque des écritures sont effectuées dans le pool. Les données existantes ne sont pas redistribuées automatiquement, mais le sont après modification.

Lors de l'organisation de disques en pools, les problèmes suivants doivent être pris en compte :

  • Conflit au niveau du disque. Utilisez des disques entiers dans les pools de stockage. Si des partitions de disques individuelles sont utilisées pour construire un pool de stockage, des conflits peuvent se produire entre le pool et les partitions non incluses dans le pool. N'incluez jamais un disque dans plus d'un pool de stockage.
  • Conflit au niveau du contrôleur. Essayez d'équilibrer la charge prévue entre les contrôleurs disponibles. Par exemple, lors de la configuration de disques pour une base de données Oracle, créez le pool qui stockera les espaces de tables de données avec des disques affectés à des contrôleurs différents de ceux du pool qui stockera les espaces de tables d'index. Le numéro du contrôleur d'un disque est représenté par le nombre après le "c" dans le nom de périphérique du disque (/dev/dsk/c1t0d0 est un disque sur le contrôleur 1).
  • Agencement des systèmes de fichiers. Plusieurs systèmes de fichiers peuvent être intégrés dans un même pool de stockage. Prévoyez la taille et la composition des pools pour contenir des systèmes de fichiers similaires. Par exemple, au lieu de construire 10 pools pour 10 systèmes de fichiers, les performances seraient améliorées en créant deux pools et en organisant les systèmes de fichiers dans chaque pool afin d'éviter les conflits à l'intérieur de ces derniers (autrement dit, n'utilisez pas le même pool pour les index et les données de tables).

Remarque : RAID-Z est une implémentation spéciale de RAID-5 pour ZFS permettant aux volumes entrelacés d'être plus faciles à étendre avec des performances et une disponibilité supérieures.

Conseil 1 :
Les pools de stockage sont plus performants à mesure que l'on y ajoute des disques. Ajoutez dans chaque pool autant de disques que possible et créez dans chaque pool plusieurs systèmes de fichiers.

Système de fichiers ZFS

ZFS offre au système d'exploitation une interface de système de fichiers conforme POSIX. En bref, un système de fichiers ZFS ressemble et agit exactement comme un système de fichiers UFS, excepté que les fichiers et systèmes de fichiers ZFS peuvent être bien plus grands et que le système ZFS fonctionnera beaucoup mieux s'il est correctement configuré.

Remarque : Il n'est pas nécessaire de connaître la taille que fera un système de fichiers pour le créer.

Les systèmes de fichiers ZFS s'étendront automatiquement à la taille de leurs pools de stockage.

Les systèmes de fichiers ZFS doivent être créés dans un et un seul pool de stockage, mais un pool de stockage peut avoir plus d'un système de fichiers défini. Chaque système de fichiers dans un pool de stockage peut accéder à tout l'espace non utilisé du pool de stockage. Lorsqu'un système de fichiers utilise de l'espace disque, cet espace lui est réservé jusqu'à ce que l'espace soit rendu au pool, lorsque le ou les fichiers occupant l'espace sont supprimés. Pendant ce temps, l'espace disponible pour tous les systèmes de fichiers présents dans le même pool sera réduit.

Les systèmes de fichiers ZFS ne sont pas nécessairement gérés dans le fichier /etc/vfstab. Les fichiers spéciaux de périphériques et les périphériques logiques peuvent être construits dans des pools ZFS et montés à l'aide du fichier vfstab, mais ceci n'entre pas dans le domaine d'application de ce guide. La méthode conventionnelle pour monter un système de fichiers ZFS consiste simplement à le définir par rapport à un pool. Tous les systèmes de fichiers ZFS définis sont automatiquement montés au démarrage, sauf si configurés autrement.

Enfin, le point de montage par défaut pour un système de fichiers ZFS est basé sur le nom du pool et le nom du système de fichiers. Par exemple, un système de fichiers nommé data1 dans le pool indexes sera monté par défaut comme /indexes/data1. Ce point de montage par défaut peut être modifié soit lors de la création du système de fichiers, soit plus tard si vous le souhaitez.


L'interface de ligne de commande

L'interface de ligne de commande se compose principalement des commandes zfs et zpool. Lors de l'utilisation de ces commandes, tous les périphériques de stockage dans n'importe quel système peuvent être configurés et rendus disponibles. Une interface graphique est disponible par l'intermédiaire de Sun Management Center. Veuillez consulter la documentation SMC sur docs.sun.com pour de plus amples informations.

Par exemple, supposons qu'un nouveau serveur nommé proddb.mydomain.com soit configuré pour être utilisé comme serveur de base de données. Les tables et les index doivent être sur des disques distincts, mais les disques doivent être configurés pour des services à haute disponibilité, offrant un espace utilisable le plus grand possible. Sur un système traditionnel, au moins deux baies seraient configurées sur des contrôleurs de stockage distincts, mises à la disposition du serveur au moyen d'un RAID matériel ou d'un gestionnaire de volumes logiques (tel que Solaris Volume Manager) et, les systèmes de fichiers UFS construits sur les fichiers périphériques seraient alors offerts à partir du volume RAID ou du gestionnaire de volumes logiques. Cette section décrit comment la même tâche peut être réalisée avec ZFS.

Planification pour ZFS

Conseil 2 :
Utilisez la commande format afin de déterminer la liste des périphériques disponibles et pour adresser des problèmes de configuration avec ces périphériques.

Cette procédure doit être effectuée avant de configurer ZFS sur un nouveau système. Toutes Les commandes doivent être exécutées par l'utilisateur root ou par un utilisateur possédant des privilèges superutilisateur :

  • Déterminer les périphériques disponibles sur le système local.

    Avant de configurer ZFS, il est important de s'assurer des disques disponibles pour le système.

  • Assurez-vous que ces périphériques sont correctement configurés dans le système d'exploitation.

    Différentes plates-formes et différents périphériques requièrent différentes étapes de configuration avant de pouvoir être utilisés de manière fiable avec le SE Solaris. Consultez la documentation fournie avec vos périphériques de stockage et avec le SE pour plus d'informations.

  • Planifier quels pools et systèmes de fichiers seront nécessaires.

    Vérifiez les utilisations prévues pour le système et déterminez quels pools seront nécessaires et quels systèmes de fichiers seront dans chaque pool. Les systèmes de fichiers peuvent être migrés d'un pool à un autre, il n'est donc pas nécessaire d'être absolument exact ; prévoyez d'expérimenter jusqu'à ce que vous trouviez le bon équilibre.

  • Déterminez les périphériques à inclure dans chaque pool.

    Faites correspondre la liste des pools avec la liste des périphériques et prenez en compte les problèmes de conflits de disques et de contrôleurs ainsi que tout RAID matériel déjà utilisé sur les périphériques disponibles.

Des informations supplémentaires de planification peuvent être trouvées sur docs.sun.com.

Dans l'exemple en cours, deux corps de simples concaténations de disques non RAID (JBOD, "Just a bunch of disks") sont connectés au serveur. Bien qu'il n'y ait aucune raison d'éviter les systèmes RAID matériels lors de l'utilisation de ZFS, cet exemple est plus clair sans système RAID matériel. Vous trouverez ci-dessous la liste des périphériques physiques obtenue à partir des disques connectés.

c2t0d0
c4t0d0
c3t0d0
c5t0d0
c2t1d0
c4t1d0
c3t1d0
c5t1d0
c2t2d0
c4t2d0
c3t2d0
c5t2d0
c2t3d0
c4t3d0
c3t3d0
c5t3d0

En se basant sur la nécessité de séparer les index des données, on décide d'utiliser deux pools nommés respectivement indexes et tables. Afin d'éviter tout conflit de contrôleurs, tous les disques des contrôleurs 2 et 4 seront dans le pool indexes et ceux des contrôleurs 3 et 5 seront dans le pool tables. Les deux pools seront configurés en utilisant RAID-Z afin de maximiser la capacité utilisable.

Création d'un pool de stockage

Les groupes de stockage sont créés avec la commande zpool. Veuillez consulter la page de manuel zpool (1M) pour de plus amples informations sur toutes les options de commande. Voici néanmoins la syntaxe de commande permettant de créer un nouveau pool ZFS :


#  zpool create <pool_name> [<configuration>] <device_files>

La commande demande à l'utilisateur de fournir un nom pour le nouveau pool, ainsi que les noms de fichiers des périphériques de disques, sans chemin (c#t#d# par opposition à /dev/dsk/c#t#d#). De plus, si un indicateur de configuration comme mirror ou raidz est utilisé, la liste des périphériques sera configurée en utilisant la configuration demandée. Sinon, tous les disques nommés seront entrelacés sans parité ou autres fonctions à haute disponibilité.

Conseil 3 :
Jetez un oeil à l'option -m pour définir un point de montage spécifique, ou à l'option -R pour redéfinir le chemin d'accès racine relatif au point de montage par défaut.

Dans notre exemple, la commande zpool permettant de créer deux pools de stockage RAID-Z de 8 disques, chacun ayant le moins de conflits contrôleurs possible, serait la suivante :

# zpool create indexes raidz c2t0d0 c2t1d0 c2t2d0 \
  c2t3d0 c4t0d0 c4t1d0 c4t2d0 c4t3d0
# zpool create tables raidz c3t0d0 c3t1d0 c3t2d0 \
  c3t3d0 c5t0d0 c5t1d0 c5t2d0 c5t3d0

Ces commandes auront pour effet de créer deux pools, nommés respectivement indexes et tables, chacun en RAID-Z avec entrelacement des disques et redondance des données. Les noms de pools ZFS peuvent être désignés par tout mot commençant par une lettre, à l'exception des chaînes mirror, raidz, spare, ou toute chaîne commençant par c## est un chiffre entre 0 et 9. Les noms de pools ZFS peuvent comprendre uniquement des lettres, chiffres, tirets, tirets bas ou des points.

Création de systèmes de fichiers

Si le système de fichiers par défaut qui est créé n'est pas suffisant pour s'adapter aux besoins du système, d'autres systèmes de fichiers peuvent être créés en utilisant la commande zfs. Veuillez consulter la page de manuel zfs (1M) pour de plus amples informations sur les options de la commande.

Supposons que dans notre exemple, deux bases de données doivent être configurées sur le nouvel élément de stockage et, qu'à des fins de gestion, chaque base de données requiert son propre point de montage dans les pools indexes et tables. Utilisez la commande zfs pour créer les systèmes de fichiers désirés, en procédant comme suit :


# zfs create indexes/db1
# zfs create indexes/db2
# zfs create tables/db1
# zfs create tables/db2

Remarque : Faites preuve de prudence lorsque vous nommez les systèmes de fichiers. Il est possible de réutiliser le même nom pour différents systèmes de fichiers situés dans des pools différents, ce qui peut se révéler problématique.

Ceci a pour effet d'ajouter un point de montage distinct pour db1 et db2 à la fois dans /indexes et /tables. La sortie de montage devrait ressembler à ce qui suit :

L'espace disponible pour /indexes, /indexes/db1 et /indexes/db2 correspond à l'intégralité de l'espace défini dans le pool indexes. De même, l'espace disponible pour /tables, /tables/db1 et /tables/db2 correspond à l'intégralité de l'espace défini dans le pool tables. Les systèmes de fichiers db1 et db2 de chaque pool sont montés en tant que systèmes de fichiers distincts, afin de fournir des interfaces de contrôle et de gestion séparées pour chaque système de fichiers défini.

Conseil 4 :
Jetez un oeil à l'option set de la commande zfs pour manipuler le point de montage et les autres propriétés de chaque système de fichiers.

Affichage des informations

Les informations concernant les pools et les systèmes de fichiers peuvent être affichées à l'aide des commandes list pour zpool et zfs. D'autres commandes existent également. Veuillez lire les pages de manuels zfs et zpool pour en obtenir la liste complète.


# zpool list

NAME            SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
indexes         240M    110K    240M     0%  ONLINE     -
tables          240M    110K    240M     0%  ONLINE     -

# zfs list

NAME            USED    AVAIL  REFER  MOUNTPOINT
indexes         107K    208M   25.5K  /indexes
indexes/db1     24.5K   208M   24.5K  /indexes/db1
indexes/db2     24.5K   208M   24.5K  /indexes/db2
tables          107K    208M   25.5K  /tables
tables/db1      24.5K   208M   24.5K  /indexes/db1
tables/db2      24.5K   208M   24.5K  /indexes/db2

Contrôle

Bien qu'une discussion détaillée sur le contrôle sorte de la portée de ce document, une présentation de ZFS serait incomplète sans aborder le contrôle intégré de ZFS. Comme pour la gestion, la commande de contrôle du système est simple :


# zpool iostat <pool_name> <interval> <count>

Cette commande fonctionne de façon très similaire à la commande iostat disponible dans le système d'exploitation. Si le nom du pool n'est pas spécifié, la commande fournit un rapport sur tous les pools définis. Si aucune durée n'est spécifiée, la commande continue à fournir des rapports jusqu'à ce qu'elle soit arrêtée. Une commande distincte était nécessaire étant donné que la commande iostat du système d'exploitation ne détecte pas les véritables opérations de lecture et d'écriture effectuées par ZFS ; elle ne peut uniquement afficher que celles soumises et demandées auprès des systèmes de fichiers.

Le résultat de la commande est le suivant :


# zpool iostat test_pool 5 10

               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
test_pool     80K  1.52G      0      7      0   153K
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0
test_pool     80K  1.52G      0      0      0      0

D'autres commandes peuvent être utilisées pour contribuer à une meilleure compréhension de la part de l'administrateur, concernant le statut, les performances, les options et la configuration des pools ZFS et des systèmes de fichiers en cours d'exécution. Veuillez lire les pages de manuels zfs et zpool pour de plus amples informations.

Récapitulatif

A l'aide de seulement deux commandes, zpool et zfs, le serveur de base de données proddb.mydomain.com possède quatre systèmes de fichiers montés : deux pour les index et deux pour les tables. Lorsque les bases de données sont créées, les tables pour db1 partent dans des fichiers sous /tables/db1 et les index de db1 vont dans /indexes/bd1. Les emplacements de la seconde base de données, db2, sont /indexes/db2 et /tables/db2. Les points de montage sous /indexes sont basés sur des disques et contrôleurs différents de ceux qui sont sous /tables. Enfin, en utilisant RAID-Z, un disque dans chaque pool peut tomber en panne sans engendrer de pertes de données.

Notons qu'il n'est pas nécessaire dans ZFS que les disques soient séparés par des contrôleurs, soient des lecteurs autonomes, soient internes ou externes, soient gérés par des contrôleurs matériels RAID, ou soient reliés à l'aide d'une technologie particulière. ZFS gérera n'importe quel périphérique de stockage qui se représente, tout ou partie, en tant que fichier de périphérique dans le système d'exploitation Solaris. Cet exemple est destiné à fournir un contexte pour les informations figurant dans ce guide ; il ne fournit en aucun cas une démonstration complète des capacités de ZFS.


Exemple de script

Voici un exemple de script qui peut être copié et collé pour exécuter l'exemple présenté dans ce guide. Assurez-vous de modifier dans le script tout ce qui est présenté en gras afin de l'adapter à vos besoins :

#!/bin/sh
# This script must be run as root or as a user with appropriate
# role-based access control (RBAC) privileges.

##################################################################
#
# Create pools
#
# Creating pools also creates mount points. If you do not need
# more mount points than pools and the pool names are acceptable
# for mount points, you need not do more than create the pools.
#
# Create as many pools as you want.  Pools define the groups of
# disks under management. All disks in a pool must be managed
# in the same way (RAID-Z, mirrored, and so on), but each pool
# may have a different raid level. Use pools in the same way
# traditional RAID manager LUNs are used.
#
# Create first pool. Change the pool name (indexes), the raid flag
# (raidz), and the disk names (c#t#d#) to suite your local
# requirements. Read the zpool man page to determine the available
# options for the raid flag.

zpool create indexes raidz c2t0d0 c2t1d0 c2t2d0 c2t3d0 c4t0d0 c4t1d0 c4t2d0 c4t3d0

# Create second pool.  Change the pool name (tables), the raid flag
# (raidz), and the disk names (c#t#d#) to suite your local
# requirements. Read the zpool man page to determine the available
# options for the raid flag.

zpool create tables raidz c3t0d0 c3t1d0 c3t2d0 c3t3d0 c5t0d0 c5t1d0 c5t2d0 c5t3d0

##################################################################
#
# Create mounts
#
# Creating mounts may not be necessary as each pool forms a mount
# by default. However, if you need more than one mount point per
# pool, use the following commands to provide distinct mount
# points based on the pools created above.  All mount points have
# access to the full amount of free space in the mount point's
# designated pool. As any one mount point uses space, available
# space for all mount points decreases.
#
# Create the first mount point. The mount will be in the path
# shown from root unless changed later. Be sure to change the
# pool name (indexes) to suit the pools created previously and the
# file system name (db1) to suit your local needs.  Please see
# the zfs man page for information on options and settings.

zfs create indexes/db1

# Create the first mount point. The mount will be in the path
# shown from root unless changed later. Be sure to change the
# pool name (indexes) to suit the pools created previously and the
# file system name (db2) to suit your local needs.  Please
# see the zfs man page for information on options and settings.

zfs create indexes/db2

# Create the first mount point. The mount will be in the path
# shown from root unless changed later. Be sure to change
# the pool name (tables) to suit the pools created previously
# and the file system name (db1) to suit your local needs.
# Please see the zfs man page for information on options and
# settings.

zfs create tables/db1

# Create the first mount point. The mount will be in the path
# shown from root unless changed later. Be sure to change the
# pool name (tables) to suit the pools created previously and
# the file system name (db2) to suit your local needs.  Please
# see the zfs man page for information on options and settings.

zfs create tables/db2


Pour en savoir plus

Mises à jour

Mars 2009 :

  1. Mises à jour concernant la table des périphériques physiques dans Plannification pour ZFS.
  2. Dans Création d'un pool de stockage, suppression de "Les pools sont automatiquement mis en ligne et montés en tant que systèmes de fichiers ZFS par rapport à /data1 et /data2 respectivement."
  3. Dans Exemple de script, les pools data1 et data2 ont été remplacés par "indexes" et "tables" et ZFS fs1 et fs2 ont été remplacés par ZFS db1 et db2
  4. Ajout du hub BigAdmin sur ZFS.


Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub