Esta pagina se ve mejor con JavaScript habilitado

FreeBSD ZFS Vol6 RAIDZ zroot

 ·  🎃 kr0m

Montar el SO sobre un RAID-Z nos propocionará redundancia en caso de fallo de uno o varios discos dependiendo del Raid-Z que elijamos, en este artículo se verá como instalar el SO utilizando RAID-Z2 y como realizar una sustitución de un disco duro averiado.

Antes de continuar con el artículo es aconsejable que revisemos  este anterior  para que todos los conceptos queden claros.

Debemos tener en cuenta que no es recomendable montar un RAID-Z1 porque cuando un disco averiado es sustituido se inicia el proceso de resilvering, en este momento los otros discos (que seguramente tendrán la misma antiguedad que el disco averiado) empiezan a ser estresados con una probabilidad aproximada del 8% de fallo, si se diese el caso de fallo se perderían los datos de forma irremediable, por lo tanto siempre hay que elegir un raid con una tolerancia de fallo de un disco o mas. Además un RAID-Z degradado penaliza el rendimiento ya que los datos del disco faltante son calculados desde la información de paridad del resto de discos.

Si solo se va a albergar el SO y el espacio no supone un problema recomiendo utilizar mirroring de 3 discos, ya que un mirror degradado no afecta al rendimiento del RAID.

También debemos tener claro que un RAID-Z no puede ser convertido a otro tipo de RAID, por eso es tan importante elegir bien su tipo desde el principio.

En el asistente de instalación tendremos que indicar en Pool Type/Disks RAID-Z2:


Seleccionamos los discos a utilizar:

Quedando del siguiente modo:

Una vez instalado el SO consultamos el estado del pool:

root@Melocotonazo:~ # zpool status

pool: zroot  
state: ONLINE  
 scan: none requested  
config:  
  
   NAME         STATE     READ WRITE CKSUM  
   zroot        ONLINE       0     0     0  
  raidz2-0   ONLINE       0     0     0  
    vtbd0p4  ONLINE       0     0     0  
    vtbd1p4  ONLINE       0     0     0  
    vtbd2p4  ONLINE       0     0     0  
    vtbd3p4  ONLINE       0     0     0  
  
errors: No known data errors

Eliminamos un disco y comprobamos de nuevo el estado del pool:

root@Melocotonazo:~ # zpool status

pool: zroot  
state: DEGRADED  
status: One or more devices could not be used because the label is missing or  
   invalid.  Sufficient replicas exist for the pool to continue  
   functioning in a degraded state.  
action: Replace the device using 'zpool replace'.  
  see: http://illumos.org/msg/ZFS-8000-4J  
 scan: none requested  
config:  
  
   NAME                     STATE     READ WRITE CKSUM  
   zroot                    DEGRADED     0     0     0  
  raidz2-0               DEGRADED     0     0     0  
    vtbd0p4              ONLINE       0     0     0  
    1398730568925353312  FAULTED      0     0     0  was /dev/vtbd1p4  
    vtbd1p4              ONLINE       0     0     0  
    vtbd2p4              ONLINE       0     0     0  
  
errors: No known data errors

Añadimos un disco para sustituir el averiado, es fácilmente reconocible ya que es el único que no tiene particiones:

root@Melocotonazo:~ # ls -al /dev/vtbd*

crw-r-----  1 root  operator  0x60 Nov 24 22:21 /dev/vtbd0  
crw-r-----  1 root  operator  0x64 Nov 24 22:21 /dev/vtbd0p1  
crw-r-----  1 root  operator  0x65 Nov 24 22:21 /dev/vtbd0p2  
crw-r-----  1 root  operator  0x66 Nov 24 23:21 /dev/vtbd0p3  
crw-r-----  1 root  operator  0x67 Nov 24 22:21 /dev/vtbd0p4  
crw-r-----  1 root  operator  0x61 Nov 24 22:21 /dev/vtbd1  
crw-r-----  1 root  operator  0x68 Nov 24 22:21 /dev/vtbd1p1  
crw-r-----  1 root  operator  0x69 Nov 24 22:21 /dev/vtbd1p2  
crw-r-----  1 root  operator  0x6a Nov 24 22:21 /dev/vtbd1p3  
crw-r-----  1 root  operator  0x6b Nov 24 22:21 /dev/vtbd1p4  
crw-r-----  1 root  operator  0x62 Nov 24 22:21 /dev/vtbd2  
crw-r-----  1 root  operator  0x6c Nov 24 22:21 /dev/vtbd2p1  
crw-r-----  1 root  operator  0x6d Nov 24 22:21 /dev/vtbd2p2  
crw-r-----  1 root  operator  0x6e Nov 24 22:21 /dev/vtbd2p3  
crw-r-----  1 root  operator  0x6f Nov 24 22:21 /dev/vtbd2p4  
crw-r-----  1 root  operator  0x63 Nov 24 22:21 /dev/vtbd3

Replicamos el esquema de particiones en el disco nuevo, este debe de ser del mismo tamaño o mayor que el resto:

root@Melocotonazo:~ # gpart backup vtbd0 | gpart restore -F vtbd3

Comprobamos que los dos discos tengan el mismo esquema:

root@Melocotonazo:~ # gpart show vtbd0

=>      40  20971696  vtbd0  GPT  (10G)  
        40    409600      1  efi  (200M)  
    409640      1024      2  freebsd-boot  (512K)  
    410664       984         - free -  (492K)  
    411648   4194304      3  freebsd-swap  (2.0G)  
   4605952  16365568      4  freebsd-zfs  (7.8G)  
  20971520       216         - free -  (108K)

Comprobamos que se hayan creado correctamente:

root@Melocotonazo:~ # gpart show vtbd3

=>      40  20971696  vtbd3  GPT  (10G)  
        40    409600      1  efi  (200M)  
    409640      1024      2  freebsd-boot  (512K)  
    410664       984         - free -  (492K)  
    411648   4194304      3  freebsd-swap  (2.0G)  
   4605952  16365568      4  freebsd-zfs  (7.8G)  
  20971520       216         - free -  (108K)

Al tratarse de un disco utilizado en el boot del SO debemos copiar el bootstrap code a la partición de EFI/BIOS vtbd3, de este modo no habrá problemas independientemente del disco del que arranque, recordemos el esquema de particiones del que disponemos:

root@Melocotonazo:~ # gpart show vtbd3

=>      40  20971696  vtbd3  GPT  (10G)  
        40    409600      1  efi  (200M)  
    409640      1024      2  freebsd-boot  (512K)

Se puede apreciar que existen tanto la partición EFI como la de arranque tradicional utilizada por la BIOS, esto es debido a que cuando se instaló el SO se eligió GPT(BIOS+UEFI), este es el modo mas compatible ya que el disco puede ser arrancado por ambos sistemas. Según el tipo de arranque que estemos utilizando instalaremos el bootloader de un modo u otro.

UEFI:

root@Melocotonazo:~ # gpart bootcode -p /boot/boot1.efifat -i 1 vtbd3

BIOS: Este sistema además de copiar los datos a la partición también escribe el MBR del disco indicado.

root@Melocotonazo:~ # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 vtbd3

Ahora que tenemos el disco preparado ya podemos reemplazar el averiado:

zpool replace zroot 1398730568925353312 vtbd3p4

Podemos ver que está realizando el resilver del disco:

root@Melocotonazo:~ # zpool status

pool: zroot  
state: DEGRADED  
status: One or more devices is currently being resilvered.  The pool will  
   continue to function, possibly in a degraded state.  
action: Wait for the resilver to complete.  
 scan: resilver in progress since Tue Nov 24 22:25:43 2020  
   1.76G scanned at 258M/s, 979M issued at 140M/s, 1.76G total  
   222M resilvered, 54.19% done, 0 days 00:00:05 to go  
config:  
  
   NAME                       STATE     READ WRITE CKSUM  
   zroot                      DEGRADED     0     0     0  
  raidz2-0                 DEGRADED     0     0     0  
    vtbd0p4                ONLINE       0     0     0  
    replacing-1            UNAVAIL      0     0     0  
   1398730568925353312  FAULTED      0     0     0  was /dev/vtbd1p4  
   vtbd3p4              ONLINE       0     0     0  
    vtbd1p4                ONLINE       0     0     0  
    vtbd2p4                ONLINE       0     0     0  
  
errors: No known data errors

Cuando termine el status aparecerá como ONLINE y todos podremos volver a dormir tranquilos:

root@Melocotonazo:~ # zpool status

pool: zroot  
state: ONLINE  
 scan: resilvered 432M in 0 days 00:00:14 with 0 errors on Tue Nov 24 22:25:57 2020  
config:  
  
   NAME         STATE     READ WRITE CKSUM  
   zroot        ONLINE       0     0     0  
  raidz2-0   ONLINE       0     0     0  
    vtbd0p4  ONLINE       0     0     0  
    vtbd3p4  ONLINE       0     0     0  
    vtbd1p4  ONLINE       0     0     0  
    vtbd2p4  ONLINE       0     0     0  
  
errors: No known data errors
Si te ha gustado el artículo puedes invitarme a un RedBull aquí