Comment interrompre la resynchronisation du raid logiciel?

50

Je souhaite interrompre une opération de resynchronisation en cours sur un raid logiciel Debian Squeeze. (Il s'agit de la resynchronisation régulière des comparaisons planifiées. Dans un tel cas, le réseau RAID est toujours propre. Ne confondez pas ceci avec une reconstruction après la défaillance d'un disque et son remplacement.)

Comment arrêter cette opération de resynchronisation planifiée pendant son exécution? Un autre tableau de raid est "en attente de resynchronisation", car ils sont tous vérifiés le même jour (dimanche soir) les uns après les autres. Je veux un arrêt complet de la resynchronisation de ce dimanche soir.

[Edit: sudo kill -9 1010ne l'arrête pas, 1010 est le PID du processus md2_resync]

J'aimerais aussi savoir comment je peux contrôler les intervalles entre les resynchronisations et le temps restant jusqu'au prochain.

[Edit2: Ce que je faisais maintenant était de faire en sorte que la resynchronisation soit très lente, pour que cela ne gêne plus:

sudo sysctl -w dev.raid.speed_limit_max=1000

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

Pendant la nuit, je vais redéfinir la valeur pour que la resynchronisation puisse se terminer.

Cette solution de contournement convient à la plupart des situations. Néanmoins, il serait intéressant de savoir si ce que j'ai demandé est possible. Par exemple, il ne semble pas possible de développer un tableau alors qu'il est en train de resynchroniser ou de resynchroniser "en attente"]

Adam5
la source
Je ne pense pas avoir les couilles pour annuler une resynchronisation. Je crains que cela ne recommence jamais.
Tom O'Connor
1
@Tom: il s'agit uniquement de la resynchronisation normale qui vérifie tous les dimanches si tout correspond. s'il est arrêté (par exemple en éteignant la machine), il se poursuit au prochain démarrage.
Adam5
Ah d'accord. C'est bon alors
Tom O'Connor

Réponses:

48

Si votre tableau est md0alorsecho "idle" > /sys/block/md0/md/sync_action

'inactif' arrêtera une resynchronisation / récupération active, etc. Rien ne garantit qu'une autre resynchronisation / récupération ne sera pas redémarrée automatiquement, bien qu'un événement soit nécessaire pour le déclencher.

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

Mark Wagner
la source
Je pourrais mettre à jour le fichier texte après avoir modifié ses autorisations, mais le contenu du fichier redevient "resynchroniser" par derrière dans la même instance. Et la resynchronisation se poursuit sur l’autre matrice (qui était auparavant "en attente"). Lorsque j'écris "inactif" dans le fichier de l'autre groupe, il échange à nouveau, mais ne s'arrête jamais.
Adam5
2
Si vous avez plusieurs raids: echo idle | sudo tee / sys / block / md * / md / sync_action
Ole Tange le
En fait, "inactif" ne fait que suspendre le contrôle. La prochaine "vérification" continuerait à /sys/block/md0/md/sync_min’. To reset this write 0` dans ce fichier.
rudimeier
33

Je voulais ralentir ou suspendre le processus de resynchronisation pour enregistrer certaines E / S afin de sauvegarder des éléments sur un autre ordinateur. Ce fil m'a aidé mais j'ai trouvé une autre solution.

Sur ma Debian Lenny:

  • echo "idle" > /sys/block/md0/md/sync_action fonctionne mais le processus de resynchronisation est immédiatement redémarré.

  • checkarray -x --all : fonctionne, mais même résultat: le processus de resynchronisation est immédiatement redémarré.

Donc j'utilise cette méthode: echo 0 > /proc/sys/dev/raid/speed_limit_max

petit
la source
1
Approche intéressante. J'ai constaté que vous devez également réduire la valeur dans speed_limit_min.
Diomidis Spinellis
1
J'avais aussi besoin de mettre speed_limit_minà 0 pour mettre en pause la resynchronisation.
njahnke
12

Vous pouvez annuler une resynchronisation de tableau en cours à l'aide de la séquence de commandes suivante (en tant qu'utilisateur 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

Notez que cela peut laisser votre tableau dans un état incohérent . Ne le faites que si vous êtes certain que la matrice est en bon état et réexécutez la synchronisation ultérieurement.

(Crédit où le crédit est dû: a trouvé cette incantation dans ce fil .)

crépuscule
la source
8

Comme mentionné ci-dessus, sur les systèmes Debian / Ubuntu, le /etc/cron.d/mdadmscript l'invoque /usr/share/mdadm/checkarraypour lancer des vérifications de resynchronisation.

Ce script a une option pour annuler toutes les vérifications de synchronisation en cours d'exécution:

/usr/share/mdadm/checkarray -x --all
Jason Hildebrand
la source
3

Vous ne savez pas comment annuler une resynchronisation, mais la planification est contrôlée par /etc/cron.d/mdadmles systèmes Debian / Ubuntu.

Le script /usr/share/mdadm/checkarraypeut apporter des éclaircissements sur l’autre partie de votre question, puisque c’est ainsi que Cron l’appelle.

Zoredache
la source
3

Si votre périphérique md est md0 et que vous souhaitez arrêter l'écriture de resynchronisation:

echo "idle" > /sys/block/md0/md/sync_action
Victor
la source
3

Solution possible pour cela, a pris un peu pour entrer dans les détails.

Mon système: CentOS 6.5 mdadm v3.3.2

Des contrôles constants chaque semaine, nous voulions en suspendre un, le RAID est propre, le contrôle a été appelé via le script /etc/cron.d/raid-check qui est exécuté chaque semaine.

Pour annuler la vérification, vous utilisez la fonction --misc --action. En supposant que le périphérique RAID soit / dev / md0, il s’agit du contrôle de cohérence hebdomadaire et non d’une défaillance de périphérique, vous le feriez en tant que root:

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

De même, pour démarrer le contrôle de cohérence

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

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

Ne fonctionne pas lorsque / sys / block / md * / md / sync_action est "resync" (contrairement à son état "check" ou "repair". Vous pouvez insérer "inactif" dans le fichier sync_action, mais cela n'affecte pas la Ce fichier de documentation du noyau indique ici à tort que cela fonctionnera, mais cela n’a jamais fonctionné pour moi:

'inactif' arrêtera une resynchronisation / récupération active, etc. Rien ne garantit qu'une autre resynchronisation / récupération ne sera pas redémarrée automatiquement, bien qu'un événement soit nécessaire pour le déclencher.

brian
la source
1
Vous pouvez toutefois affecter le taux de "resynchronisation" avec / sys / block / md * / md / sync_speed_max dans cet état. Je ne suis pas sûr de savoir pourquoi la documentation est incorrecte, peut-être que personne ne le sait
brian
S'il vous plaît, prenez une minute pour apprendre la syntaxe du balisage Stack Exchange ( meta.serverfault.com/editing-help )
Sven
0

Je sais que cela a 4 ans, mais vous pouvez également le faire (en supposant que md0 est le tableau et que sdb4 est le "disque" resynchronisé):

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

Cette commande prétend que sdb4 est un disque en panne et le renvoie donc du tableau, arrêtant ainsi la resynchronisation. S'il n'y a pas eu d'erreur pendant l'action resync-stop, cette commande supprimera également sdb4 du tableau md0. En cas d'erreur, le disque reste en état d'échec mais reste dans la matrice.

Si vous échouez sur un disque mdadm, vous le définissez comme un échec logique . Si la matrice était propre (non dégradée), le disque reste cohérent et peut être rajouté à l'aide de l'option --add << disque >> --assume-clean sans aucune crainte. S'il y a eu une action après son détachement (par exemple, resynchroniser, reconstruire ou même une écriture), alors --assume-clean échouera et lancera immédiatement une action de resynchronisation.

Changer raid.speed_limit_minet raid.speed_limit_maxc'est en quelque sorte une mauvaise idée car cela affecte non seulement les vitesses de resynchronisation / reconstruction, mais également les vitesses de fonctionnement normales, et vous risquez de perdre beaucoup de performances gagnées en utilisant des matrices RAID.

eth
la source
5
Je pense que c'est une mauvaise idée de retirer un disque sain du RAID. La plupart du temps, cela ne pose aucun problème, mais chaque fois que vous le faites, vous risquez de provoquer une perte ou une corruption des données.
Kasperd
1
Ne fais jamais ça. Si vous ajoutez un disque --assume-cleansur un système actif et que des écritures se produisent sur le disque restant, vous vous posez des problèmes.
Sanmai