Las instantáneas son importantes tanto si se ejecuta una simple máquina virtual en el ordenador de casa como si se trata de una base de datos empresarial que se actualiza y modifica constantemente. Disponer de instantáneas, es decir, de una copia de todo el sistema de archivos tal y como estaba en un periodo de tiempo determinado es importante.
A menudo se pierde la pista de dónde han ido las cosas, se ha borrado un archivo y nadie se ha dado cuenta de que ha desaparecido. Han pasado varias copias de seguridad y ahora te das cuenta de que falta un archivo importante en todas las copias de seguridad disponibles de las últimas 5 semanas. En este tutorial, veremos cómo utilizar las instantáneas de ZFS y tocaremos varias políticas de instantáneas que funcionarían de manera óptima, tanto en términos de utilización de recursos como de recuperabilidad.
ZFS tiene tanto la visión general de alto nivel de los archivos y directorios como entiende cómo se escriben los datos en el disco. Cuando se escriben físicamente los datos en un disco, se hace en bloques discretos. Típicamente, el tamaño del bloque puede ir hasta 1 MB, pero el valor por defecto suele ser de 128 KB. Ahora bien, esto significa que cada modificación (lectura, escritura o borrado) ocurrirá en los bloques discretos.
El mecanismo de copia en escritura asegura que cada vez que se modifica un bloque, en lugar de modificar el bloque directamente, hace una copia del bloque con las modificaciones requeridas hechas en el nuevo bloque.
Esto es especialmente útil en los casos en los que, digamos, hay un corte de energía y su sistema se bloquea mientras se estaban escribiendo nuevos datos en el disco. Si eso ocurre en un sistema de archivos tradicional, tus archivos se corromperán o quedarán con agujeros. Pero si estás usando ZFS, puedes perder la transacción en curso mientras eso estaba ocurriendo, pero el último estado válido de tus archivos seguirá intacto.
Las instantáneas también se basan en esta funcionalidad, y en gran medida de hecho. Cuando tomas una instantánea de un conjunto de datos dado (‘conjunto de datos’ es el término de ZFS para un sistema de archivos), ZFS sólo registra la marca de tiempo cuando se hizo la instantánea. Eso es todo. No se copian datos y no se consume almacenamiento extra.
Sólo cuando el sistema de archivos cambia, y los datos en él divergen de la instantánea, la instantánea comienza a consumir almacenamiento extra. Lo que ocurre bajo el capó es lo siguiente: en lugar de reciclar los bloques antiguos con el tiempo, ZFS los mantiene. Esto también mejora la utilización del almacenamiento. Si se hace una instantánea de un conjunto de datos de 20 GB y se modifican sólo unos pocos archivos de texto aquí y allá, la instantánea sólo puede tomar unos pocos MB de espacio.
Creación de instantáneas
Para demostrar el uso de las instantáneas, vamos a empezar con un conjunto de datos que tiene un montón de archivos de texto, sólo para mantener el asunto simple. La máquina virtual que utilizaré para la demostración está ejecutando FreeBSD 11.1-RELEASE-p3, que es la última versión estable disponible en el momento de escribir esto. El sistema de ficheros raíz está montado por defecto en el pool de zroot y muchos de los directorios familiares como /usr/src, /home, /etc son todos sus propios conjuntos de datos montados en zroot. Si no sabe lo que significa un pool (o un zpool), en la jerga de ZFS, merece la pena leerlo antes de continuar.
Uno de los muchos sistemas de ficheros, o conjuntos de datos, que vienen por defecto en FreeBSD es: zroot/usr/src
Para ver sus propiedades, ejecute la siguiente orden.
:~$ zfs list zroot/usr/src
Como puede ver utiliza 633 MB de almacenamiento. Contiene todo el árbol de fuentes del sistema operativo.
Tomemos una instantánea de zroot/usr/src
:~$ zfs snapshot zroot/usr/
El símbolo @ actúa como delimitador entre el conjunto de datos y el nombre de la instantánea, que en nuestro caso es snapshot1.
Ahora veamos el estado de la instantánea mientras se crea.
Al ejecutar el comando:
zfs list -rt all zroot/usr/src
Puedes ver que la instantánea no utiliza espacio extra cuando nace. Tampoco hay espacio disponible, ya que es un conjunto de datos de estricta lectura, la instantánea en sí no puede crecer, modificarse o reducirse. Por último, no está montada en ningún sitio, lo que hace que esté completamente aislada de la jerarquía del sistema de archivos dado.
Ahora, vamos a eliminar el directorio sbin en /usr/src/
:$ rm /usr/src/sbin
Mirando la instantánea verás que ha crecido,
Esto es de esperar porque el mecanismo de copia en escritura está en funcionamiento aquí y la eliminación (o modificación) de los archivos ha llevado a más de los datos que se asocian sólo a la instantánea y no el conjunto de datos realmente en uso.
Nota la columna REFER en la salida anterior. Le da la cantidad de datos accesibles en el conjunto de datos, mientras que la columna USED sólo muestra cuánto espacio está ocupado en el disco físico.
El mecanismo Copy-On-Write de ZFS a menudo da estos resultados contraintuitivos en los que la eliminación de un archivo haría parecer que se está utilizando más espacio que antes. Sin embargo, habiendo leído hasta aquí, ya sabes lo que realmente está sucediendo
Antes de terminar, vamos a recuperar el sbin de la instantánea1. Para ello basta con ejecutar:
:/usr/src$ zfs rollback zroot/usr/
Política de snapshots
La siguiente pregunta que hay que hacerse es – ¿Con qué frecuencia se quieren hacer los snapshots? Aunque puede variar de una empresa a otra, tomemos el ejemplo de una base de datos muy dinámica que cambia cada cierto tiempo.
Para empezar, se empezaría a tomar instantáneas cada 6 horas aproximadamente, pero como la base de datos cambia tanto, pronto sería inviable almacenar todas las numerosas instantáneas que se crearon. Así que el siguiente paso sería purgar las instantáneas que tienen más de, digamos, 48 horas.
Ahora, el problema sería recuperar algo que se ha perdido hace 49 horas. Para eludir este problema, puedes conservar una o dos instantáneas de ese historial de 48 horas y mantenerlas durante una semana. Purgadlas cuando sean más antiguas que eso.
Y si podéis seguir así, podríais atiborrar de instantáneas hasta la misma génesis del sistema, sólo que en orden decreciente de frecuencia. Por último, me gustaría señalar que estas instantáneas son de SOLO LECTURA, lo que significa que si te infectas con un ransomware y te encriptan (modifican) todos tus datos. Lo más probable es que estas instantáneas sigan intactas.