Sustitución de un disco averiado en la raíz de ZFS | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Sustitución de un disco averiado en la raíz de ZFS

Esta guía explica cómo reemplazar un disco averiado en un pool ZFS en espejo (mirror) en Linux. El procedimiento incluye poner el disco fuera de línea, copiar la tabla de particiones al disco de reemplazo, volver a añadir el disco al pool e instalar el cargador de arranque una vez completado el resilvering.

Requisitos previos

Se requieren privilegios de root. Los ejemplos siguientes suponen un servidor con dos discos: /dev/sda (funcionando) y /dev/sdb (averiado). Adapte los nombres de los dispositivos a su configuración.

Warning

Realice una copia de seguridad de todos los datos importantes antes de continuar. Reemplazar un disco raíz es una operación de alto riesgo. Un error en cualquiera de los pasos puede provocar la pérdida de datos o que el sistema no pueda arrancar. Evite utilizar nombres de dispositivo como /dev/sdX en los comandos de ZFS. Los nombres de los dispositivos pueden cambiar después de un reinicio. Utilice identificadores estables como /dev/disk/by-id/. En los ejemplos siguientes se utiliza /dev/sdX por simplicidad al trabajar con herramientas de particionado. Los comandos de ZFS deben utilizar siempre /dev/disk/by-id/.

Paso 1: Comprobar el estado del pool

Antes de realizar cualquier cambio, compruebe el estado actual del pool:

zpool status -v

La salida mostrará qué disco presenta errores y su identificador dentro del pool.

Paso 2: Poner el disco averiado fuera de línea

Si el disco aparece como ONLINE pero presenta fallos, póngalo fuera de línea antes de realizar el reemplazo físico:

zpool offline rpool <failed-device>

ZFS dejará de intentar utilizar el disco defectuoso antes de realizar el reemplazo físico. Sustituya <failed-device> por el identificador mostrado por zpool status -v. Si el disco ya aparece como FAULTED o REMOVED, omita este paso y continúe directamente con el paso 3.

Paso 3: Reemplazar físicamente el disco

Si su servidor admite hot swap, puede reemplazar el disco sin apagarlo.

De lo contrario, apague el sistema:

poweroff

Después de instalar el disco de reemplazo, arranque el servidor y compruebe que el nuevo disco sea visible:

lsblk -o NAME,SIZE,MODEL ls -l /dev/disk/by-id/

Utilice el identificador by-id del nuevo disco en los pasos siguientes.

Paso 4: Determinar el tipo de tabla de particiones

Instale gdisk si todavía no está instalado:

apt install gdisk -y

Compruebe el tipo de tabla de particiones del disco que funciona:

gdisk -l /dev/sda

En la salida, busque la sección Partition table scan. Para MBR aparecerán MBR: MBR only y GPT: not present. Para GPT aparecerán MBR: protective y GPT: present.

Paso 5: Preparar y copiar la tabla de particiones al nuevo disco

La mayoría de las configuraciones raíz de ZFS utilizan particionado GPT. El método MBR se incluye para sistemas antiguos.

GPT

Antes de continuar, identifique el nombre /dev/sdX correspondiente al nuevo disco, ya que las herramientas de particionado lo requieren:

lsblk -o NAME,SIZE,MODEL,SERIAL

Elimine todas las firmas antiguas del disco de reemplazo antes de copiar la tabla de particiones:

wipefs -a /dev/disk/by-id/<new-disk>

Warning

wipefs -a elimina permanentemente todas las firmas de sistemas de archivos y particiones del disco. Asegúrese de especificar el identificador correcto del disco antes de ejecutar este comando.

El siguiente comando copia la tabla de particiones de /dev/sda (origen) a /dev/sdb (destino):

sgdisk -R /dev/sdb /dev/sda

Warning

En sgdisk -R, el primer argumento es el disco de destino y el segundo es el origen. Ejecutar este comando con los argumentos invertidos sobrescribirá la tabla de particiones del disco que funciona.

Si el disco de reemplazo es más grande que el original, amplíe la GPT para utilizar todo el disco:

sgdisk -e /dev/sdb

A continuación, asigne un nuevo UUID único al disco de reemplazo:

sgdisk -G /dev/sdb

Warning

sgdisk -G asigna nuevos UUID a todas las particiones del disco de reemplazo. Si /etc/fstab contiene entradas basadas en UUID para alguna de estas particiones, el sistema podría no arrancar. Una vez completado el resilvering, compruebe que /etc/fstab utilice identificadores /dev/disk/by-id/ en lugar de UUID.

Recargue la tabla de particiones para que el kernel detecte el nuevo diseño:

udevadm trigger udevadm settle

Si el disco de reemplazo se utilizó anteriormente en otro pool ZFS, elimine los metadatos ZFS antiguos para evitar conflictos:

zpool labelclear /dev/disk/by-id/<new-disk-partX> 2>/dev/null || true

Sustituya <new-disk-partX> por el identificador real de la partición ZFS.

MBR

El siguiente comando copia la tabla de particiones de /dev/sda (origen) a /dev/sdb (destino):

sfdisk -d /dev/sda | sfdisk /dev/sdb

Si las nuevas particiones no aparecen en el sistema después de copiarlas, vuelva a cargar la tabla de particiones:

udevadm trigger udevadm settle

Paso 6: Añadir el disco al pool

Reemplace la entrada del disco averiado en el pool por el nuevo disco. Primero, compruebe el identificador exacto del disco averiado tal como aparece en el pool:

zpool status rpool

En la salida, busque la entrada correspondiente al disco averiado dentro de la lista de dispositivos del pool. Aparecerá como una ruta completa, por ejemplo /dev/disk/by-id/ata-WDC_WD10_12345-part3, con un estado FAULTED, UNAVAIL u OFFLINE. Utilice esa ruta como <old-device> en el comando replace:

zpool replace rpool <old-device> /dev/disk/by-id/<new-disk-part>

Sustituya <old-device> por el identificador del disco averiado del paso anterior. Sustituya <new-disk-part> por el identificador by-id de la partición del disco de reemplazo, utilizando el mismo número de partición que en el disco que funciona, por ejemplo -part3 o -part4. Para encontrar el identificador correcto, ejecute ls -l /dev/disk/by-id/.

Si el disco antiguo no está disponible por completo (UNAVAIL) y zpool replace devuelve un error, añada la opción -f para forzar el reemplazo:

zpool replace -f rpool <old-device> /dev/disk/by-id/<new-disk-part>

Después de ejecutar zpool replace, confirme que el resilvering haya comenzado y que el nuevo disco aparezca como ONLINE:

zpool status

El resilvering continuará automáticamente en segundo plano.

Paso 7: Supervisar el resilvering

Controle el progreso del resilvering con:

zpool status -v

La salida muestra el progreso, la velocidad y el tiempo restante estimado. Espere hasta que el estado muestre state: ONLINE y el resilvering haya finalizado antes de continuar. Dependiendo del tamaño del disco, esto puede tardar varias horas.

Paso 8: Verificar el dataset de arranque

Antes de instalar el cargador de arranque, compruebe que el pool tenga configurado el dataset de arranque correcto:

zpool get bootfs rpool

La salida debería mostrar una ruta de dataset como rpool/ROOT/debian. Si el valor es none o apunta al dataset incorrecto, configúrelo manualmente:

zpool set bootfs=rpool/ROOT/debian rpool

Sustituya rpool/ROOT/debian por el nombre real del dataset raíz de su sistema. Para listar los datasets disponibles, ejecute zfs list.

Paso 9: Instalar el cargador de arranque

Instale el cargador de arranque en el disco de reemplazo después de completar el resilvering. Durante el resilvering, el sistema continúa ejecutándose desde el disco original, por lo que este paso puede realizarse de forma segura una vez que el pool esté en buen estado.

BIOS (Legacy)

grub-install /dev/disk/by-id/<new-whole-disk>

En algunos sistemas, grub-install puede no aceptar una ruta by-id. En ese caso, sustituya /dev/disk/by-id/<new-whole-disk> por el nombre de dispositivo correspondiente, por ejemplo /dev/sdb.

UEFI

Monte la partición EFI del disco de reemplazo en un directorio temporal antes de ejecutar grub-install. Esto evita ocultar la partición EFI actualmente activa:

mkdir -p /mnt/new_efi mount /dev/disk/by-id/<new-disk-part1> /mnt/new_efi

Sustituya <new-disk-part1> por el identificador real de la partición EFI (normalmente -part1 o -part2; tipo de partición EF00). Si no está seguro, compruebe con ls -l /dev/disk/by-id/.

Si la partición EFI está vacía, copie el contenido de la partición EFI existente antes de ejecutar grub-install:

cp -r /boot/efi/* /mnt/new_efi/

Instale el cargador de arranque:

apt install grub-efi-amd64 efibootmgr -y grub-install --target=x86_64-efi --efi-directory=/mnt/new_efi --bootloader-id=debian --recheck /dev/disk/by-id/<new-whole-disk> update-grub update-initramfs -u -k all

Sustituya --bootloader-id=debian por el nombre correspondiente a su distribución, por ejemplo ubuntu o debian. Sustituya /dev/disk/by-id/<new-whole-disk> por el identificador by-id del disco de reemplazo completo, no de una partición.

La ejecución de update-initramfs garantiza que el disco RAM inicial incluya los módulos ZFS actuales y reconozca el nuevo diseño del pool. Sin este paso, el sistema podría no arrancar después del reemplazo.

Desmonte la partición EFI después de la instalación:

umount /mnt/new_efi

Verifique las entradas de arranque EFI:

efibootmgr -v

Warning

En sistemas con una raíz ZFS, grub-install puede fallar o requerir opciones adicionales dependiendo de la versión de GRUB y de la configuración del sistema. Por ejemplo, algunos sistemas requieren instalar GRUB con módulos de compatibilidad con ZFS o ejecutar el comando desde un entorno chroot. Si el comando devuelve un error, consulte la documentación de su distribución para obtener instrucciones específicas sobre la instalación de GRUB con ZFS.

Info

En Proxmox VE, grub-install está deshabilitado. Utilice proxmox-boot-tool en su lugar. El ejemplo siguiente utiliza /dev/sdb2; sustitúyalo por la partición EFI real de su sistema:

proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2

Conclusión

Después de instalar el cargador de arranque, reinicie el servidor y compruebe que arranque normalmente. Ejecute un scrub para comprobar si se produjeron errores de lectura/escritura durante el resilvering:

zpool scrub rpool

A continuación, compruebe el estado del pool:

zpool status -v

El pool debería estar online y sin errores. Si aparece algún problema durante el proceso, consulte los registros del sistema con journalctl -xe para obtener información adicional.

Warning

Antes de desechar el disco averiado que se retiró en el paso 3, reinicie el servidor y compruebe que el sistema arranque normalmente con el disco de reemplazo. Conserve el disco averiado como respaldo hasta confirmar que el sistema arranca correctamente.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA