Ir al contenido principal

ZFS, Segunda Parte

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

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione