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:
<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:
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:
ada1 created
ada1p1 added, but partition is not aligned on 8192 bytes
=> 40 2097072 ada1 GPT (1.0G)
40 2097072 1 freebsd-zfs (1.0G)
ada2 created
ada2p1 added, but partition is not aligned on 8192 bytes
=> 40 2097072 ada2 GPT (1.0G)
40 2097072 1 freebsd-zfs (1.0G)
Creamos el mirror pool indicando las particiones a utilizar:
Consultamos su estado:
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.
NAME USED AVAIL REFER MOUNTPOINT
mypool 276K 832M 96K /mypool
Ahora crearemos un pool con un disco y posteriormente ampliaremos a mirror:
ada3 created
ada3p1 added, but partition is not aligned on 8192 bytes
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:
ada4 created
ada4p1 added, but partition is not aligned on 8192 bytes
Añadimos el segundo disco:
Y voilà, vdev convertido a mirror:
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:
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:
ada2 created
ada2p1 added, but partition is not aligned on 8192 bytes
Sustituimos el averiado:
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