Ce chapitre fournit des informations sur la création et la gestion d'instantanés et de clones ZFS Oracle Solaris. Des informations concernant l'enregistrement des instantanés sont également fournies.
Il contient les sections suivantes :
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/ahrens nommé friday est créé.
# zfs snapshot tank/home/ahrens@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@now # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/zfs2BE@zfs2BE 78.3M - 4.53G - tank/home@now 0 - 26K - tank/home/ahrens@now 0 - 259M - tank/home/anne@now 0 - 156M - tank/home/bob@now 0 - 156M - tank/home/cindys@now 0 - 104M - |
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/ahrens@now cannot set compression property for 'tank/home/ahrens@now': snapshot properties cannot be modified |
La commande zfs destroy permet de détruire les instantanés. Exemple :
# zfs destroy tank/home/ahrens@now |
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/ahrens cannot destroy 'tank/home/ahrens': filesystem has children use '-r' to destroy the following datasets: tank/home/ahrens@tuesday tank/home/ahrens@wednesday tank/home/ahrens@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 de Solaris, les instantanés ne peuvent pas être détruits à l'aide de la commande zfs destroy s'ils ne contiennent aucun clone. Dans cette version de 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/cindys@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. Exemple :
# zfs destroy tank/home/cindys@snap1 cannot destroy 'tank/home/cindys@snap1': dataset is busy |
Si vous souhaitez détruire un instantané conservé, utilisez l'option -d. Exemple :
# zfs destroy -d tank/home/cindys@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 Thu Jul 15 11:25:39 2010 |
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindys@now keep Thu Jul 15 11:25:39 2010 tank/home/mark@now keep Thu Jul 15 11:25:39 2010 tank/home@now keep Thu Jul 15 11:25:39 2010 |
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. 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 est définie sur le nombre de conservations d'instantanés, également appelée décompte de références utilisateur.
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/cindys@083006 tank/home/cindys@today |
En outre, la syntaxe de raccourci suivante est équivalente à la syntaxe précédente :
# zfs rename tank/home/cindys@083006 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/cindys@today pool/home/cindys@saturday cannot rename to 'pool/home/cindys@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 NAME USED AVAIL REFER MOUNTPOINT users 270K 16.5G 22K /users users/home 76K 16.5G 22K /users/home users/home@yesterday 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@yesterday 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@yesterday 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@yesterday 0 - 18K - # zfs rename -r users/home@yesterday @2daysago # zfs list -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home 76K 16.5G 22K /users/home users/home@2daysago 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@2daysago 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@2daysago 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@2daysago 0 - 18K - |
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/ahrens/.zfs/snapshot tuesday wednesday thursday |
Vous pouvez répertorier les instantanés comme suit :
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home/anne@monday 0 - 780K - pool/home/bob@monday 0 - 1.01M - tank/home/ahrens@tuesday 8.50K - 780K - tank/home/ahrens@wednesday 8.50K - 1.01M - tank/home/ahrens@thursday 0 - 1.77M - tank/home/cindys@today 8.50K - 524K - |
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@now Wed Jun 30 16:16 2010 tank/home/ahrens@now Wed Jun 30 16:16 2010 tank/home/anne@now Wed Jun 30 16:16 2010 tank/home/bob@now Wed Jun 30 16:16 2010 tank/home/cindys@now Wed Jun 30 16:16 2010 |
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 # zfs list -ro space tank/home NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/home 66.3G 675M 0 26K 0 675M tank/home@now - 0 - - - - tank/home/ahrens 66.3G 259M 0 259M 0 0 tank/home/ahrens@now - 0 - - - - tank/home/anne 66.3G 156M 0 156M 0 0 tank/home/anne@now - 0 - - - - tank/home/bob 66.3G 156M 0 156M 0 0 tank/home/bob@now - 0 - - - - tank/home/cindys 66.3G 104M 0 104M 0 0 tank/home/cindys@now - 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.
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/ahrens@tuesday cannot rollback to 'tank/home/ahrens@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/ahrens@wednesday tank/home/ahrens@thursday # zfs rollback -r tank/home/ahrens@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/ahrens NAME CREATION tank/home/ahrens@now Wed Jun 30 16:16 2010 |
Un clone est un volume ou un système de fichiers accessible en écriture et dont le contenu initial est similaire à celui du jeu de données à partir duquel il a été créé. Tout comme pour les instantanés, la création d'un clone est quasiment instantanée et ne consomme initialement aucun espace disque supplémentaire. Vous pouvez d'autre part créer un instantané d'un clone.
Les clones se créent uniquement à partir d'un instantané. Lors du clonage d'un instantané, une dépendance implicite se crée entre le clone et l'instantané. Même en cas de création d'un clone à un autre emplacement de la hiérarchie, l'instantané d'origine ne peut pas être détruit tant que le clone existe. La propriété origin indique cette dépendance et la commande zfs destroy répertorie ces dépendances, le cas échéant.
Un clone n'hérite pas des propriétés du jeu de données à partir duquel il a été créé. Les commandes zfs get et zfs set permettent d'afficher et de modifier les propriétés d'un jeu de données cloné. Pour de plus amples informations sur la configuration des propriétés de jeux de données ZFS, reportez-vous à la section Définition des propriétés ZFS.
Dans la mesure où un clone partage initialement son espace disque avec l'instantané d'origine, la valeur de la propriété used est initialement égale à zéro. À mesure que le clone est modifié, il utilise de plus en plus d'espace disque. La propriété used de l'instantané d'origine ne tient pas compte de l'espace disque consommé par le clone.
Pour créer un clone, utilisez la commande zfs clone en spécifiant l'instantané à partir duquel créer le clone, ainsi que le nom du nouveau volume ou système de fichiers. Le nouveau volume ou système de fichiers peut se trouver à tout emplacement de la hiérarchie ZFS. Le nouveau jeu de données est du même type (un système de fichiers ou un volume, par exemple) que celui de l'instantané à partir duquel le clone a été créé. Vous ne pouvez pas créer le clone d'un système de fichiers dans un autre pool que celui de l'instantané du système de fichiers d'origine.
Dans l'exemple suivant, un nouveau clone appelé tank/home/ahrens/bug123 avec le même contenu initial que l'instantané tank/ws/gate@yesterday est créé :
# zfs snapshot tank/ws/gate@yesterday # zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123 |
Dans l'exemple suivant, un espace de travail est créé à partir de l'instantané projects/newproject@today pour un utilisateur temporaire, sous le nom projects/teamA/tempuser. Ensuite, les propriétés sont configurées dans l'espace de travail cloné.
# zfs snapshot projects/newproject@today # zfs clone projects/newproject@today projects/teamA/tempuser # zfs set sharenfs=on projects/teamA/tempuser # zfs set quota=5G projects/teamA/tempuser |
La commande zfs destroy permet de détruire les clones ZFS. Exemple : Destruction
# zfs destroy tank/home/ahrens/bug123 |
Les clones doivent être détruits préalablement à la destruction de l'instantané parent.
La commande zfs promote permet de remplacer un système de fichiers ZFS actif par un clone de ce système de fichiers. Cette fonction facilite le clonage et le remplacement des systèmes de fichiers pour que le système de fichiers original devienne le clone du système de fichiers spécifié. En outre, cette fonction permet de détruire le système de fichiers à partir duquel le clone a été créé. Il est impossible de détruire un système de fichiers d'origine possédant des clones actifs, sans le remplacer par l'un de ses clones. Pour plus d'informations sur la destruction des clones, reportez-vous à la section Destruction d'un clone ZFS.
Dans l'exemple suivant, le système de fichiers tank/test/productA est cloné, puis le clone du système de fichiers (tank/test/productAbeta) devient le système de fichiers tank/test/productA d'origine.
# zfs create tank/test # zfs create tank/test/productA # zfs snapshot tank/test/productA@today # zfs clone tank/test/productA@today tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 23K /tank/test tank/test/productA 104M 66.2G 104M /tank/test/productA tank/test/productA@today 0 - 104M - tank/test/productAbeta 0 66.2G 104M /tank/test/productAbeta # zfs promote tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 24K /tank/test tank/test/productA 0 66.2G 104M /tank/test/productA tank/test/productAbeta 104M 66.2G 104M /tank/test/productAbeta tank/test/productAbeta@today 0 - 104M - |
Dans la sortie zfs list, les informations de comptabilisation de l'espace disque du système de fichiers d'origine productA ont été remplacées par celles du système de fichiers productAbeta
Pour terminer le processus de remplacement de clone, renommez les systèmes de fichiers. Exemple :
# zfs rename tank/test/productA tank/test/productAlegacy # zfs rename tank/test/productAbeta tank/test/productA # zfs list -r tank/test |
Vous pouvez également supprimer l'ancien système de fichiers si vous le souhaitez. Exemple :
# zfs destroy tank/test/productAlegacy |
La commande zfs send crée une représentation de flux d'un instantané qui est écrite dans la sortie standard. Un flux complet est généré par défaut. Vous pouvez rediriger la sortie vers un fichier ou un système fichier. La commande zfs receive crée un instantané dont le contenu est spécifié dans le flux fourni dans l'entrée standard. En cas de réception d'un flux complet, un système de fichiers est également créé. Ces commandes permettent d'envoyer les données d'instantané ZFS et de recevoir les systèmes de fichiers et les données d'instantané ZFS. Reportez-vous aux exemples de la section suivante.
Les solutions de sauvegarde suivantes sont disponibles pour enregistrer les données ZFS :
Produits de sauvegarde d'entreprise : si vous souhaitez disposer des fonctions suivantes, considérez une solution de sauvegarde d'entreprise :
Restauration fichier par fichier
Vérification des médias de sauvegarde
Gestion des médias
Instantanés de systèmes de fichiers et restauration d'instantanés : exécutez les commandes zfs snapshot et zfs rollback pour créer facilement une copie d'un système de fichiers et restaurer une version précédente d'un système de fichier, le cas échéant. Par exemple, vous pouvez utiliser cette solution pour restaurer un ou plusieurs fichiers issus d'une version précédente d'un système de fichiers.
Pour de plus amples informations sur la création et la restauration d'instantané, reportez-vous à la section Présentation des instantanés ZFS.
Enregistrement d'instantanés : utilisez les commandes zfs send et zfs receive pour envoyer et recevoir un instantané ZFS. Vous pouvez enregistrer les modifications incrémentielles entre instantanés, mais la restauration individuelle de fichiers est impossible. L'instantané du système doit être restauré dans son intégralité. Ces commandes ne constituent pas une solution de sauvegarde complète pour l'enregistrement de vos données ZFS.
Réplication distante : utilisez les commandes zfs send et zfs receive pour copier un système de fichiers d'un système vers un autre. Ce processus diffère d'un produit de gestion de volume classique qui pourrait mettre les périphériques en miroir dans un WAN. Aucune configuration ni aucun matériel spécifique n'est requis. La réplication de systèmes de fichiers ZFS a ceci d'avantageux qu'elle permet de recréer un système de fichiers dans un pool de stockage et de spécifier différents niveaux de configuration pour le nouveau pool, comme RAID-Z, mais avec des données de système de fichiers identiques.
Utilitaires d'archivage : enregistrez les données ZFS à l'aide d'utilitaires d'archivage tels que tar, cpio et pax, ou des produits de sauvegarde tiers. Actuellement, les deux utilitaires tar et cpio traduisent correctement les ACL de type NFSv4, contrairement à l'utilitaire pax.
Outre les commandes zfs send et zfs receive, vous pouvez utiliser des utilitaires d'archivage, tels que les commandes tar et cpio pour enregistrer des fichiers ZFS. Ces utilitaires enregistrent et restaurent les attributs de fichiers et les ACL ZFS. Vérifiez les options adéquates des commandes tar et cpio.
Pour connaître les toutes dernières informations relatives à ZFS et aux produits de sauvegarde tiers, consultez les notes de version de Solaris 10 ou la FAQ de ZFS à l'adresse :
http://hub.opensolaris.org/bin/view/Community+Group+zfs/faq/#backupsoftware
Vous pouvez utiliser la commande zfs send pour envoyer une copie d'un flux d'instantané et recevoir ce flux dans un autre pool du même système ou dans un autre pool d'un système différent utilisé pour stocker les données de sauvegarde. Par exemple, pour envoyer le flux d'instantané à un pool différent du même système, employez une syntaxe du type suivant :
# zfs send tank/data@snap1 | zfs recv spool/ds01 |
Vous pouvez utiliser zfs recv en tant qu'alias pour la commande zfs receive.
Si vous envoyez le flux de l'instantané à un système différent, envoyez la sortie de la commande zfs send à la commande ssh. Exemple :
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana |
Lors de l'envoi d'un flux complet, le système de fichiers de destination ne doit pas exister.
Vous pouvez envoyer les données incrémentielles à l'aide de l'option zfs send - i. Exemple :
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana |
Le premier argument (snap1) correspond à l'instantané le plus ancien, le second (snap2) à l'instantané le plus récent. Dans ce cas, le système de fichiers newtank/dana doit déjà exister pour que la réception incrémentielle s'effectue correctement.
La source de l'instantané1 incrémentiel peut être spécifiée comme étant le dernier composant du nom de l'instantané. Grâce à ce raccourci, il suffit de spécifier le nom après le signe @ pour l'instantané1, qui est considéré comme provenant du même système de fichiers que l'instantané2. Exemple :
host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana |
Cette syntaxe de raccourci est équivalente à la syntaxe incrémentielle de l'exemple précédent.
Le message s'affiche en cas de tentative de génération d'un flux incrémentiel à partir d'un instantané1 provenant d'un autre système de fichiers :
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
Si vous devez stocker de nombreuses copies, envisagez de compresser une représentation de flux d'instantané ZFS à l'aide de la commande gzip. Exemple :
# zfs send pool/fs@snap | gzip > backupfile.gz |
Gardez les points suivants à l'esprit lorsque vous recevez un instantané d'un système de fichiers :
L'instantané et le système de fichiers sont reçus.
Le système de fichiers et tous les systèmes de fichiers descendants sont démontés.
Les systèmes de fichiers sont inaccessibles tant qu'ils sont en cours de réception.
Le système de fichiers d'origine à recevoir ne doit pas exister tant qu'il est en cours de transfert.
Si ce nom existe déjà, vous pouvez utiliser la commande zfs rename pour renommer le système de fichiers.
Exemple :
# zfs send tank/gozer@0830 > /bkups/gozer.083006 # zfs receive tank/gozer2@today < /bkups/gozer.083006 # zfs rename tank/gozer tank/gozer.old # zfs rename tank/gozer2 tank/gozer |
Si vous apportez des modifications au système de fichiers de destination et souhaitez effectuer un autre envoi incrémentiel d'instantané, vous devez au préalable restaurer le système de fichiers destinataire.
Voyez l'exemple suivant : Modifiez tout d'abord le système de fichiers comme suit :
host2# rm newtank/dana/file.1 |
Effectuez ensuite un envoi incrémentiel de char/dana@snap3. Cependant, vous devez d'abord annuler (roll back) le système de fichiers destinataire pour permettre la réception du nouvel instantané incrémentiel. Vous pouvez aussi utiliser l'option -F pour éviter l'étape de restauration. Exemple :
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana |
Lors de la réception d'un instantané incrémentiel, le système de fichiers de destination doit déjà exister.
Si vous apportez des modifications au système de fichiers sans restaurer le système de fichiers destinataire pour permettre la réception du nouvel instantané incrémentiel, ou si vous ne spécifiez pas l'option -F, un message similaire au message suivant s'affiche :
host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana cannot receive: destination has been modified since most recent snapshot |
Les vérifications suivantes sont requises pour assurer l'exécution de l'option -F :
Si l'instantané le plus récent ne correspond pas à la source incrémentielle, la restauration et la réception ne s'effectuent pas intégralement et un message d'erreur s'affiche.
Si vous avez fourni accidentellement le nom d'un système de fichiers qui ne correspond pas à la source incrémentielle dans la commande zfs receive, la restauration et la réception ne s'effectuent pas correctement et le message d'erreur suivant s'affiche :
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
Cette section décrit l'utilisation des options zfs send -I et -R pour envoyer et recevoir des flux d'instantanés plus complexes.
Gardez les points suivants à l'esprit lors de l'envoi et de la réception de flux d'instantanés ZFS complexes :
Utilisez l'option zfs send -I pour envoyer tous les flux incrémentiels d'un instantané à un instantané cumulé. Vous pouvez également utiliser cette option pour envoyer un flux incrémentiel de l'instantané d'origine pour créer un clone. L'instantané d'origine doit déjà exister sur le côté récepteur afin d'accepter le flux incrémentiel.
Utilisez l'option zfs send -R pour envoyer un flux de réplication de tous les systèmes de fichiers descendants. Une fois le flux de réplication reçu, les propriétés, instantanés, systèmes de fichiers descendants et clones sont conservés.
Vous pouvez utiliser les deux options pour envoyer un flux de réplication incrémentiel.
Les modifications des propriétés sont conservées, tout comme les opérations rename et destroy des instantanés et des systèmes de fichiers.
Si l'option zfs recv -F n'est pas spécifiée lors de la réception du flux de réplication, les opérations destroy du jeu de données sont ignorées. La syntaxe de zfs recv -F dans ce cas peut conserve également sa signification de récupération le cas échéant.
Tout comme dans les autres cas - i ou -I (autres que zfs send -R), si l'option -I est utilisée, tous les instantanés créés entre snapA et snapD sont envoyés. Si l'option -i est utilisée, seul snapD (pour tous les descendants) est envoyé.
Pour recevoir ces nouveaux types de flux zfs send, le système récepteur doit exécuter une version du logiciel capable de les envoyer. La version des flux est incrémentée.
Vous pouvez cependant accéder à des flux d'anciennes versions de pool en utilisant une version plus récente du logiciel. Vous pouvez par exemple envoyer et recevoir des flux créés à l'aide des nouvelles options à partir d'un pool de la version 3. Vous devez par contre exécuter un logiciel récent pour recevoir un flux envoyé avec les nouvelles options.
Plusieurs instantanés incrémentiels peuvent être regroupés en un seul instantané à l'aide de l'option zfs send -I. Exemple :
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I |
Vous pouvez ensuite supprimer snapB, snapC et snapD.
# zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD |
Pour recevoir les instantanés combinés, vous devez utiliser la commande suivante :
# zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - |
Vous pouvez également utiliser la commande zfs send -I pour regrouper un instantané et un clone d'instantané en un nouveau jeu de données. Exemple :
# zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I |
Vous pouvez utiliser la commande zfs send -R pour répliquer un système de fichiers ZFS et tous ses systèmes de fichiers descendants, jusqu'à l'instantané nommé. Une fois ce flux reçu, les propriétés, instantanés, systèmes de fichiers descendants et clones sont conservés.
Dans l'exemple suivant, des instantanés des systèmes de fichiers utilisateur sont créés. Un flux de réplication de tous les instantanés utilisateur est créé. Les systèmes de fichiers et instantanés d'origine sont ensuite détruits et récupérés.
# zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - |
Dans l'exemple suivant, la commande zfs send -R a été utilisée pour répliquer le jeu de données users et ses descendants, puis envoyer le flux répliqué à un autre pool, users2.
# zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K - |
Les commandes zfs send et zfs recv permettent d'effectuer une copie distante d'une représentation de flux d'instantané d'un système vers un autre. Exemple :
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today |
Cette commande envoie les données de l'instantané tank/cindy@today et les reçoit dans le système de fichiers sandbox/restfs. La commande suivante crée également un instantané restfs@aujourd'hui sur le système newsys. Dans cet exemple, l'utilisateur a été configuré pour utiliser ssh dans le système distant.