ZFS: poner un disco en línea en un grupo no disponible

ZFS: poner un disco en línea en un grupo no disponible

Tengo un servidor doméstico que utiliza FreeBSD y ZFS que ha funcionado bien durante los últimos 5 años y en varias ocasiones he reemplazado con éxito discos defectuosos.

Sin embargo, hoy ha ocurrido un desastre menor y espero encontrar una solución.

Tengo un grupo de nivel superior que consta de 3 vdev, cada uno de los cuales es un grupo raidz1, por lo que pueden fallar hasta 3 discos (suponiendo que todos pertenezcan a diferentes vdev) y la integridad de los datos está intacta.

Ayer, noté bastantes errores reportados por 1 disco en 1 vdev. Según experiencias pasadas, esto suele indicar que el disco está a punto de fallar, así que hago lo que suelo hacer:

  1. Sin conexión al disco: zpool offline tank gpt/ta4
  2. Reemplace físicamente el disco
  3. Configure el nuevo disco con gpart y luego zpool reemplace el tanque gpt/ta4

Sin embargo, esta vez entre los pasos 2 y 3 ocurrió un desastre: cuando encendí el servidor después de instalar la nueva unidad, olí algo quemado y mi HBA indicó que4¡Algunas de las unidades no estaban disponibles! Por un golpe de increíble mala suerte, debe haber habido algún aumento de voltaje, porque otra unidad en el mismo vdev (gpt/ta2) ahora está completamente muerta, y la inspección visual revela que uno de los MOSFET en la PCB está quemado.

Así que ahora gpt/ta2 no está disponible y gpt/ta4 está fuera de línea, por lo que obviamente el vdev, que es raidz1, también está fuera de línea.

Mis preguntas son: 1) ¿Hay alguna manera de volver a poner gpt/ta4 en línea? Cuando intento ejecutar "zpool online tank gpt/ta4", me dice que el grupo no está disponible, por lo que no puedo hacerlo. Puedo entender por qué esto puede ser así, pero estaba pensando que gpt/ta4, aunque experimentó algunos errores de lectura, básicamente seguía siendo un "buen" miembro del grupo raidz1 antes de desconectarlo (el estado de zpool informó que no había datos conocidos errores). ¿Hay alguna forma de lograr esto?

2) De lo contrario, ¿hay alguna manera de poner en línea al menos el resto de mi grupo de nivel superior (que consta de 3 raidz1 vdevs)? Los otros 2 vdevs están perfectamente bien.

Por favor ayuda, tengo muchos datos valiosos al respecto :-)

Gracias de antemano.

Respuesta1

No es que le ayude en este momento, pero es precisamente por eso que nunca me verá aconsejando a la gente que use raidz1, y para conjuntos de espejos, si usan discos grandes, a menudo sugiero espejos triples.

Es extremadamente improbable que cualquier acción que puedas realizar haga que el tanque vuelva a estar en línea. Debo empezar por eso, para no hacerte ilusiones.

1: Asegúrese de que los discos estén seguros, incluso si eso significa desconectarlos todos.

2: Actualice a la última versión de FreeBSD: desea tener los últimos bits ZFS que pueda tener en sus manos.

3: Vuelva a colocar el gpt/ta4 original (que supuestamente está "OK" y solo experimenta errores de lectura) en el sistema o en un sistema nuevo con bits ZFS más nuevos (así como todos los demás si los ha eliminado), inicie y ejecútelo en orden hasta que uno funcione (tenga cuidado: estos no son seguros, especialmente el último, ya que en sus intentos de recuperar el sistema es probable que retrocedan y, por lo tanto, pierdan los datos escritos recientemente):

  • importación de zpool -f tanque
  • importación de zpool -fF tanque
  • importación de zpool - tanque fFX

Si los 3 fallan, estás fuera del ámbito de la recuperación "simple". Algunas búsquedas en Google para 'importar grupos defectuosos', 'zdb', 'zpool import -F', 'zpool import -X', 'zpool import -T' (¡peligro!), y similares, pueden proporcionarle algunos blogs e información adicionales. en los intentos de recuperación realizados por otros, pero en ese momento ya se encuentra en un terreno muy peligroso y potencialmente perjudicial para los datos y usted está ingresando rápidamente al territorio de los servicios de recuperación pagos (y no de las empresas tradicionales de recuperación de datos, no tienen experiencia con ZFS). y no te será de ninguna utilidad).

Nota: Un método más preciso y "seguro" sería "zpool import -o readonly=on -f -T [txg_id] tank". Sin embargo, para que esto funcione, primero necesitaría usar zdb por su cuenta para localizar un txg_id reciente aparentemente saludable, y no estoy preparado para intentar explicar todo eso aquí. Google será tu amigo aquí: no realices ninguna acción hasta que hayas leído suficiente información para sentirte cómodo con lo que estás haciendo. No confíes en una sola fuente.

Nota 2: lo "más seguro" sería contactar inmediatamente a alguien capaz de ofrecer servicios de recuperación ZFS.

Nota 3: lo siguiente "más seguro" sería colocar las unidades en un sistema seguro y agregar cada unidad sin procesar completa a un disco nuevo, lo que le brindaría, en teoría, copias idénticas de sus discos, pero eso significaría Necesitaría una cantidad similar de discos nuevos, preferiblemente de tamaño/tipo similar o idéntico a los antiguos, pero no estrictamente necesarios. Y solo entonces intente cualquiera de las acciones anteriores en un conjunto de unidades mientras mantiene los demás a un lado para su custodia.

información relacionada