Guía de administración de Oracle Solaris ZFS

Capítulo 7 Uso de clones e instantáneas de Oracle Solaris ZFS

En este capítulo se explican procedimientos para crear y administrar clones e instantáneas de Oracle Solaris ZFS. También contiene información sobre cómo guardar instantáneas.

Este capítulo se divide en las secciones siguientes:

Información general de instantáneas de ZFS

Una instantánea es una copia de sólo lectura de un sistema de archivos o volumen. Las instantáneas se pueden crear de forma casi inmediata y al principio consumen poco espacio en el disco de la agrupación. Sin embargo, a medida que el conjunto de datos va cambiando, la instantánea consume espacio en el disco al seguir haciendo referencia a los datos antiguos, lo que impide la liberación de espacio.

Las instantáneas de ZFS presentan las características siguientes:

No se puede acceder directamente a las instantáneas de volúmenes, pero se pueden clonar, hacer copias de seguridad, invertir, etc. Para obtener información sobre cómo hacer copias de seguridad de una instantánea ZFS, consulte Envío y recepción de datos ZFS.

Creación y destrucción de instantáneas de ZFS

Las instantáneas se crean con el comando zfs snapshot, que toma como único argumento el nombre de la instantánea que se va a crear. El nombre de las instantáneas se asigna de la forma siguiente:


filesystem@snapname
volume@snapname

El nombre de la instantánea debe cumplir los requisitos de denominación establecidos en Requisitos de asignación de nombres de componentes de ZFS.

En el ejemplo siguiente, se crea una instantánea de tank/home/ahrens denominada friday.


# zfs snapshot tank/home/ahrens@friday

Puede crear instantáneas de todos los sistemas de archivos descendientes con la opción -r. Por ejemplo:


# 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  -

Las instantáneas no tienen propiedades modificables. Las propiedades de conjuntos de datos no se pueden aplicar a una instantánea. Por ejemplo:


# zfs set compression=on tank/home/ahrens@now
cannot set compression property for 'tank/home/ahrens@now': snapshot
properties cannot be modified

Para destruir instantáneas se utiliza el comando zfs destroy. Por ejemplo:


# zfs destroy tank/home/ahrens@now

Los conjuntos de datos no se pueden destruir si tienen una instantánea. Por ejemplo:


# 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

Además, si se han creado clones a partir de una instantánea, deben destruirse antes de poder destruir la instantánea.

Para obtener más información sobre el subcomando destroy, consulte Destrucción de un sistema de archivos ZFS.

Conservación de instantáneas de ZFS

Si se implementan diferentes directivas de instantáneas automáticas de manera que zfs receive destruye accidentalmente las instantáneas más antiguas porque ya no existen en la parte remitente, debería considerar el uso de la función de conservación de instantáneas.

La función de conservación impide que se destruya una instantánea. Además, esta función permite que una instantánea con clones se elimine en espera de la eliminación del último clon mediante el comando zfs destroy -d. Cada instantánea tiene asociado un número de referencia de usuario, que se inicializa a cero. El número aumenta una unidad cada vez que se aplica la función de conservación a una instantánea, y se reduce una unidad cuando se anula dicha función.

En la versión anterior de Solaris, sólo era posible destruir una instantánea mediante el comando zfs destroy si no tenía clones. En esta versión de Solaris, la instantánea también debe tener un número de referencia cero.

Se puede aplicar la función de conservación a una instantánea o a un conjunto de ellas. Por ejemplo, la siguiente sintaxis coloca una etiqueta de conservación, keep, en tank/home/cindys/snap@1 .


# zfs hold keep tank/home/cindys@snap1

Puede utilizar la opción -r para conservar las instantáneas de todos los sistemas de archivos descendientes. Por ejemplo:


# zfs snapshot -r tank/home@now
# zfs hold -r keep tank/home@now

Esta sintaxis agrega una sola referencia, keep, a la instantánea o al conjunto de instantáneas. Cada instantánea tiene su propio espacio de nombre de etiqueta y las etiquetas de conservación deben ser exclusivas dentro de ese espacio. Si se ha aplicado la función de conservación a una instantánea, fallará cualquier intento de destruirla mediante el comando zfs destroy. Por ejemplo:


# zfs destroy tank/home/cindys@snap1
cannot destroy 'tank/home/cindys@snap1': dataset is busy

Para destruir una instantánea conservada, use la opción -d. Por ejemplo:


# zfs destroy -d tank/home/cindys@snap1

Utilice el comando zfs holds para ver una lista de instantáneas conservadas. Por ejemplo:


# 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  

Puede utilizar el comando zfs release para eliminar la conservación de una instantánea o de un conjunto de instantáneas. Por ejemplo:


# zfs release -r keep tank/home@now

Si la instantánea se libera, se podrá destruir mediante el comando zfs destroy. Por ejemplo:


# zfs destroy -r tank/home@now

Hay dos nuevas propiedades de información de conservación de instantánea:

Cambio de nombre de instantáneas de ZFS

Se puede cambiar el nombre de las instantáneas, pero debe hacerse en la agrupación y el conjunto de datos en que se crearon. Por ejemplo:


# zfs rename tank/home/cindys@083006 tank/home/cindys@today

Además, la siguiente sintaxis de acceso directo es equivalente a la sintaxis anterior:


# zfs rename tank/home/cindys@083006 today

La siguiente operación de cambio de nombre de instantánea no es posible porque los nombres del sistema de archivos y la agrupación de destino no coinciden con los del sistema de archivos y la agrupación a partir de los cuales se creó la instantánea:


# zfs rename tank/home/cindys@today pool/home/cindys@saturday
cannot rename to 'pool/home/cindys@today': snapshots must be part of same 
dataset

El comando zfs rename - r permite cambiar el nombre de instantáneas de forma recursiva. Por ejemplo:


# 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  -

Visualización y acceso a instantáneas de ZFS

Puede habilitar o deshabilitar la visualización de los listados de instantáneas en la salida zfs list mediante la propiedad de agrupación listsnapshots. Esta propiedad está habilitada de forma predeterminada.

Si deshabilita esta propiedad, puede utilizar el comando zfs list -t snapshot para mostrar información de las instantáneas. O bien, habilite la propiedad de agrupación listsnapshots. Por ejemplo:


# 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

Se puede acceder a instantáneas de sistemas de archivos del directorio .zfs/snapshot en la raíz del sistema de archivos. Por ejemplo, si tank/home/ahrens se monta en /home/ahrens, se puede acceder a los datos de la instantánea tank/home/ahrens@thursday en el directorio /home/ahrens/.zfs/snapshot/thursday .


# ls /tank/home/ahrens/.zfs/snapshot
tuesday wednesday thursday

Se puede obtener una lista de instantáneas de la forma que se indica a continuación:


# 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  -

Se puede obtener una lista de las instantáneas creadas para un determinado sistema de archivos de la forma siguiente:


# 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

Cálculo del espacio para instantáneas de ZFS

Cuando se crea una instantánea, al principio comparte el espacio con el sistema de archivos y, posiblemente, con instantáneas antiguas. A medida que cambia el sistema de archivos, el espacio en el disco compartido inicialmente se convierte en exclusivo de la instantánea, cosa que se contabiliza como tal en la propiedad used. Si se eliminan instantáneas puede aumentarse la cantidad de espacio exclusivo destinado a (usado por) otras instantáneas.

El valor de propiedad referenced de espacio de una instantánea es el mismo que tenía el sistema de archivos cuando se creó la instantánea.

Puede identificar información adicional sobre el consumo de valores de la propiedad used. Las nuevas propiedades del sistema de archivos de sólo lectura describen el uso de espacio en el disco de clones, sistemas de archivos y volúmenes. Por ejemplo:


$ 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         -       -              -          -

Para ver una descripción de estas propiedades, consulte la Tabla 6–1.

Restablecimiento de una instantánea ZFS

Puede usar el comando zfs rollback para anular todos los cambios efectuados en un sistema de archivos desde que se creó una instantánea concreta. El sistema de archivos vuelve al estado en que se encontraba en el momento de realizarse la instantánea. De forma predeterminada, el comando no puede restablecer una instantánea que no sea la más reciente.

Para restablecer una instantánea anterior, hay que destruir todas las instantáneas intermedias. Puede destruir versiones anteriores de instantáneas mediante la opción -r.

Si una instantánea intermedia tiene clones, para destruir los clones debe especificarse la opción -R.


Nota –

El sistema de archivos que se desea restaurar se desmonta y se vuelve a montar, si actualmente está montado. Si el sistema de archivos no se puede desmontar, la restauración falla. La opción -f hace que se desmonte el sistema de archivos, si es necesario.


En este ejemplo, el sistema de archivos tank/home/ahrens se restaura a la instantánea de 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

En este ejemplo, las instantáneas de wednesday y thursday se destruyen porque se ha restaurado la instantánea de tuesday.


# zfs list -r -t snapshot -o name,creation tank/home/ahrens
NAME                  CREATION
tank/home/ahrens@now  Wed Jun 30 16:16 2010

Información general sobre clones de ZFS

Un clon es un volumen grabable o un sistema de archivos cuyo contenido inicial es el mismo que el del conjunto de datos a partir del cual se ha creado. Al igual que sucede con las instantáneas, un clon se crea casi inmediatamente y al principio no consume espacio en el disco adicional. Asimismo, puede crear una instantánea de un clon.

Los clones sólo se pueden crear a partir de una instantánea. Al clonarse una instantánea, se crea una dependencia implícita entre ésta y el clon. Aun en el caso de que el clon se cree en alguna otra parte de la jerarquía del conjunto de datos, la instantánea original no se podrá destruir en tanto exista el clon. Al propiedad origin muestra esta dependencia y el comando zfs destroy recopila todas estas dependencias, si las hay.

Los clones no heredan las dependencias del conjunto de datos a partir del que se crean. Utilice los comandos zfs get y zfs set para ver y cambiar las propiedades de un conjunto de datos clonado. Para obtener más información sobre el establecimiento de las propiedades de conjuntos de datos de ZFS, consulte Configuración de propiedades de ZFS.

Debido a que al principio un clon comparte todo su espacio en el disco con la instantánea original, el valor de su propiedad used se establece inicialmente en cero. A medida que se efectúan cambios en el clon, consume más espacio en el disco. La propiedad used de la instantánea original no incluye el espacio que consume el clon en el disco.

Creación de un clon de ZFS

Para crear un clon, utilice el comando zfs clone; especifique la instantánea a partir de la cual se va a crear, así como el nombre del nuevo volumen o sistema de archivos. El nuevo volumen o sistema de archivos se puede colocar en cualquier parte de la jerarquía de ZFS. El nuevo conjunto de datos es del mismo tipo (por ejemplo, volumen o sistema de archivos) que la instantánea a partir de la cual se ha creado el clon. El clon de un sistema de archivos no se puede crear en una agrupación que no sea donde se ubica la instantánea del sistema de archivos original.

En este ejemplo, se crea un clon denominado tank/home/ahrens/bug123 con el mismo contenido inicial que la instantánea tank/ws/gate@yesterday:


# zfs snapshot tank/ws/gate@yesterday
# zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123

En este ejemplo, se crea un espacio de trabajo clónico a partir de la instantánea de projects/newproject@today para un usuario temporal denominado projects/teamA/tempuser. A continuación, las propiedades se establecen en el espacio de trabajo clónico.


# 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

Destrucción de un clon de ZFS

Para destruir clones de ZFS se utiliza el comando zfs destroy. Por ejemplo:


# zfs destroy tank/home/ahrens/bug123

Para poder destruir la instantánea principal, antes hay que destruir los clones.

Sustitución de un sistema de archivos ZFS por un clon de ZFS

El comando zfs promote es apto para reemplazar un sistema de archivos ZFS activo por un clon de ese sistema de archivos. Esta función permite la clonación y sustitución de sistemas de archivos para que el sistema de archivos original se convierta en el clon del sistema de archivos especificado. Asimismo, posibilita la destrucción del sistema de archivos a partir del cual se creó el clon. Sin la promoción de clones no es posible destruir un sistema de archivos original de clones activos. Para obtener más información sobre la destrucción de clones, consulte Destrucción de un clon de ZFS.

En este ejemplo, se clona el sistema de archivos tank/test/productA y el sistema de archivos clónico, tank/test/productAbeta, se convierte en el sistema de archivos tank/test/productA original.


# 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  -

En esta salida zfs list se ha sustituido la información de cálculo de espacio en el disco del sistema de archivos productA original por el sistema de archivos productAbeta.

Puede completar el proceso de sustitución de clones cambiando el nombre de los sistemas de archivos. Por ejemplo:


# zfs rename tank/test/productA tank/test/productAlegacy
# zfs rename tank/test/productAbeta tank/test/productA
# zfs list -r tank/test

Si lo desea, puede eliminar el sistema de archivos heredado. Por ejemplo:


# zfs destroy tank/test/productAlegacy

Envío y recepción de datos ZFS

El comando zfs send crea una representación de flujo de datos de una instantánea que se graba en una salida estándar. De forma predeterminada, se crea un flujo de datos completo. Puede redirigir la salida a un archivo u otro sistema. El comando zfs receive crea una instantánea cuyo contenido se especifica en el flujo de datos que figura en la entrada estándar. Si se recibe un flujo de datos completo, también se crea un sistema de archivos. Con estos comandos puede enviar y recibir datos de instantáneas ZFS y sistemas de archivos. Consulte los ejemplos de la sección siguiente.

Para guardar datos ZFS existen las soluciones de copia de seguridad siguientes:

Cómo guardar datos de ZFS con otros productos de copia de seguridad

Aparte de los comandos zfs send y zfs receive, para guardar archivos ZFS también son aptas utilidades de archivado como los comandos tar y cpio. Estas utilidades permiten guardar y restaurar atributos de archivos ZFS y ACL. Seleccione las opciones correspondientes para los comandos tar y cpio.

Para obtener información actualizada sobre problemas con ZFS y productos de copia de seguridad de otros proveedores, consulte las notas de la versión de Solaris 10 o las preguntas frecuentes sobre ZFS en:

http://hub.opensolaris.org/bin/view/Community+Group+zfs/faq/#backupsoftware

Envío de una instantánea ZFS

Puede utilizar el comando zfs send para enviar una copia de un flujo de instantáneas y recibirlo en otra agrupación del mismo sistema o en otra agrupación de un sistema diferente que se utiliza para almacenar datos de copia de seguridad. Por ejemplo, para enviar el flujo de instantáneas de otra agrupación al mismo sistema, utilice una sintaxis similar a la siguiente:


# zfs send tank/data@snap1 | zfs recv spool/ds01

Puede utilizar zfs recv como alias para el comando zfs receive.

Si envía el flujo de instantáneas a otro sistema, utilice el comando ssh para enviar la salida zfs send. Por ejemplo:


host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana

Si se envía un flujo de datos completo, no debe existir el sistema de archivos de destino.

Los datos incrementales se pueden guardar con la opción zfs send -i. Por ejemplo:


host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana

El primer argumento (snap1) es la instantánea anterior y el segundo (snap2) la instantánea posterior. En este caso, para que la recepción incremental sea posible, debe existir el sistema de archivos newtank/dana.

El origen de instantánea1 incremental se puede especificar como último componente del nombre de la instantánea. Este método abreviado significa que sólo se debe indicar el nombre después del signo de arroba @ para instantánea1, que se supone que procede del mismo sistema de archivos que instantánea2. Por ejemplo:


host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana

Esta sintaxis de acceso directo es equivalente a la sintaxis incremental en el ejemplo anterior.

Si se intenta generar un flujo de datos incremental a partir de una instantánea1 de otro sistema de archivos, aparece en pantalla el mensaje siguiente:


cannot send 'pool/fs@name': not an earlier snapshot from the same fs

Si tiene que almacenar muchas copias, puede ser conveniente comprimir una representación de flujos de datos de instantáneas de ZFS mediante el comando gzip. Por ejemplo:


# zfs send pool/fs@snap | gzip > backupfile.gz

Recepción de una instantánea ZFS

Al recibir una instantánea de sistema de archivos, debe tener en cuenta los aspectos siguientes:

Por ejemplo:


# 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 realiza un cambio en el sistema de archivos de destino y quiere efectuar otro envío incremental de una instantánea, antes debe restaurar el sistema de archivos receptor.

Considere el siguiente ejemplo. En primer lugar, efectúe un cambio como éste en el sistema de archivos:


host2# rm newtank/dana/file.1

A continuación, realice un envío incremental de tank/dana@snap3. Pero antes debe restaurar la versión previa del sistema de archivos receptor para recibir la nueva instantánea incremental. O puede eliminar el paso de restauración usando la opción -F. Por ejemplo:


host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana

Al recibir una instantánea incremental, ya debe existir el sistema de archivos de destino.

Si efectúa cambios en el sistema de archivos y no restaura el sistema de archivos receptor para recibir la nueva instantánea incremental, o no utiliza la opción -F, verá una mensaje similar a éste:


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

Para que la opción -F funcione debidamente, primero hay que efectuar estas comprobaciones:

Envío y recepción de flujos de instantáneas ZFS complejos

En esta sección se describe cómo utilizar las opciones zfs send -I y -R para enviar y recibir flujos de instantáneas más complejos.

Al enviar y recibir flujos de instantáneas ZFS complejos, tenga en cuenta los puntos siguientes:


Ejemplo 7–1 Envío y recepción de flujos de instantáneas ZFS complejos

Un grupo de instantáneas incrementales se puede combinar en una instantánea utilizando la opción zfs send -I. Por ejemplo:


# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I

Luego deberá eliminar snapB, snapC y snapD.


# zfs destroy pool/fs@snapB
# zfs destroy pool/fs@snapC
# zfs destroy pool/fs@snapD

Para recibir la instantánea combinada, use el siguiente comando.


# 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  -

También puede utilizar el comando zfs send -I para combinar una instantánea y una instantánea clónica para crear un conjunto de datos combinado. Por ejemplo:


# 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

Puede utilizar el comando zfs send -R para repetir un sistema de archivos ZFS y todos los sistemas de archivos descendientes, hasta la instantánea en cuestión. Cuando se recibe este flujo, se conservan todas las propiedades, las instantáneas, los sistemas de archivos descendientes y los duplicados.

En el ejemplo siguiente, se crean instantáneas de los sistemas de archivos de usuario. Se crea un flujo de repetición de todas las instantáneas de usuario. A continuación, se destruyen y se recuperan las instantáneas y los sistemas de archivos originales.


# 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  -

En el ejemplo siguiente, el comando zfs send -R se ha usado para repetir el conjunto de datos users y sus descendientes y para enviar a otra agrupación el flujo repetido, 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  -

Repetición remota de datos de ZFS

Los comandos zfs send y zfs recv se utilizan para copiar de forma remota una representación de flujos de datos de instantánea de un sistema a otro. Por ejemplo:


# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today

Este comando envía los datos de instantánea tank/cindy@today y los recibe en el sistema de archivos sandbox/restfs. El comando también crea una instantánea restfs@today en el sistema newsys. En este ejemplo, se ha configurado al usuario para que utilice el comando ssh en el sistema remoto.