Reemplazo de una unidad defectuosa en una matriz mdadm en Ubuntu
Publicado: 15 de febrero de 2025, 22:02:16 UTC
Última actualización: 12 de enero de 2026, 8:49:53 UTC
Si se encuentra en la temida situación de tener una falla en la unidad en una matriz RAID mdadm, este artículo explica cómo reemplazarla correctamente en un sistema Ubuntu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
La información de esta publicación se basa en Ubuntu 18.04 y la versión de mdadm incluida en sus repositorios (v4.1-rc1 al momento de escribir este artículo). Puede que no sea válida para otras versiones.
Recientemente tuve una falla repentina en mi servidor de archivos doméstico, que consta de nueve unidades en una matriz RAID-6 mdadm. Siempre da miedo, pero por suerte pude conseguir rápidamente una unidad de repuesto que me entregaron al día siguiente para poder empezar la reconstrucción.
Admito que fui un poco tacaño al configurar el servidor de archivos; solo dos de las unidades son NAS (Seagate IronWolf), mientras que el resto son de escritorio (Seagate Barracuda). Como era de esperar, una de las unidades de escritorio se había estropeado (después de casi tres años de uso, claro). Estaba completamente muerta; tras moverla a una carcasa USB de escritorio, solo oí un clic inquietante, y ni Ubuntu 20.04 ni Windows 10 la detectaron.
Bueno, ahora vamos con el reemplazo (y sí, la unidad nueva que compré era una IronWolf, lección aprendida). Por muy aterrador que sea perder una unidad en una matriz en funcionamiento, es aún más aterrador si no se conoce el procedimiento correcto para reemplazarla. No es la primera vez que tengo que reemplazar una unidad defectuosa en una matriz mdadm, pero por suerte es tan poco frecuente que suelo tener que buscar los comandos adecuados. Esta vez decidí crear mi propia guía para futuras consultas.
Primero, cuando recibas el temido correo electrónico de error de mdadm, debes identificar qué unidad ha fallado. Claro, te indicará el nombre del dispositivo (en mi caso, /dev/sdf), pero probablemente no sea obvio cuál es la unidad física, ya que esos nombres pueden cambiar al arrancar el equipo.
Si ni siquiera está seguro de qué nombre de dispositivo ha fallado, puede usar el siguiente comando para averiguarlo (reemplace /dev/md0 con su dispositivo RAID):
Como mencioné, en mi caso era /dev/sdf, así que continuemos con eso.
Luego, puede intentar encontrar el número de serie de la unidad fallida emitiendo este comando:
(Si no se encuentra smartctl, debe instalar el paquete smartmontools en Ubuntu)
Luego se puede comparar el número de serie con los números de serie de la etiqueta física de las unidades para determinar cuál ha fallado.
Esta vez no tuve tanta suerte. La unidad estaba completamente muerta e incluso se negó a proporcionar datos SMART ni de otro tipo, incluido el número de serie.
Como tenía acceso físico al servidor (algo imprescindible si vas a reemplazar un disco duro físico tú mismo, supongo ;-)) y el servidor estaba funcionando cuando falló el disco (y seguía funcionando correctamente gracias a la redundancia RAID-6), opté por el método, bastante primitivo, pero en realidad muy efectivo y obvio, de copiar un archivo grande al servidor y observar qué luz del disco duro no parpadeaba. En pocos segundos, identifiqué al culpable.
Ahora, antes de extraer la unidad física, es una buena idea informar formalmente a mdadm de esta intención, emitiendo este comando (reemplace los nombres de los dispositivos con los suyos según corresponda):
En caso de éxito, mdadm responderá con un mensaje que indica que "eliminó en caliente" la unidad, aparentemente porque el dispositivo RAID virtual está realmente ejecutándose en ese momento.
Si falla con un mensaje de error similar a "dispositivo o recurso ocupado", es posible que mdadm no haya registrado la unidad como si hubiera fallado por completo. Para ello, ejecute este comando (recuerde reemplazar los nombres de los dispositivos por los suyos propios, según corresponda):
Después de eso, deberías poder eliminar el dispositivo de la matriz con el comando anterior.
Ahora es el momento de reemplazar la unidad. Si está completamente seguro de que su máquina y controladora admiten el intercambio en caliente, podría hacerlo sin apagar la máquina. Esta sería la mejor opción para sistemas de producción críticos que se ejecutan en hardware de servidor real y confiable, que sabe con certeza que puede hacerlo. Sin embargo, mi servidor de archivos doméstico se basa en una placa base de escritorio de consumo con un par de controladores SATA de bajo coste en las ranuras PCIe para proporcionar más puertos SATA.
Aunque generalmente SATA debería soportar el intercambio en caliente, no estaba dispuesto a arriesgar nada en esta configuración, por lo que opté por apagar la máquina mientras reemplazaba la unidad.
Antes de hacerlo, conviene comentar el dispositivo RAID en el archivo /etc/fstab para que Ubuntu no intente montarlo automáticamente en el siguiente arranque, ya que podría bloquearse y obligar al usuario a entrar en modo de recuperación debido a la matriz RAID degradada. Esto puede no ser un gran problema en un sistema de escritorio, pero yo ejecuto este servidor sin monitor ni teclado, así que sería un poco complicado.
Tras arrancar el equipo con la nueva unidad instalada, usa lsblk o algún otro método para identificarla. Si no has cambiado nada más, probablemente (aunque no necesariamente) tendrá el mismo nombre que la unidad que reemplazaste. En mi caso, así fue, así que la nueva también se llama /dev/sdf.
Como mi matriz se basa en particiones en lugar de dispositivos físicos, necesitaba copiar la tabla de particiones de una unidad funcional a la nueva para asegurarme de que sean exactamente iguales. Si ejecuta su matriz en dispositivos físicos, puede omitir este paso.
Para ello, usé sgdisk, copiando la tabla de particiones de /dev/sdc a /dev/sdf. Asegúrate de reemplazar los nombres de los dispositivos para que coincidan con los tuyos, según corresponda.
Fíjate en el orden: ¡primero se lista la unidad "de destino"! Esto me parece un poco contraintuitivo, pero asegúrate de hacerlo bien para evitar otro fallo de unidad en la matriz ;-)
Luego, para evitar conflictos de UUID, genere nuevos UUID para la nueva unidad:
¡Y ahora por fin ha llegado el momento de añadir la nueva unidad a la matriz y empezar la reconstrucción! (Bueno, no es una verdadera fiesta; es un proceso bastante lento y desconcertante, ya que no querrás que otra unidad falle en este momento. Aunque una cerveza podría ayudar).
De todos modos, para agregar la nueva unidad a la matriz, emita este comando (nuevamente, asegúrese de reemplazar los nombres de los dispositivos con los suyos según corresponda):
Si todo va bien, la unidad se añadirá a la matriz sin problemas. Creo que se añade como "repuesto en caliente" por defecto, pero como a esta matriz le falta un disco (el que falló), se pone en uso inmediatamente y comienza el proceso de reconstrucción.
Puedes vigilarlo así:
Esto probablemente tardará un poco; en mi servidor, aunque modesto (basado principalmente en hardware de consumo y unidades de escritorio, claro está), alcanzó poco menos de 100 MB/s. Tengan en cuenta que se trata de un RAID-6, por lo que la reconstrucción requiere muchos cálculos de paridad; un RAID-10 habría sido mucho más rápido. Esta máquina en particular tiene una CPU AMD A10 9700E de cuatro núcleos (la "E" significa que es un modelo de bajo consumo, es decir, no muy rápido), solo para que se hagan una idea de qué esperar. Con las nueve unidades de 8 TB en mi configuración, la reconstrucción completa tardó poco más de 24 horas.
Durante la reconstrucción, puede montar el sistema de archivos en la matriz y usarlo normalmente si lo desea, pero prefiero dejarlo hasta que termine. Tenga en cuenta que si una unidad falla, otra podría fallar pronto, por lo que conviene que la reconstrucción se realice lo más rápido posible, ya que no quiere que otra unidad falle durante el proceso. Por lo tanto, no sobrecargue el sistema con otras operaciones de E/S que no sean estrictamente necesarias.
Una vez hecho esto, agréguelo nuevamente a su archivo /etc/fstab, reinicie y disfrute de sus archivos :-)
