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:
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:
Se mantienen en sucesivos reinicios del sistema.
El número máximo teórico de instantáneas es 264.
Las instantáneas no utilizan un almacén de copia de seguridad independiente. Las instantáneas consumen espacio en el disco directamente de la misma agrupación de almacenamiento que el sistema de archivos o el volumen a partir del que se crearon.
Las instantáneas recursivas se crean rápidamente como una operación atómica Las instantáneas se crean todas juntas (todas a la vez) o no se crea ninguna. La ventaja de las operaciones atómicas de instantáneas estriba en que los datos se toman siempre en un momento coherente, incluso en el caso de sistemas de archivos descendientes.
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.
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.
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:
La propiedad defer_destroy está activada si la instantánea se ha marcado para su destrucción posteriormente, mediante el comando zfs destroy -d. De lo contrario, la propiedad está desactivada.
La propiedad userrefs indica el número de casos de conservación de esta instantánea, también denominados recuentos de referencia de usuario.
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 - |
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 |
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.
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.
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 |
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.
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 |
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.
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 |
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.