FreeBSD ZFS Vol3: Mirror ZFS


Un mirror ZFS consiste en dos o mas discos donde toda la información es escrita en todos los miembros del vdev, las lecturas se realizarán de forma paralela desde todos los discos aumentando así el rendimiento en lecturas, el mirror tendrá la capacidad del dispositivo de menor tamaño, podrán fallar hasta N-1 discos sin que haya pérdida de datos y además cualquier vdev de un solo disco puede ser transformado a mirror mediante el comando zpool attach. En este artículo explicaremos como generar un mirror y como ampliar un vdev a mirror.

 

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

Consultamos los discos disponibles en el sistema:

root@freeBSD:~ # camcontrol devlist
<BHYVE SATA DISK 001>              at scbus0 target 0 lun 0 (ada0,pass0)
<BHYVE SATA DISK 001>              at scbus1 target 0 lun 0 (ada1,pass1)
<BHYVE SATA DISK 001>              at scbus2 target 0 lun 0 (ada2,pass2)
<BHYVE SATA DISK 001>              at scbus3 target 0 lun 0 (ada3,pass3)
<BHYVE SATA DISK 001>              at scbus4 target 0 lun 0 (ada4,pass4)

Comprobamos que el disco del sistema es ada0:

root@freeBSD:~ # zpool status
  pool: zroot
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          ada0p3    ONLINE       0     0     0

errors: No known data errors

Creamos las particiones que utilizará ZFS en los dos siguientes discos que formarán el mirror:

root@freeBSD:~ # gpart create -s GPT ada1
ada1 created
root@freeBSD:~ # gpart add -t freebsd-zfs -a 4k ada1
ada1p1 added, but partition is not aligned on 8192 bytes
root@freeBSD:~ # gpart show ada1
=>     40  2097072  ada1  GPT  (1.0G)
       40  2097072     1  freebsd-zfs  (1.0G)
root@freeBSD:~ # gpart create -s GPT ada2
ada2 created
root@freeBSD:~ # gpart add -t freebsd-zfs -a 4k ada2
ada2p1 added, but partition is not aligned on 8192 bytes
root@freeBSD:~ # gpart show ada2
=>     40  2097072  ada2  GPT  (1.0G)
       40  2097072     1  freebsd-zfs  (1.0G)

Creamos el mirror pool indicando las particiones a utilizar:

zpool create mypool mirror /dev/ada1p1 /dev/ada2p1

Consultamos su estado:

root@freeBSD:~ # zpool status mypool
  pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            ada1p1  ONLINE       0     0     0
            ada2p1  ONLINE       0     0     0

errors: No known data errors

Podemos ver que hay 832M ya que se trata de dos discos de 1G en modo mirror.

root@freeBSD:~ # zfs list mypool
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   276K   832M    96K  /mypool

Ahora crearemos un pool con un disco y posteriormente ampliaremos a mirror:

root@freeBSD:~ # gpart create -s GPT ada3
ada3 created
root@freeBSD:~ # gpart add -t freebsd-zfs -a 4k ada3
ada3p1 added, but partition is not aligned on 8192 bytes
root@freeBSD:~ # zpool create mypool2 /dev/ada3p1
root@freeBSD:~ # zpool status mypool2
  pool: mypool2
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool2     ONLINE       0     0     0
          ada3p1    ONLINE       0     0     0

errors: No known data errors

Preparamos el siguiente disco para ser attacheado el vdev que forma mypool2:

root@freeBSD:~ # gpart create -s GPT ada4
ada4 created
root@freeBSD:~ # gpart add -t freebsd-zfs -a 4k ada4
ada4p1 added, but partition is not aligned on 8192 bytes

Añadimos el segundo disco:

root@freeBSD:~ # zpool attach mypool2 ada3p1 ada4p1

Y voilà, vdev convertido a mirror:

root@freeBSD:~ # zpool status mypool2
  pool: mypool2
 state: ONLINE
  scan: resilvered 312K in 0 days 00:00:00 with 0 errors on Thu Nov 12 22:18:11 2020
config:

        NAME        STATE     READ WRITE CKSUM
        mypool2     ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            ada3p1  ONLINE       0     0     0
            ada4p1  ONLINE       0     0     0

errors: No known data errors

Si uno de los discos falla tan solo debemos reemplazarlo:

root@freeBSD:~ # zpool status mypool
  pool: mypool
 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
        mypool                    DEGRADED     0     0     0
          mirror-0                DEGRADED     0     0     0
            10132353784689973799  FAULTED      0     0     0  was /dev/ada1p1
            ada1p1                ONLINE       0     0     0

errors: No known data errors

Preparamos el disco nuevo:

root@freeBSD:~ # gpart create -s GPT ada2
ada2 created
root@freeBSD:~ # gpart add -t freebsd-zfs -a 4k ada2
ada2p1 added, but partition is not aligned on 8192 bytes

Sustituimos el averiado:

root@freeBSD:~ # zpool replace mypool 10132353784689973799 ada2p1
root@freeBSD:~ # zpool status mypool
  pool: mypool
 state: ONLINE
  scan: resilvered 576K in 0 days 00:00:00 with 0 errors on Sun Nov 15 00:20:48 2020
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            ada2p1  ONLINE       0     0     0
            ada1p1  ONLINE       0     0     0

errors: No known data errors
Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 13/11/2020 01:27:02 -- Categoria: Fsys FreeBSD ZFS