cartitas.com

Cambiar discos en ZFS

6 de febrero de 2025

Hace poco compré un disco duro más grande para mi servidor de almacenamiento. Así que estas son mis notas para cómo cambiar un disco en una agrupación de dispositivos en ZFS.

Comprobar integridad de datos

Antes de cambiar un disco, probablemente deberías de iniciar un proceso de limpieza para comprobar la integridad de tus datos.

# zpool scrub tank

Escoger disco

En mi caso, el disco que voy a reemplazar sí funciona. Sin embargo, lo quiero reemplazar con uno más grande.

$ lsblk -o name,size,model,serial
NAME          SIZE MODEL                   SERIAL
sda         931.5G WDC WD10EFRX-68FYTN0    WD-WCC4J0LZ4AL8
├─sda1      931.5G
└─sda9          8M
sdb         931.5G WDC WD10EFRX-68FYTN0    WD-WCC4J5DXJZN0
├─sdb1      931.5G
└─sdb9          8M
sdc           3.6T ST4000NE001-2MA101      WS2515Z7
├─sdc1        3.6T
└─sdc9          8M
sdd           3.6T Hitachi HUS724040ALE640 PK2331PAG54ZXT
├─sdd1        3.6T
└─sdd9          8M
nvme0n1     119.2G SPCC M.2 PCIe SSD       AA230705NV012800315
├─nvme0n1p1   512M
├─nvme0n1p2 117.8G
└─nvme0n1p3   977M

Aquí puedo ver que /dev/sda o /dev/sdb son los discos chicos. Puedo escoger uno de esos.

Informar a ZFS que voy a hacer

Dado a que quiero quitar un disco y reemplazarlo con uno diferente, tengo dos opciones.

La diferencia es que replace requiere un puerto adicional para conectar el disco nuevo. Esto sería más seguro porque puedes conectar el disco nuevo, usar replace y luego quitar el disco viejo.

En cambio un detach y attach requiere que remuevas el disco que quieres cambiar primero. Dependiendo en tu configuración, esto puede afectarte de varias maneras.

En mi caso, estos discos son parte de una argupación espejo y no tengo un puerto extra, así que tengo que usar detach y attach.

Primero esto.

# zpool detach tank ata-WDC_WD10EFRX-68FYTN0_WD-WCC4J5DXJZN0

Reemplazar disco duro físico

Ahora a apagar el servidor, abrirlo, quitar el disco viejo, e instalar el disco nuevo.

Puedes comparar el número de serie que tiene el disco con el que identificamos en el paso anterior.

Reemplazar disco duro en ZFS

Ahora compara la información nueva con la vieja.

$ lsblk -o name,size,model,serial
NAME          SIZE MODEL                   SERIAL
sda         931.5G WDC WD10EFRX-68FYTN0    WD-WCC4J0LZ4AL8
├─sda1      931.5G
└─sda9          8M
sdb           3.6T WDC WD40EFRX-68N32N0    WD-WCC7K2PC3TTX
sdc           3.6T Hitachi HUS724040ALE640 PK2331PAG54ZXT
├─sdc1        3.6T
└─sdc9          8M
sdd           3.6T ST4000NE001-2MA101      WS2515Z7
├─sdd1        3.6T
└─sdd9          8M
nvme0n1     119.2G SPCC M.2 PCIe SSD       AA230705NV012800315
├─nvme0n1p1   512M
├─nvme0n1p2 117.8G
└─nvme0n1p3   977M

En mi caso /dev/sdb es el disco nuevo. Aunque me gustaría saber el id para decirle a ZFS.

$ udevadm info --no-pager -q symlink --path=/sys/block/sdb
disk/by-path/pci-0000:00:17.0-ata-2.0 disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-WCC7K2PC3TTX disk/by-diskseq/3 disk/by-id/wwn-0x50014ee26542d407 disk/by-path/pci-0000:00:17.0-ata-2

Y puedo verificar así.

$ ls -l /dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-WCC7K2PC3TTX
lrwxrwxrwx 1 root root 9 Feb  7 18:19 /dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-WCC7K2PC3TTX -> ../../sdb

Ahora le vamos a decir a ZFS.

#                   disco viejo                              disco nuevo
#                   vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# zpool attach tank ata-WDC_WD10EFRX-68FYTN0_WD-WCC4J0LZ4AL8 ata-WDC_WD40EFRX-68N32N0_WD-WCC7K2PC3TTX

Luego espera unos segundos y corre este comando.

# zpool status tank
  pool: tank
 state: ONLINE
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 Fri Feb  7 18:33:45 2025
	945G / 2.49T scanned at 10.1G/s, 1.91G / 2.24T issued at 20.8M/s
	46.1M resilvered, 0.08% done, 1 days 07:20:43 to go
config:

	NAME                                            STATE     READ WRITE CKSUM
	tank                                            ONLINE       0     0     0
	  mirror-0                                      ONLINE       0     0     0
	    ata-WDC_WD10EFRX-68FYTN0_WD-WCC4J0LZ4AL8    ONLINE       0     0     0
	    ata-WDC_WD40EFRX-68N32N0_WD-WCC7K2PC3TTX    ONLINE       0     0     0  (resilvering)
	  mirror-1                                      ONLINE       0     0     0
	    ata-Hitachi_HUS724040ALE640_PK2331PAG54ZXT  ONLINE       0     0     0
	    ata-ST4000NE001-2MA101_WS2515Z7             ONLINE       0     0     0

errors: No known data errors

Y ya. Ahora nada más espera que la reconstrucción termine.

Véase también