LINUX

Cómo configurar instantáneas y clones en ZFS en Linux

La nueva característica notable en Ubuntu 16.04 es la adición del sistema de archivos ZFS. Este sistema de archivos ha sido denominado durante mucho tiempo la característica principal de Solaris. Se ha trasladado a Linux, pero no se integrará en el núcleo principal debido a la inteligente elección de Sun de una licencia incompatible. Lo hicieron para poder afirmar que tiene alguna característica que Linux no tiene. La elección inteligente no les sirvió de nada y no estaremos aquí hablando sobre el destino de Sun ni sobre la legalidad del uso del módulo del kernel con licencia CDDL dentro del kernel con licencia GPL. El hecho es que Canonical puso ZFS en Ubuntu independientemente de las advertencias legales, así que usémoslo.

Instalación del sistema de archivos ZFS y creación de una matriz de discos

Lo primero que hacemos es instalar el sistema de archivos ZFS con el comando

sudo apt install zfs

Instalación de ZFS en Ubuntu

A continuación, necesitamos ver con qué discos tenemos que trabajar, así que usemos el comando lsblk

Lista de todas las unidades

He agregado 4 discos con 8GB cada uno, a la VM, así que los usaremos para probar el ZFS. Primero, crearemos una matriz que abarque los 4 discos. Estará en franjas, para obtener la mejor velocidad y tamaño. Esos son discos virtuales, no es que ninguno de ellos vaya a fallar, por lo que una incursión de creación de bandas 0 parece estar bien para la prueba. Para la producción, querrá RAID 5.

sudo zpool create -f linoxide /dev/sdb /dev/sdc /dev/sdd /dev/sde

Este comando abarcará la matriz raid 0 en todas las unidades mencionadas. Todos están vacíos en mi VM, pero si está haciendo esto en unidades reales, asegúrese de no tener su única copia de algunos datos importantes en ninguna de las unidades porque se perderá. Si se pregunta por qué tenemos que usar la opción -f, es porque ZFS por defecto asume EFI y GPT mientras que la VM VirtualBox que creé tiene BIOS y MBR. Veamos entonces lo que creamos.

sudo zpool status linoxide

estado de zpool

Ahora necesitamos crear un sistema de archivos ZFS en este zpool de linóxido que creamos.

sudo zfs create linoxide/test

Este comando crea una prueba del sistema de archivos ZFS en poll linoxide y mount. Veamos ese sistema de archivos:

sudo zfs list -r linoxide

lista con la opción -r

Cómo tomar instantáneas de ZFS

Dado que tenemos zpool vacío y un sistema de archivos vacío, hagamos una instantánea de esto. Las instantáneas se realizan en formato zpoolname / fsname @ snapshotname, por lo que vamos a utilizar el siguiente comando:

sudo zfs snapshot linoxide/test@snap1

sudo zfs list -t snapshot

lista de instantáneas

Creemos ahora algunos datos para que podamos devolver una instantánea y ver cómo cambian las cosas.

sudo nano /linoxide/test/ourdata.txt

En el nano escriba 123 o cualquier dato aleatorio que desee, y luego guárdelo. Verifique con el comando cat para ver si los datos están allí, y luego hagamos una instantánea más con el siguiente comando

sudo zfs snapshot linoxide/test@snap2

Entonces volvamos a abrir nuestro archivo de datos y agreguemos más números.

sudo nano /linoxide/test/ourdata.txt

Por ejemplo, que sea 12345. Ahora retrocedemos a nuestras instantáneas. Aquí están los comandos junto con la salida:

miki@miki-VirtualBox:~$ cat /linoxide/test/ourdata.txt
12345
miki@miki-VirtualBox:~$ sudo zfs rollback linoxide/test@snap2
miki@miki-VirtualBox:~$ cat /linoxide/test/ourdata.txt
123
miki@miki-VirtualBox:~$ sudo zfs rollback linoxide/test@snap1
cannot rollback to 'linoxide/test@snap1': more recent snapshots or bookmarks exist
use '-r' to force deletion of the following snapshots and bookmarks:
linoxide/test@snap2
miki@miki-VirtualBox:~$ sudo zfs rollback -r linoxide/test@snap1
miki@miki-VirtualBox:~$ cat /linoxide/test/ourdata.txt
cat: /linoxide/test/ourdata.txt: No such file or directory
miki@miki-VirtualBox:~$

Vemos que después de revertir sudo zfs rollback linoxide / test @ snapname es el comando que realiza la reversión, el resto está ahí para ilustrar el cambio en los datos. Cuando regresamos al inicio, no había ningún archivo, lo cual es correcto ya que hicimos la primera instantánea antes de crear el archivo. Pero para volver a la primera instantánea, tuvimos que usar el indicador -r para eliminar snap2, porque ZFS solo permite regresar a la última instantánea. Así que hizo snap1 más reciente al eliminar snap2. Podemos eliminar la instantánea restante con el comando:

sudo zfs destroy linoxide/test@snap1

Cómo realizar la clonación de ZFS

La clonación en zfs se hace a partir de una instantánea, y hace que la instantánea del sistema de archivos haga un clon si está en un punto de montaje diferente y con un nombre diferente. A todos los efectos, se convertirá en un sistema de archivos diferente, aunque comience con el mismo contenido que el anterior. Debido a la función de deduplicación, podría parecer que el nuevo sistema de archivos no está ocupando espacio, pero a medida que los sistemas de archivos comienzan a divergir, el espacio comenzará a usarse. Entonces, primero creemos algunos archivos y directorios en el sistema de archivos

sudo touch /linoxide/test/file{1..9} && sudo mkdir /linoxide/test/dir{1..9}

miki@miki-VirtualBox:~$ ls /linoxide/test/
dir1 dir3 dir5 dir7 dir9 file2 file4 file6 file8
dir2 dir4 dir6 dir8 file1 file3 file5 file7 file9

A continuación, haremos una instantánea y clonaremos el sistema de archivos desde la instantánea en un nuevo sistema de archivos llamado clonedfs

sudo zfs snapshot linoxide/test@snap3

sudo zfs clone linoxide/test@snap3 linoxide/clonedfs

sudo zfs list

comando zfs list

A continuación, verifiquemos el contenido de clonedfs:

miki@miki-VirtualBox:~$ ls /linoxide/clonedfs/
dir1 dir3 dir5 dir7 dir9 file2 file4 file6 file8
dir2 dir4 dir6 dir8 file1 file3 file5 file7 file9

Es lo mismo. Así que hemos terminado aquí, eliminemos.

Eliminar la instantánea sin eliminar primero el clon no es posible

miki@miki-VirtualBox:~$ sudo zfs destroy linoxide/test@snap3
cannot destroy 'linoxide/test@snap3': snapshot has dependent clones
use '-R' to destroy the following datasets:
linoxide/clonedfs

Entonces podemos usar la opción -R para hacerlo mientras eliminamos la instantánea o podemos primero eliminar el clon y luego rehacer el comando. Haremos la primera opción.

sudo zfs destroy -R linoxide/test@snap3

luego destruimos el sistema de archivos de prueba

sudo zfs destroy -R linoxide/test

Entonces eliminemos zpool

sudo zpool destroy linoxide

Una palabra sobre RAIDZ

Para este tutorial usamos RAID O clásico, pero para la producción es posible que desee probar RAIDZ. A continuación se explica cómo crear los zpools con varios niveles de raidz.

sudo zpool create linoxide raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde

Para cambiar el nivel de raidz, simplemente escriba raidz2 o raidz3 en lugar de raidz.

Conclusión

Esta fue una introducción a los comandos básicos para usar y administrar el sistema de archivos ZFS. Para obtener más información y documentación, puede consultar documentación oficial de Oracle para ZFS. La implementación de Linux difiere un poco, pero generalmente puede usar documentos de Oracle para la mayoría de las cosas. Si no está de acuerdo con tener un kernel contaminado debido a un módulo incompatible con GPL, o simplemente le tienen miedo a los abogados de Oracle, es posible que desee utilizar BTRFS en su lugar. Pronto llegará a ofrecer paridad con ZFS. Gracias por leer.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar