En corto
Disco bueno ada0, disco nuevo ada3, el muerto era ada1:
| |
Cuando zpool status diga ONLINE en los dos, prueba a arrancar solo con el disco nuevo.
Antes de empezar
- Identifica el disco.
zpool statusnombra el miembro muerto (ada1p4, o un GUID largo si ya no está).camcontrol devlistlista los discos con modelo y serie para saber cuál bahía tocar. - Si el disco malo sigue conectado, sácalo del pool antes de tirar del cable:
zpool offline zroot ada1p4. - Layout. Una instalación por defecto de FreeBSD 13/14 con zroot crea, por disco:
p1efi,p2freebsd-boot,p3freebsd-swap,p4freebsd-zfs. Instalaciones antiguas o a mano varían: miragpart show ada0y ajusta los índices. El-idel bootcode es el defreebsd-boot. - El disco nuevo tiene que ser igual o mayor.
gpart restorecopia tamaños exactos; si es mayor, el resto queda libre y lo puedes usar después.
Por qué particiones y no el disco entero
En un pool de arranque cada disco lleva las particiones de boot además de la de ZFS. Si haces zpool replace zroot ada1p4 ada3 con el disco crudo, el mirror funciona pero ese disco no puede arrancar: el día que ada0 muera, tendrás los datos y ningún cargador. Por eso el orden es: particionar igual, bootcode, y solo entonces zpool replace con la partición.
Paso a paso
1. Clonar la tabla de particiones.
| |
-F destruye lo que hubiera en ada3. Si el pool usa etiquetas GPT (gpt/zfs0 en zpool status) en vez de nombres adaXpY, ponle la suya al nuevo: gpart modify -i 4 -l zfs1 ada3, y usa gpt/zfs1 en el zpool replace.
2. Bootcode. Instala los dos: así arranca tanto si la placa está en modo BIOS/CSM como en UEFI.
| |
Las guías viejas dicen gpart bootcode -p /boot/boot1.efifat -i 1; boot1.efi está obsoleto en FreeBSD actual y el camino documentado en loader.efi(8) es copiar loader.efi a la ESP. Si quieres una entrada propia en el firmware: efibootmgr -c -l /mnt/EFI/FREEBSD/LOADER.EFI -L FreeBSD-ada3 -a.
3. Reemplazar en el pool.
| |
Si el miembro muerto ya no aparece y el mirror quedó con un solo disco, en vez de replace se añade al superviviente: zpool attach zroot ada0p4 ada3p4.
4. Resilver.
| |
Horas, según lo lleno que esté el pool. Opcional, para que el resilver no ceda tanto el turno a la carga normal:
| |
5. Swap. Si /etc/fstab tenía /dev/ada1p3 como swap, cámbialo a /dev/ada3p3 (o mejor, a etiquetas gpt/swapN que no cambien con el nombre del disco) y swapon -a.
6. Comprobar el arranque. Con el resilver terminado, apaga, desconecta ada0 (o cambia el orden de arranque) y arranca desde el nuevo. Si entra, vuelve a conectar y zpool status debe seguir ONLINE sin quejas. Una zpool scrub zroot de cierre no está de más.
Trampas
gpart restore -Fno pregunta. Revisa dos veces cuál es el disco nuevo;camcontrol devlistydiskinfo -v ada3(serie) antes de escribir.- Bootcode de un solo tipo deja el disco arrancable solo en un modo de firmware. Pon los dos.
- Sector físico distinto (512 vs 4K) puede hacer que
zpool replacese queje delashift; en un mirror moderno conashift=12un disco 4Kn entra sin problema, uno conashift=9no. - Disco más grande: tras el resilver,
gpart resize -i 4 ada3yzpool online -e zroot ada3p4; cuando los dos discos del mirror sean grandes, el pool crece. - Los nombres
adaXcambian al quitar discos; las etiquetas GPT y los GUID no. Para la operación usa lo que muestrezpool statusen ese momento.
Ver también
- Reemplazar un disco en un pool ZFS — la versión Linux/Proxmox, sin particiones de arranque.
- Importar un pool después de un apagón.
- FreeBSD:
man 8 loader.efi,man 8 gpart, y el artículo de Babak Farrokhi sobre el reemplazo en BIOS.