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
A continuación, necesitamos ver con qué discos tenemos que trabajar, así que usemos el comando lsblk
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
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
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
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
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.