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 |