¿Cómo interrumpir el software raid resync?

50

Quiero interrumpir una operación de resincronización en ejecución en una incursión de Debian Squeeze Software. (Esta es la resincronización de comparación programada regular. La matriz de incursiones todavía está limpia en ese caso. No confunda esto con una reconstrucción después de que un disco fallara y fuera reemplazado).

¿Cómo detener esta operación de resincronización programada mientras se está ejecutando? Otra matriz de incursiones está "pendiente de resincronización", porque todas se verifican el mismo día (domingo por la noche) una tras otra. Quiero una parada completa de este resyncing del domingo por la noche.

[Editar: sudo kill -9 1010no lo detiene, 1010 es el PID del proceso md2_resync]

También me gustaría saber cómo puedo controlar los intervalos entre resincronizaciones y el tiempo restante hasta la próxima.

[Edit2: Lo que hice ahora fue hacer que la resincronización fuera muy lenta, para que no moleste más:

sudo sysctl -w dev.raid.speed_limit_max=1000

tomado de http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html

Durante la noche, volveré a configurarlo en un valor alto, para que la resincronización pueda finalizar.

Esta solución alternativa está bien para la mayoría de las situaciones, sin embargo, sería interesante saber si lo que pedí es posible. Por ejemplo, no parece posible hacer crecer una matriz, mientras está resincronizando o resincronizando "pendiente"]

Adam5
fuente
No creo que tenga las bolas para cancelar una resincronización. Me temo que nunca volverá a comenzar.
Tom O'Connor
1
@Tom: esta es solo la resincronización normal que verifica todos los domingos si todo coincide. Si se detiene (por ejemplo, apagando la máquina), continúa en el próximo arranque.
Adam5
Oh ok Está bien entonces
Tom O'Connor

Respuestas:

48

Si su matriz es md0entoncesecho "idle" > /sys/block/md0/md/sync_action

'inactivo' detendrá una resincronización / recuperación activa, etc. No hay garantía de que otra resincronización / recuperación no pueda iniciarse automáticamente nuevamente, aunque será necesario algún evento para activarlo.

http://www.mjmwired.net/kernel/Documentation/md.txt#477

Mark Wagner
fuente
Podría actualizar el archivo de texto después de cambiar sus permisos, pero el contenido del archivo se vuelve a cambiar a "resincronizar" desde atrás en la misma instancia. Y la resincronización continúa en la otra matriz (que anteriormente estaba "pendiente"). Cuando escribo "inactivo" en el archivo de la otra matriz, se intercambia de nuevo, pero nunca se detiene.
Adam5
2
Si tiene varias incursiones: echo inactivo | sudo tee / sys / block / md * / md / sync_action
Ole Tange
En realidad, "inactivo" solo detiene el cheque. La siguiente "verificación" continuaría en /sys/block/md0/md/sync_min’. To reset this write 0` a este archivo.
rudimeier
33

Quería ralentizar o pausar el proceso de resincronización para guardar algunas E / S y hacer copias de seguridad de algunas cosas en otra computadora. Este hilo me ayudó pero encontré otra solución.

En mi Debian Lenny:

  • echo "idle" > /sys/block/md0/md/sync_action funciona pero el proceso de resincronización se reinicia inmediatamente.

  • checkarray -x --all : funciona, pero el mismo resultado: el proceso de resincronización se reinicia inmediatamente.

Entonces uso este método: echo 0 > /proc/sys/dev/raid/speed_limit_max

pequeña
fuente
1
Enfoque interesante Descubrí que también necesitas reducir el valor en speed_limit_min.
Diomidis Spinellis
1
También necesitaba establecer speed_limit_min0 para pausar totalmente la resincronización.
njahnke
12

Puede cancelar una resincronización de matriz en progreso utilizando la siguiente secuencia de comandos (como root):

echo frozen > /sys/block/md0/md/sync_action
echo none > /sys/block/md0/md/resync_start
echo idle > /sys/block/md0/md/sync_action

Tenga en cuenta que esto puede dejar su matriz en un estado inconsistente . No haga esto a menos que esté seguro de que la matriz está en buena forma y vuelva a ejecutar la sincronización más tarde.

(Crédito donde el crédito es debido: encontré este encantamiento en este hilo ).

al anochecer
fuente
8

Como se mencionó anteriormente, en los sistemas Debian / Ubuntu la /etc/cron.d/mdadmsecuencia de comandos invoca la /usr/share/mdadm/checkarraysecuencia de comandos para iniciar verificaciones de resincronización.

Este script tiene una opción para cancelar todas las comprobaciones de sincronización en ejecución:

/usr/share/mdadm/checkarray -x --all
Jason Hildebrand
fuente
3

No estoy seguro de cómo cancelar una resincronización, pero la programación está controlada por los /etc/cron.d/mdadmsistemas Debian / Ubuntu.

El script /usr/share/mdadm/checkarraypuede arrojar algo de luz sobre la otra parte de su pregunta, ya que eso es lo que llama cron.

Zoredache
fuente
3

Si su dispositivo md es md0 y desea detener la escritura de resincronización:

echo "idle" > /sys/block/md0/md/sync_action
Víctor
fuente
3

Posible solución para esto, tardó un poco en entrar en detalles.

Mi sistema: CentOS 6.5 mdadm v3.3.2

Verificaciones constantes todas las semanas, quería pausar una de ellas, RAID está limpio, se llamó a la verificación a través del script /etc/cron.d/raid-check que se ejecuta semanalmente.

Para cancelar la verificación, utiliza la función de acción --misc. Suponiendo que el dispositivo RAID es / dev / md0 y esto es solo la verificación de consistencia semanal y no una falla del dispositivo, como root:

mdadm --misc --action = inactivo / dev / md0

Del mismo modo, para iniciar la verificación de consistencia

mdadm --misc --action = verificar / dev / md0

bill.rookard
fuente
2
echo "idle" > /sys/block/md0/md/sync_action

No funciona cuando / sys / block / md * / md / sync_action es "resincronizar" (a diferencia de si su estado es "check" o "repair". Puede hacer eco "inactivo" en el archivo sync_action, sin embargo no afecta el Este archivo de documentación del kernel aquí indica incorrectamente que funcionará, pero nunca me ha funcionado:

'inactivo' detendrá una resincronización / recuperación activa, etc. No hay garantía de que otra resincronización / recuperación no pueda iniciarse automáticamente nuevamente, aunque será necesario algún evento para activarlo.

brian
fuente
1
Sin embargo, puede efectuar la tasa de "resincronización" con / sys / block / md * / md / sync_speed_max en este estado. No estoy seguro de por qué la documentación es incorrecta, tal vez nadie lo sabe
Brian
Tómese un minuto para aprender la sintaxis de descuento de Stack Exchange ( meta.serverfault.com/editing-help )
Sven
0

Sé que esta es una publicación de 4 años, pero también puede hacer esto (suponiendo que md0 como matriz y sdb4 como el "disco" resincronizador):

    mdadm /dev/md0 --fail /dev/sdb4 && mdadm /dev/md0 --remove /dev/sdb4

Este comando finge que sdb4 es un disco fallido y, por lo tanto, lo elimina de la matriz y detiene la resincronización. Si no hubo ningún error durante la acción resync-stop, este comando también eliminará sdb4 de la matriz md0. Si hubo algún error, el disco permanece en estado fallido pero permanece en la matriz.

Si falla un disco en cualquier lugar mdadm, lo configura lógicamente fallido. Si la matriz estaba limpia (no degradada), entonces el disco se mantiene constante y se puede volver a agregar mediante la opción --add << disk >> --assume-clean sin ningún temor. Si hubo alguna acción después de que se desconectó (por ejemplo, resincronización, reconstrucción o incluso una escritura), entonces -asum-clean probablemente fallará y comenzará una acción de resincronización inmediatamente.

Cambiar raid.speed_limit_miny de raid.speed_limit_maxalguna manera es una mala idea porque afecta no solo las velocidades de resincronización / reconstrucción sino también las velocidades de operación normales, y probablemente perderá mucho rendimiento obtenido al usar matrices RAID.

eth
fuente
55
Creo que es una mala idea eliminar un disco sano del RAID. La mayoría de las veces puede no causar ningún problema, pero cada vez que lo hace, existe el riesgo de causar pérdida de datos o corrupción de datos.
kasperd
1
Nunca hagas esto. Si agrega un disco --assume-cleanen un sistema en vivo, y tuvo alguna escritura en el disco restante, está buscando problemas.
sanmai