Guía de administración de Oracle Solaris ZFS

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.