Como interromper a ressincronização de ataque de software?

50

Eu quero interromper uma operação de ressincronização em execução em um ataque ao software debian squeeze. (Esta é a ressincronização regular de comparação agendada. Nesse caso, a matriz de incursões ainda está limpa. Não confunda isso com uma reconstrução após a falha de um disco e a substituição.)

Como parar esta operação de ressincronização agendada enquanto está em execução? Outra matriz de ataques é "ressincronizada pendente", porque todos são verificados no mesmo dia (domingo à noite), um após o outro. Eu quero uma parada completa desta noite de domingo ressincronizando.

[Edit: sudo kill -9 1010não para, 1010 é o PID do processo md2_resync]

Também gostaria de saber como posso controlar os intervalos entre ressincronizações e o tempo restante até o próximo.

[Edit2: O que eu fiz agora foi tornar a ressincronização muito lenta, para que não perturbe mais:

sudo sysctl -w dev.raid.speed_limit_max=1000

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

Durante a noite, voltarei a configurá-lo com um valor alto, para que a ressincronização possa terminar.

Esta solução alternativa é boa para a maioria das situações, mas seria interessante saber se o que eu pedi é possível. Por exemplo, parece não ser possível aumentar uma matriz enquanto ela está ressincronizando ou ressincronizando "pendente"]

Adam5
fonte
Acho que não tenho coragem de cancelar uma ressincronização. Receio que nunca mais comece de novo.
Tom O'Connor
11
@ Tom: esta é apenas a ressincronização normal que verifica todos os domingos se tudo corresponder. se for interrompido (por exemplo, desligando a máquina), continua na próxima inicialização.
precisa saber é o seguinte
Ah ok. Tudo bem então
Tom O'Connor

Respostas:

48

Se sua matriz for md0entãoecho "idle" > /sys/block/md0/md/sync_action

'idle' interromperá uma ressincronização / recuperação ativa etc. Não há garantia de que outra ressincronização / recuperação não seja iniciada automaticamente novamente, embora seja necessário algum evento para acionar isso.

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

Mark Wagner
fonte
Eu poderia atualizar o arquivo de texto depois de alterar suas permissões, mas o conteúdo do arquivo foi alterado novamente para "ressincronizar" por trás na mesma instância. E a ressincronização continua na outra matriz (anteriormente "pendente"). Quando escrevo "ocioso" no arquivo da outra matriz, ele é trocado novamente, mas nunca para.
Adam5
2
Se você tiver vários ataques: eco ocioso | sudo tee / sys / block / md * / md / sync_action
Ole Tange
Na verdade, "ocioso" apenas pausa a verificação. A próxima "verificação" continuará em /sys/block/md0/md/sync_min’. To reset this write 0` para este arquivo.
Rudimeier
33

Eu queria diminuir a velocidade ou pausar o processo de ressincronização para salvar algumas E / S e fazer backup de algumas coisas em outro computador. Esta discussão me ajudou, mas eu encontrei outra solução.

No meu Debian Lenny:

  • echo "idle" > /sys/block/md0/md/sync_action funciona, mas o processo de ressincronização é reiniciado imediatamente.

  • checkarray -x --all : funciona, mas o mesmo resultado: o processo de ressincronização é reiniciado imediatamente.

Então, eu uso este método: echo 0 > /proc/sys/dev/raid/speed_limit_max

pequeno
fonte
11
Abordagem interessante. Descobri que você também precisa reduzir o valor em speed_limit_min.
Diomidis Spinellis
11
Eu também precisava definir speed_limit_min0 para pausar totalmente a ressincronização.
N
12

Você pode cancelar uma ressincronização de matriz em andamento usando a seguinte sequência de comandos (como raiz):

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

Observe que isso pode deixar sua matriz em um estado inconsistente . Não faça isso a menos que tenha certeza de que a matriz está em boas condições e execute a sincronização mais tarde.

(Crédito onde o crédito é devido: encontrou este encantamento neste tópico .)

crepúsculo
fonte
8

Como mencionado acima, nos sistemas Debian / Ubuntu, o /etc/cron.d/mdadmscript chama o /usr/share/mdadm/checkarrayscript para iniciar as verificações de ressincronização.

Este script tem uma opção para cancelar todas as verificações de sincronização em execução:

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

Não tenho certeza sobre como cancelar uma ressincronização, mas o cronograma é controlado pelos /etc/cron.d/mdadmsistemas Debian / Ubuntu.

O script /usr/share/mdadm/checkarraypode lançar alguma luz sobre a outra parte da sua pergunta, pois é isso que está sendo chamado pelo cron.

Zoredache
fonte
3

Se o seu dispositivo md for md0 e você desejar interromper a gravação de ressincronização:

echo "idle" > /sys/block/md0/md/sync_action
Vencedor
fonte
3

Possível solução para isso, demorou um pouco para entrar em detalhes.

Meu sistema: CentOS 6.5 mdadm v3.3.2

Verificações constantes toda semana, queria pausar uma delas, o RAID é limpo, a verificação era chamada através do script /etc/cron.d/raid-check, que é executado semanalmente.

Para cancelar a verificação, use a função --misc --action. Supondo que o dispositivo RAID seja / dev / md0 e essa seja apenas a verificação semanal de consistência e não uma falha no dispositivo, você faria como root:

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

Da mesma forma, para iniciar a verificação de consistência

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

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

Não funciona quando / sys / block / md * / md / sync_action é "ressincronização" (diferente do estado de "verificação" ou "reparo". É possível ecoar "inativo" no arquivo sync_action, mas não afeta o Esse arquivo de documentação do kernel aqui afirma incorretamente que funcionará, mas nunca funcionou para mim:

'idle' interromperá uma ressincronização / recuperação ativa etc. Não há garantia de que outra ressincronização / recuperação não seja iniciada automaticamente novamente, embora seja necessário algum evento para acionar isso.

Brian
fonte
11
No entanto, você pode afetar a taxa de "ressincronização" com / sys / block / md * / md / sync_speed_max nesse estado. Eu não sei por que o documenation está incorreta, talvez ninguém sabe
brian
Reserve um tempo para aprender a sintaxe da marcação para Stack Exchange ( meta.serverfault.com/editing-help )
Sven
0

Eu sei que este é um post de 4 anos, mas você também pode fazer isso (assumindo md0 como a matriz e sdb4 como o "disco" de ressincronização):

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

Este comando finge que o sdb4 é um disco com falha e, portanto, o retira da matriz, interrompendo a ressincronização. Se não houver erro durante a ação resync-stop, esse comando também removerá o sdb4 da matriz md0. Se houve algum erro, o disco permanece no estado de falha, mas permanece na matriz.

Se você falhar em um disco em qualquer lugar mdadm, defina-o logicamente . Se a matriz estiver limpa (não degradada), o disco permanecerá consistente e poderá ser adicionado novamente pela opção --ad << << disk >> --assume-clean sem nenhum medo. Se houver alguma ação depois de desanexada (por exemplo, ressincronização, reconstrução ou até uma gravação), então --assume-clean provavelmente falhará e iniciará uma ação de ressincronização imediatamente.

Mudar raid.speed_limit_mine de raid.speed_limit_maxalguma forma é uma má idéia, pois afeta não apenas as velocidades de ressincronização / reconstrução, mas também as velocidades normais de operação, e provavelmente você perderá muito desempenho obtido com o uso de matrizes RAID.

eth
fonte
5
Eu acho que é uma má idéia remover um disco íntegro do RAID. Na maioria das vezes, pode não causar problemas, mas cada vez que você faz isso, existe o risco de causar perda ou corrupção de dados.
precisa saber é
11
Nunca faça isso. Se você adicionar um disco --assume-cleanem um sistema ativo e houver gravações no disco restante, você estará solicitando problemas.
Sanmai 29/05