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:
Productos empresariales de copia de seguridad: si necesita las siguientes funciones, considere la opción de una solución empresarial de copia de seguridad:
Restauración por archivo
Verificación de soportes de copia de seguridad
Administración de soportes
Instantáneas de sistemas de archivos y restauración de instantáneas: utilice los comandos zfs snapshot y zfs rollback para crear con facilidad una copia de un sistema de archivos y restablecer su versión anterior si es preciso. Esta solución es válida, por ejemplo, para restaurar uno o varios archivos de una versión anterior.
Para obtener más información sobre cómo crear y restaurar una versión de instantánea, consulte Información general de instantáneas de ZFS.
Guardar instantáneas: utilice los comandos zfs send y zfs receive para enviar y recibir una instantánea ZFS. Puede guardar cambios incrementales entre instantáneas, pero no puede restaurar archivos de manera individual. Es preciso restaurar toda la instantánea del sistema de archivos. Estos comandos no constituyen una solución de copia de seguridad completa para guardar los datos de ZFS.
Repetición remota: utilice los comandos zfs send y zfs receive para copiar un sistema de archivos de un sistema a otro. Este proceso difiere del producto para la administración de volúmenes tradicional que quizá refleje dispositivos a través de una WAN. No se necesita ninguna clase de configuración ni hardware especiales. La ventaja de repetir un sistema de archivos ZFS es poder volver a crear un sistema de archivos de una agrupación de almacenamiento en otro sistema y especificar distintos niveles de configuración de ese nuevo conjunto, por ejemplo RAID-Z, pero con los mismos datos del sistema de archivos.
Utilidades de archivado: guarde datos de ZFS con utilidades de archivado como tar, cpio y pax, o productos de copia de seguridad de otros proveedores. Actualmente, tanto tar como cpio traducen correctamente las listas ACL, pero no ocurre lo mismo con pax.
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
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 |
Al recibir una instantánea de sistema de archivos, debe tener en cuenta los aspectos siguientes:
Se recibe tanto la instantánea como el sistema de archivos.
Se desmontan el sistema de archivos y todos los sistemas de archivos descendientes.
Mientras se efectúa la recepción, no es posible acceder a los sistemas de archivos.
El sistema de archivos original que se va a recibir no debe existir mientras se transfiere.
Si el nombre del sistema de archivos ya existe, puede utilizar el comando zfs rename para cambiar el nombre del sistema de archivos.
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:
Si la instantánea más reciente no coincide con el origen incremental, no se completan la restauración ni la recepción, y se genera un mensaje de error.
Si inadvertidamente se indica un nombre de sistema de archivos que no coincide con el origen incremental especificado en el comando zfs receive, no se completan la restauración ni la recepción, y se genera el siguiente mensaje de error:
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
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:
Utilice la opción zfs send -I para enviar todos los flujos incrementales de una instantánea a una instantánea acumulativa. Utilice también esta opción para enviar un flujo incremental de la instantánea original para crear un clon. Para que se acepte el flujo incremental, la instantánea original ya debe estar en la parte receptora.
Utilice la opción zfs send -R para enviar un flujo de repetición de todos los sistemas de archivos descendientes. Cuando se recibe el flujo de repetición, se conservan todas las propiedades, las instantáneas, los sistemas de archivos descendientes y los duplicados.
Utilice ambas opciones para enviar un flujo de repetición incremental.
Se mantienen los cambios de propiedades y también las operaciones rename y destroy de instantáneas y sistemas de archivos.
Si no se especifica zfs recv -F al recibir el flujo de repetición, se omiten las operaciones destroy de conjuntos de datos. La sintaxis zfs recv -F en este caso también mantiene su propiedad de aplicar rollback (inversión) si es preciso.
Al igual que en otros casos (que no sean zfs send -R) - i o -I, si se utiliza -I, se envían todas las instantáneas entre snapA y snapD. Si se utiliza -i, sólo se envía snapD (para todos los descendientes).
Para recibir cualquiera de estos nuevos tipos de flujos zfs send, el sistema receptor debe ejecutar una versión del software capaz de enviarlos. La versión del flujo se incrementa.
Sin embargo, puede acceder a los flujos desde versiones de agrupaciones más antiguas utilizando una versión del software más reciente. Por ejemplo, puede enviar y recibir flujos creados con las opciones más recientes a o desde una agrupación de la versión 3. Sin embargo, debe ejecutar software reciente para recibir un flujo enviado con las opciones más recientes.
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 - |
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.