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 |