¿Cómo funciona la resynchronization mdraid?

Tengo dos unidades en un espejo (linux sw raid / mdadm); una unidad de alguna manera dejó el espejo en el pasado y su contenido tiene varios días. En este momento, estoy usando mirror degradado (faltando una unidad) y considerando:

  • clonar unidad actualizada a la segunda con dd
  • agregar la segunda unidad y resincronizar, pero no sé cómo funciona el process de resynchronization y qué datos se sobrescribirán (hay volúmenes LVM en ese espejo)

Creo que dd es una manera segura, de todos modos estoy interesado en cómo funciona la resicronización.

Lo correcto es algo como mdadm --add /dev/md0 /dev/sdb1 . Use la matriz correcta en lugar de md0 y la partición correcta en lugar de sdb1 .

La key es que la matriz se está ejecutando . Es completamente inequívoco qué datos copyr: los datos que se están ejecutando actualmente. Si tiene habilitados los maps de bits, la resynchronization será bastante rápida, ya que solo copyrá lo que ha cambiado. De lo contrario, copyrá todo.

Si eres extremadamente paranoico, o te preocupa que tu sistema de disco haya perdido escrituras, y el bitmap puede no ser correcto, y no te importa forzar una copy completa, puedes limpiar la superbloque del disco del que te ocupas. para agregar usando mdadm --zero-superblock /dev/sdb1 (una vez más, use la partición correcta).

Si la matriz no se estaba ejecutando actualmente (por ejemplo, si se trataba de una reconstrucción en ensamblar a partir de un cierre sucio), entonces la decisión sobre qué copyr se hace usando los campos de recuento de actualizaciones almacenados en la supermanzana. Es posible que se niegue a volver a agregar un disco con una count de actualización demasiado alta (lo que le obliga a poner a cero el superbloque), pero no sobrescribirá los datos activos.

Si tuviera que usar el enfoque dd , entonces: (a) Terminará copyndo la superbloque, y terminaría con dos discos 1 (el superbloque almacena la position del disco en la matriz); (b) tendría una copy inconsistente, a less que tuviera la matriz detenida (o tal vez en modo de solo lectura) durante la copy. (Y luego, para arreglar ayb, limpiarías el superbloque y dejarías que mdraid copyra los datos, como se indicó anteriormente).

En resumen, cuando decides usar mdraid (o cualquier otro RAID), le das administración de networkingundancia. Casi nunca quieres dar vuelta. Lo mismo con LVM: si desea mover datos, utiliza pvmove , etc. No usa dd .

PD: "una unidad de alguna manera dejó el espejo" no es algo que deba aceptar. Hay loggings; averiguar por qué salió del espejo. Incluso con un kernel medio reciente, los bloques defectuosos ya no eliminan las unidades, por lo que no deberían producirse caídas de unidades random. Verificar estado inteligente, etc.

Si ha configurado su RAID-1 para usar un bitmap (vea la página man), --re-add es mucho más rápido porque solo deben escribirse las áreas escritas después del corte de la connection.

De cualquier manera (incluso sin un bitmap y una synchronization completa) puede más fácilmente que con dd configurar la velocidad de synchronization a través de / sys / block / md0 / md / sync_speed_ *

La synchronization con dd requeriría que los discos activos también sean de solo lectura durante ese time. Entonces, realmente deberías dejar que el controller md sea el trabajo. Y si aún no lo ha hecho: agregue un bitmap.