1. Système de fichiers Oracle Solaris ZFS (introduction)
2. Mise en route d'Oracle Solaris ZFS
3. Différences entre les systèmes de fichiers Oracle Solaris ZFS et classiques
4. Gestion des pools de stockage Oracle Solaris ZFS
5. Installation et initialisation d'un système de fichiers racine ZFS Oracle Solaris
6. Gestion des systèmes de fichiers Oracle Solaris ZFS
7. Utilisation des instantanés et des clones ZFS Oracle Solaris
Présentation des instantanés ZFS
Création et destruction d'instantanés ZFS
Affichage et accès des instantanés ZFS
Comptabilisation de l'espace disque des instantanés ZFS
Restauration d'un instantané ZFS
Identification des différences entre des instantanés ZFS (zfs diff)
Remplacement d'un système de fichiers ZFS par un clone ZFS
Envoi et réception de données ZFS
Enregistrement de données ZFS à l'aide d'autres produits de sauvegarde
Application de différentes valeurs de propriété à un flux d'instantané ZFS
Envoi et réception de flux d'instantanés ZFS complexes
Réplication distante de données ZFS
8. Utilisation des ACL et des attributs pour protéger les fichiers Oracle Solaris ZFS
9. Administration déléguée de ZFS dans Oracle Solaris
10. Rubriques avancées Oracle Solaris ZFS
11. Dépannage d'Oracle Solaris ZFS et récupération de pool
Un instantané est une copie en lecture seule d'un système de fichiers ou d'un volume. La création des instantanés est quasiment immédiate. Initialement, elle ne consomme pas d'espace disque supplémentaire au sein du pool. Toutefois, à mesure que les données contenues dans le jeu de données actif changent, l'instantané consomme de l'espace disque en continuant à faire référence aux anciennes données et empêche donc de libérer de l'espace disque.
Les instantanés ZFS présentent les caractéristiques suivantes :
Persistance au cours des réinitialisations de système.
Théoriquement, le nombre maximal d'instantanés est de 264 instantanés.
Les instantanés n'utilisent aucune sauvegarde de secours distincte. Les instantanés consomment de l'espace disque provenant directement du pool de stockage auquel appartient le système de fichiers ou le volume à partir duquel ils ont été créés.
Une seule opération, dite atomique, permet de créer rapidement des instantanés récursifs. Ceux-ci sont tous créés simultanément ou ne sont pas créés du tout. Grâce à ce type d'opération d'instantané atomique, une certaine cohérence des données d'instantané est assurée, y compris pour les systèmes de fichiers descendants.
Il n'est pas possible d'accéder directement aux instantanés de volumes, mais ils peuvent être clonés, sauvegardés, restaurés, etc. Pour plus d'informations sur la sauvegarde d'un instantané ZFS, reportez-vous à la section Envoi et réception de données ZFS.
La commande zfs snapshot permet de créer les instantanés. Elle ne prend pour argument que le nom de l'instantané à créer. Le nom de l'instantané est spécifié comme suit :
filesystem@snapname volume@snapname
Ce nom doit respecter les conventions d'attribution de nom définies à la section Exigences d'attribution de noms de composants ZFS.
Dans l'exemple suivant, un instantané de tank/home/matt nommé friday est créé.
# zfs snapshot tank/home/matt@friday
Vous pouvez créer des instantanés pour tous les systèmes de fichiers descendants à l'aide de l'option -r. Exemple :
# zfs snapshot -r tank/home@snap1 # zfs list -t snapshot -r tank/home zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home@snap1 0 - 34K - tank/home/mark@snap1 0 - 2.00G - tank/home/matt@snap1 0 - 1.00G - tank/home/tom@snap1 0 - 2.00G -
Les propriétés des instantanés ne sont pas modifiables. Les propriétés des jeux de données ne peuvent pas être appliquées à un instantané. Exemple :
# zfs set compression=on tank/home/matt@friday cannot set property for 'tank/home/matt@friday': this property can not be modified for snapshots
La commande zfs destroy permet de détruire les instantanés. Exemple :
# zfs destroy tank/home/matt@friday
La destruction d'un jeu de données est impossible s'il existe des instantanés du jeu de données. Exemple :
# zfs destroy tank/home/matt cannot destroy 'tank/home/matt': filesystem has children use '-r' to destroy the following datasets: tank/home/matt@tuesday tank/home/matt@wednesday tank/home/matt@thursday
En outre, afin de pouvoir détruire l'instantané utilisé pour créer les clones, vous devez au préalable détruire les clones.
Pour de plus amples informations sur la sous-commande destroy, reportez-vous à la section Destruction d'un système de fichiers ZFS.
Si vous disposez de plusieurs stratégies automatiques pour les instantanés pour que l'instantané le plus ancien soit par exemple détruit par la commande zfs receive car il n'existe plus du côté de l'envoi, vous pouvez utiliser la fonction de conservation des instantanés.
La conservation d'un instantané empêche sa destruction. En outre, cette fonction permet de supprimer un instantané contenant des clones en attendant la suppression du dernier clone à l'aide de la commande zfs destroy -d. Chaque instantané est associé à un décompte de référence utilisateur initialisé sur 0 (zéro). Ce nombre augmente de 1 à chaque fois qu'un instantané est conservé et diminue de 1 à chaque fois qu'un instantané conservé est libéré.
Dans la version précédente d'Oracle Solaris, les instantanés pouvaient uniquement être détruits à l'aide de la commande zfs destroy s'ils ne contenaient aucun clone. Dans cette version d'Oracle Solaris, les instantanés doivent également renvoyer un décompte de référence utilisateur égal à 0 (zéro).
Vous pouvez conserver un instantané ou un jeu d'instantanés. Par exemple, la syntaxe suivante insère une balise de conservation keep sur citerne/home/cindys/snap@1 :
# zfs hold keep tank/home/cindy@snap1
Vous pouvez utiliser l'option -r pour conserver récursivement les instantanés de tous les systèmes de fichiers descendants. Exemple :
# zfs snapshot -r tank/home@now # zfs hold -r keep tank/home@now
Cette syntaxe permet d'ajouter une référence keep unique à cet instantané ou à ce jeu d'instantanés. Chaque instantané possède son propre espace de noms de balise dans lequel chaque balise de conservation doit être unique. Si un instantané est conservé, les tentatives de destruction de ce dernier à l'aide de la commande zfs destroy échoueront. Par exemple :
# zfs destroy tank/home/cindy@snap1 cannot destroy 'tank/home/cindy@snap1': dataset is busy
Pour détruire un instantané conservé, utilisez l'option -d. Par exemple :
# zfs destroy -d tank/home/cindy@snap1
Utilisez la commande zfs holds pour afficher la liste des instantanés conservés. Exemple :
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Fri May 6 06:34:03 2011
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindy@now keep Fri May 6 06:34:03 2011 tank/home/mark@now keep Fri May 6 06:34:03 2011 tank/home/matt@now keep Fri May 6 06:34:03 2011 tank/home/tom@now keep Fri May 6 06:34:03 2011 tank/home@now keep Fri May 6 06:34:03 2011
Vous pouvez utiliser la commande zfs release pour libérer un instantané ou un jeu d'instantanés conservé. Exemple :
# zfs release -r keep tank/home@now
Si l'instantané est libéré, l'instantané peut être détruit à l'aide de la commande zfs destroy. Par exemple :
# zfs destroy -r tank/home@now
Deux nouvelles propriétés permettent d'identifier les informations de conservation d'un instantané :
La propriété defer_destroy est définie sur on si l'instantané a été marqué en vue d'une destruction différée à l'aide de la commande zfs destroy -d. Dans le cas contraire, la propriété est définie sur off.
La propriété userrefs également appelée décompte de référence utilisateur, est définie sur le nombre de conservations pour cet instantané.
Vous pouvez renommer les instantanés. Cependant, ils doivent rester dans le même pool et dans le même jeu de données dans lequel il ont été créés. Exemple :
# zfs rename tank/home/cindy@snap1 tank/home/cindy@today
En outre, la syntaxe de raccourci suivante est équivalente à la syntaxe précédente :
# zfs rename tank/home/cindy@snap1 today
L'opération de renommage (rename) d'instantané n'est pas prise en charge, car le nom du pool cible et celui du système de fichiers ne correspondent pas au pool et au système de fichiers dans lesquels l'instantané a été créé :
# zfs rename tank/home/cindy@today pool/home/cindy@saturday cannot rename to 'pool/home/cindy@today': snapshots must be part of same dataset
Vous pouvez renommer de manière récursive les instantanés à l'aide de la commande zfs rename - r. Exemple :
# zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@yesterday 0 - 38K - users/home/lori@yesterday 0 - 2.00G - users/home/mark@yesterday 0 - 1.00G - users/home/neil@yesterday 0 - 2.00G - # zfs rename -r users/home@yesterday @2daysago # zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@2daysago 0 - 38K - users/home/lori@2daysago 0 - 2.00G - users/home/mark@2daysago 0 - 1.00G - users/home/neil@2daysago 0 - 2.00G -
Vous pouvez activer ou désactiver l'affichage des listes d'instantanés de la sortie zfs list en utilisant la propriété de pool listsnapshots. Cette propriété est activée par défaut.
Si vous désactivez cette propriété, vous pouvez utiliser la commande zfs list -t snapshot pour afficher les informations relatives à un instantané. Ou activez la propriété de pool listsnapshots. Exemple :
# zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots on default # zpool set listsnapshots=off tank # zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots off local
Les instantanés des systèmes de fichiers sont accessibles dans le répertoire .zfs/snapshot au sein de la racine du système de fichiers. Par exemple, si tank/home/ahrens est monté sur /home/ahrens, les données de l'instantané tank/home/ahrens@thursday sont accessibles dans le répertoire /home/ahrens/.zfs/snapshot/thursday.
# ls /tank/home/matt/.zfs/snapshot tuesday wednesday thursday
Vous pouvez répertorier les instantanés comme suit :
# zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home/cindy@today 0 - 2.00G - tank/home/mark@today 0 - 2.00G - tank/home/matt@tuesday 20K - 1.00G - tank/home/matt@wednesday 20K - 1.00G - tank/home/matt@thursday 0 - 1.00G -
Vous pouvez répertorier les instantanés qui ont été créés pour un système de fichiers particulier comme suit :
# zfs list -r -t snapshot -o name,creation tank/home NAME CREATION tank/home/cindy@today Fri May 6 6:32 2011 tank/home/mark@today Fri May 6 6:22 2011 tank/home/matt@tuesday Tue May 3 6:27 2011 tank/home/matt@wednesday Wed May 4 6:28 2011 tank/home/matt@thursday Thu May 5 6:28 2011
Lors de la création d'un instantané, son espace disque est initialement partagé entre l'instantané et le système de fichiers et éventuellement avec des instantanés précédents. Lorsque le système de fichiers change, l'espace disque précédemment partagé devient dédié à l'instantané, et il est compté dans la propriété used de l'instantané. De plus, la suppression d'instantanés peut augmenter la quantité d'espace disque dédié à d'autres instantanés (et, par conséquent, utilisé par ceux-ci).
La valeur de la propriété referenced de l'espace d'un instantané est la même que lors de la création de l'instantané sur le système de fichiers.
Vous pouvez identifier des informations supplémentaires sur la façon dont les valeurs de la propriété used sont utilisées. Les nouvelles propriétés de système de fichiers en lecture seule décrivent l'utilisation de l'espace disque pour les clones, les systèmes de fichiers et les volumes. Exemple :
$ zfs list -o space -r rpool NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 59.1G 7.84G 21K 109K 0 7.84G rpool@snap1 - 21K - - - - rpool/ROOT 59.1G 4.78G 0 31K 0 4.78G rpool/ROOT@snap1 - 0 - - - - rpool/ROOT/zfsBE 59.1G 4.78G 15.6M 4.76G 0 0 rpool/ROOT/zfsBE@snap1 - 15.6M - - - - rpool/dump 59.1G 1.00G 16K 1.00G 0 0 rpool/dump@snap1 - 16K - - - - rpool/export 59.1G 99K 18K 32K 0 49K rpool/export@snap1 - 18K - - - - rpool/export/home 59.1G 49K 18K 31K 0 0 rpool/export/home@snap1 - 18K - - - - rpool/swap 61.2G 2.06G 0 16K 2.06G 0 rpool/swap@snap1 - 0 - - - -
Pour une description de ces propriétés, reportez-vous au Tableau 6-1.
Vous pouvez utiliser la commande zfs rollback pour abandonner toutes les modifications apportées à un système de fichiers depuis la création d'un instantané spécifique. Le système de fichiers revient à l'état dans lequel il était lors de la prise de l'instantané. Par défaut, la commande ne permet pas de restaurer un instantané autre que le plus récent.
Pour restaurer un instantané précédent, tous les instantanés intermédiaires doivent être détruits. Vous pouvez détruire les instantanés précédents en spécifiant l'option -r.
S'il existe des clones d'un instantané intermédiaire, vous devez spécifier l'option -R pour détruire également les clones.
Remarque - Si le système de fichiers que vous souhaitez restaurer est actuellement monté, il doit être démonté, puis remonté. Si le système de fichiers ne peut pas être démonté, la restauration échoue. L'option -f force le démontage du système de fichiers, le cas échéant.
Dans l'exemple suivant, le système de fichiers tank/home/ahrens revient à l'instantané tuesday :
# zfs rollback tank/home/matt@tuesday cannot rollback to 'tank/home/matt@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/matt@wednesday tank/home/matt@thursday # zfs rollback -r tank/home/matt@tuesday
Dans cet exemple, les instantanés wednesday et thursday sont détruits en raison de la restauration de l'instantané tuesday précédent.
# zfs list -r -t snapshot -o name,creation tank/home/matt NAME CREATION tank/home/matt@tuesday Tue May 3 6:27 2011
Vous pouvez déterminer les différences entre des instantanés ZFS en utilisant la commande zfs diff.
Supposons par exemple que les deux instantanés suivants sont créés :
$ ls /tank/home/tim fileA $ zfs snapshot tank/home/tim@snap1 $ ls /tank/home/tim fileA fileB $ zfs snapshot tank/home/tim@snap2
Par exemple, afin d'identifier les différences entre deux instantanés, utilisez une syntaxe semblable à la suivante :
$ zfs diff tank/home/tim@snap1 tank/home/timh@snap2 M /tank/home/tim/ + /tank/home/tim/fileB
Dans la sortie, M indique que le répertoire a été modifié. Le + indique que fileB existe dans l'instantané le plus récent.
Dans la sortie suivante, le R indique qu'un fichier dans un instantané a été renommé.
$ mv /tank/cindy/fileB /tank/cindy/fileC $ zfs snapshot tank/cindy@snap2 $ zfs diff tank/cindy@snap1 tank/cindy@snap2 M /tank/cindy/ R /tank/cindy/fileB -> /tank/cindy/fileC
Le tableau suivant résume les modifications apportées au fichier ou au répertoire identifiées par la commande zfs diff.
|
Pour de plus amples informations, reportez-vous à la page de manuel zfs(1M).