En el artículo anterior estuvimos viendo cómo instalar y utilizar el sistema de ficheros ZFS, se vio como crear un pool a partir de varios VDEV y los diferentes tipos de RAID que ofrecía este sistema, también estuvimos viendo la creación de datasets. En el artículo de hoy vamos a seguir explorando el funcionamiento de este sistema de ficheros.
ZVOL
Una vez que tenemos un pool disponible podíamos crear diferentes datasets, y esto es lo que hace, por ejemplo, Proxmox cuando se crean contenedores. El sistema de ficheros de un contenedor se almacena en un dataset. Pero cuando se crea una máquina virtual, el sistema de almacenamiento de la máquina virtual se alberga dentro de un ZVOL.
Un ZVOL, ZFS VOLume, es similar a un dataset, sólo que en vez de ser un sistema orientado a ficheros, un ZVOL es un dispositivo de bloques. Los ZVOL se crean sobre el pool y comparten todas las características de la infraestructura subyacente. Si tenemos un RAID en nuestro pool, los ZVOL formarán parte de ese RAID. Pero por otro lado, podremos crear un sistema de ficheros nuevo dentro del ZVOL, pudiendo formatearlo con ext4, ntfs, ...
Vamos a partir de un pool con un raidz formado por 4 ficheros, como se puede ver a continuación:
# zpool status
pool: almacen
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
almacen ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
/home/usuario/zfs/fichero1 ONLINE 0 0 0
/home/usuario/zfs/fichero2 ONLINE 0 0 0
/home/usuario/zfs/fichero3 ONLINE 0 0 0
/home/usuario/zfs/fichero4 ONLINE 0 0 0
errors: No known data errors
Para la creación de un ZVOL utilizaremos el parámetro -V junto con el tamaño de mismo:
# zfs create -V 8G almacen/dsk
En este caso le hemos llamado dsk y le hemos asignado 8 GB de espacio en el pool denominado almacen. Ahora con:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
almacen 8,25G 3,25G 25,4K /almacen
almacen/dsk 8,25G 11,5G 12,0K -
Vemos que se ha creado el dispositivo de bloques. En el directorio dev se ha creado también el fichero de dispositivo, /dev/zvol/almacen/dsk que es un enlace a /dev/zd0, asociado y lo podemos consultar con fdisk:
# fdisk -l /dev/zvol/almacen/dsk
Disk /dev/zvol/almacen/dsk: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 8192 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Ahora ya lo podemos formatear y montar para utilizarlo:
# mkfs.ext4 /dev/zvol/almacen/dsk
mke2fs 1.42.13 (17-May-2015)
Descartando los bloques del dispositivo: hecho
Se está creando un sistema de ficheros con 2097152 bloques de 4k y 524288 nodos-i
UUID del sistema de ficheros: 8205bb55-5d9e-4009-a8a0-09e104446a3e
Respaldo del superbloque guardado en los bloques:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Reservando las tablas de grupo: hecho
Escribiendo las tablas de nodos-i: hecho
Creando el fichero de transacciones (32768 bloques): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: 0/6hecho
# mkdir /mnt/dsk
# mount /dev/zvol/almacen/dsk /mnt/dsk
Si ahora vemos los dispositivos montados, nos lo encontraremos al final:
# mount
...
almacen on /almacen type zfs (rw,relatime,xattr,noacl)
/dev/zd0 on /mnt/dsk type ext4 (rw,relatime,stripe=2,data=ordered)
Y ya lo tendremos listo.
Creando Instantáneas
Una de las ventajas del sistema de ficheros ZFS es la posibilidad de crear instantáneas en cualquier momento, para poder volver atrás posteriormente. Es igual que las instantáneas de las máquinas virtuales. Podemos crear una, realizar algunos cambios y si no funciona, volver atrás.
Las instantáneas son rápidas y apenas suponen un coste para el sistema. Las podemos tomar de un pool completo o de un datastore. Para crearlas se indica poniendo el pool o el datastore seguido del símbolo arroba y del nombre que queramos darle a la instantánea.
Vamos a crear algunos ficheros en nuestro ZVOL anterior y vamos a tomarle una instantánea con:
# zfs snapshot almacen/dsk@inst1
Para ver las instantáneas disponibles lo haremos con:
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
almacen/dsk@inst1 71,1K - 279M -
Ahora podemos borrar algunos de estos ficheros y veremos como restaurar la instantánea con la opción rollback. Pero como estamos en un ZVOL y no en un datastore, primero tendremos que desmontarlo para posteriormente restaurar la instantánea y volver a montarlo de nuevo:
# umount /mnt/dsk
# zfs rollback almacen/dsk@inst1
# mount /dev/zvol/almacen/dsk /mnt/dsk
Y habremos recuperado los ficheros borrados.
Las instantáneas las podemos también borrar:
# zfs destroy almacen/dsk@inst1
Hay que tener en cuenta que no podremos borrar los pools, datastores o ZVOL si tienen instantáneas. Tendremos que borrarlas antes para poder borrar estos otros.
Clonando
Los clones sólo se pueden crear a partir de las instantáneas y dependerán de estas. Es decir, si queremos borrar una instantánea, primero tendremos que borrar los clones que hayamos creado a partir de la misma. Para crear un clon utilizaremos:
# zfs clone almacen/dsk@inst1 almacen/nuevo
Y para borrarlo:
# zfs destroy almacen/nuevo
El único requisito para los clones es el de tener que encontrarse en el mismo pool en el que se encuentre el sistema desde el que clonamos.
¿Y si un disco falla?
Si fallara un disco de nuestro RAID tendríamos que reemplazarlo. Para ello cambios el disco físico por otro, y a continuación, ejecutaríamos el siguiente comando que se encargaría de restablecer el RAID:
# zpool replace almacen /dev/sdf
Pero si el disco que queremos utilizar como reemplazo se encuentra conectado a otro puerto tendríamos que utilizar este otro comando:
# zpool replace almacen /dev/sdf /dev/sdg
Con este otro comando el sistema regenerará el RAID utilizando tanto el disco dañado como la información que se encuentra en el resto de los discos del RAID.
Otra situación que se nos puede dar es que el disco que contenga el sistema operativo falle y tengamos que sustituirlo por otro, una vez reinstalado el sistema operativo, para que este reconozca nuestro sistema de ficheros ZFS tendremos que importarlo. Para poder importar un sistema de ficheros ZFS primero hay que exportarlo. El problema reside en que queramos importarlo sin que haya sido exportado previamente. Esto se soluciona forzándolo, es decir, añadiéndole -f al comando que nos permite importarlo.
Para exportar un sistema ZFS utilizaremos:
# zpool export almacen
Y para importarlo:
# zpool import almacen
Por otro lado, si usamos el parámetro -D podremos restaurar un pool que hayamos destruido, ya que cuando se destruye un pool no se borran los datos físicamente:
# zpool import -D
Las funciones de exportación e importación también son útiles para llevarnos nuestros discos a otros equipos.
Con esto finalizamos el artículo de hoy. ZFS es un sistema de ficheros muy potente y con estos dos artículos hemos visto sus posibilidades. Existen muchas opciones que no se han comentado, pero el lector puede encontrarlas en la documentación oficial.
Comentarios
Publicar un comentario