Wie kann ich die Software Raid Resync unterbrechen?

50

Ich möchte einen laufenden Resync-Vorgang auf einem Debian-Squeeze-Software-Raid unterbrechen. (Dies ist die reguläre geplante Resynchronisation von Vergleichen. Das RAID-Array ist in einem solchen Fall immer noch sauber. Verwechseln Sie dies nicht mit einer Neuerstellung, nachdem eine Festplatte ausgefallen ist und ersetzt wurde.)

Wie kann ich diesen geplanten Resync-Vorgang beenden, während er ausgeführt wird? Ein anderes Raid-Array ist "Resync pending", da alle nacheinander am selben Tag (Sonntagabend) überprüft werden. Ich möchte einen vollständigen Stopp dieser Neusynchronisierung am Sonntagabend.

[Edit: sudo kill -9 1010hört nicht auf, 1010 ist die PID des md2_resync-Prozesses]

Ich möchte auch wissen, wie ich die Intervalle zwischen Resynchronisierungen und der verbleibenden Zeit bis zur nächsten steuern kann.

[Edit2: Was ich jetzt getan habe war, das Resync sehr langsam laufen zu lassen, damit es nicht mehr stört:

sudo sysctl -w dev.raid.speed_limit_max=1000

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

Während der Nacht werde ich es wieder auf einen hohen Wert setzen, damit die Resynchronisation beendet werden kann.

Diese Problemumgehung ist für die meisten Situationen in Ordnung, es wäre jedoch interessant zu wissen, ob das, was ich gefragt habe, möglich ist. Beispielsweise scheint es nicht möglich zu sein, ein Array zu vergrößern, während es resynchronisiert oder "ausstehend" resynchronisiert.]

Adam5
quelle
Ich glaube nicht, dass ich die Bälle habe, um eine Resynchronisation abzubrechen. Ich fürchte, es könnte nie wieder anfangen.
Tom O'Connor
1
@Tom: Dies ist nur die normale Resynchronisation, die jeden Sonntag überprüft, ob alles passt. Wenn es angehalten wird (z. B. durch Herunterfahren der Maschine), wird es beim nächsten Start fortgesetzt.
Adam5
Oh ok. Das ist dann
Tom O'Connor

Antworten:

48

Wenn Ihr Array md0dann istecho "idle" > /sys/block/md0/md/sync_action

'idle' stoppt eine aktive Resynchronisation / Wiederherstellung usw. Es gibt keine Garantie, dass eine andere Resynchronisation / Wiederherstellung möglicherweise nicht automatisch neu gestartet wird, obwohl ein Ereignis erforderlich ist, um dies auszulösen.

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

Mark Wagner
quelle
Ich könnte die Textdatei aktualisieren, nachdem ich ihre Berechtigungen geändert habe, aber der Inhalt der Datei wird in der gleichen Instanz von hinten auf "resync" zurückgesetzt. Die erneute Synchronisierung wird auf dem anderen Array fortgesetzt (das zuvor "anstehend" war). Wenn ich "Leerlauf" in die Datei des anderen Arrays schreibe, wird sie erneut ausgetauscht, hört aber nie auf.
Adam5
2
Wenn Sie mehrere Raids haben: echo idle | sudo tee / sys / block / md * / md / sync_action
Ole Tange
Eigentlich pausiert "Leerlauf" nur die Prüfung. Die nächste "Prüfung" würde bei /sys/block/md0/md/sync_min’. To reset this write 0 "zu dieser Datei fortgesetzt .
Rudimeier
33

Ich wollte den Resync-Vorgang verlangsamen oder anhalten, um einige E / A-Vorgänge zu speichern und einige Daten auf einem anderen Computer zu sichern. Dieser Thread hat mir geholfen, aber ich habe eine andere Lösung gefunden.

Auf meinem Debian Lenny:

  • echo "idle" > /sys/block/md0/md/sync_action funktioniert, aber der Resync-Vorgang wird sofort neu gestartet.

  • checkarray -x --all : funktioniert, aber gleiches Ergebnis: Der Resync-Vorgang wird sofort neu gestartet.

Also benutze ich diese Methode: echo 0 > /proc/sys/dev/raid/speed_limit_max

klein
quelle
1
Interessanter Ansatz. Ich habe festgestellt, dass Sie auch den Wert in speed_limit_min drosseln müssen.
Diomidis Spinellis
1
Ich musste auch speed_limit_minauf 0 setzen , um die erneute Synchronisierung vollständig anzuhalten.
Njahnke
12

Sie können eine laufende Array-Resynchronisation mit der folgenden Befehlsfolge (als Root) abbrechen:

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

Beachten Sie, dass sich Ihr Array dadurch möglicherweise in einem inkonsistenten Zustand befindet . Tun Sie dies nur, wenn Sie sicher sind, dass das Array in gutem Zustand ist, und führen Sie die Synchronisierung später erneut durch.

(Kredit, bei dem der Kredit fällig ist: Diese Beschwörung wurde in diesem Thread gefunden .)

duskwuff
quelle
8

Wie oben erwähnt, /etc/cron.d/mdadmruft das /usr/share/mdadm/checkarraySkript auf Debian / Ubuntu-Systemen das Skript auf , um Re-Sync-Prüfungen einzuleiten.

Dieses Skript bietet eine Option zum Abbrechen aller ausgeführten Synchronisierungsprüfungen:

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

Ich bin nicht sicher, wie ich eine erneute Synchronisierung abbrechen soll, aber der Zeitplan wird von /etc/cron.d/mdadmDebian / Ubuntu-Systemen gesteuert .

Das Skript /usr/share/mdadm/checkarraykann etwas Licht in den anderen Teil Ihrer Frage bringen, da dies von cron aufgerufen wird.

Zoredache
quelle
3

Wenn Ihr md-Gerät md0 ist und Sie die Resynchronisierung beenden möchten, schreiben Sie:

echo "idle" > /sys/block/md0/md/sync_action
Sieger
quelle
3

Mögliche Lösung für diese, nahm ein bisschen in die Details zu bekommen.

Mein System: CentOS 6.5 mdadm v3.3.2

Ständige Überprüfungen jede Woche, wollte eine von ihnen anhalten, RAID ist sauber, Überprüfung wurde über das Skript /etc/cron.d/raid-check aufgerufen, das wöchentlich ausgeführt wird.

Um die Prüfung abzubrechen, verwenden Sie die Funktion --misc --action. Angenommen, das RAID-Gerät ist / dev / md0 und dies ist nur die wöchentliche Konsistenzprüfung und kein Gerätefehler. Als Root würden Sie:

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

Ebenso, um die Konsistenzprüfung zu starten

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

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

Funktioniert nicht, wenn / sys / block / md * / md / sync_action "resync" ist (im Gegensatz zu "check" oder "repair"). Sie können "idle" in die sync_action-Datei zurückschreiben, dies hat jedoch keine Auswirkungen auf die Diese Kernel-Dokumentationsdatei gibt fälschlicherweise an, dass es funktionieren wird, aber bei mir hat es nie funktioniert:

'idle' stoppt eine aktive Resynchronisation / Wiederherstellung usw. Es gibt keine Garantie, dass eine andere Resynchronisation / Wiederherstellung möglicherweise nicht automatisch neu gestartet wird, obwohl ein Ereignis erforderlich ist, um dies auszulösen.

brian
quelle
1
Sie können jedoch die Rate der "Resynchronisation" mit / sys / block / md * / md / sync_speed_max in diesem Zustand beeinflussen. Ich bin mir nicht sicher , warum die documenation falsch ist, vielleicht niemand weiß
brian
Nehmen Sie sich bitte eine Minute Zeit, um sich mit der Stack Exchange- Markdown-Syntax vertraut zu machen ( meta.serverfault.com/editing-help )
Sven
0

Ich weiß, dass dies ein 4 Jahre alter Beitrag ist, aber Sie können dies auch tun (unter der Annahme, dass md0 das Array und sdb4 die "Festplatte" für die Resynchronisation ist):

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

Dieser Befehl gibt vor, dass sdb4 ein ausgefallener Datenträger ist, und entfernt ihn daher aus dem Array, wodurch die erneute Synchronisierung gestoppt wird. Wenn bei der Aktion zum erneuten Synchronisieren kein Fehler aufgetreten ist, wird mit diesem Befehl auch sdb4 aus dem md0-Array entfernt. Wenn ein Fehler aufgetreten ist, bleibt die Festplatte im fehlerhaften Zustand, verbleibt jedoch im Array.

Wenn Sie einen Datenträger an einer beliebigen Stelle ausfallen lassen mdadm, legen Sie fest, dass der Datenträger logisch ausgefallen ist. Wenn das Array sauber war (nicht beeinträchtigt wurde), bleibt die Festplatte konsistent und kann mit der Option --add << disk >> --assume-clean ohne Angst wieder hinzugefügt werden. Wenn es irgendeine Aktion , nachdem er wurde abgelöst (zB. Resync, neu zu erstellen, oder sogar ein Schreib) dann --assume-clean wird via Modem fehlschlagen und eine Resynchronisation Aktion sofort starten.

Ändern raid.speed_limit_minund raid.speed_limit_maxist irgendwie eine schlechte Idee , weil es nicht nur Affekte resync / rebuild Geschwindigkeiten , sondern auch die normalen Betriebsgeschwindigkeiten, und wahrscheinlich werden Sie eine Menge Leistung durch Verwendung von RAID - Arrays gewonnen verlieren.

eth
quelle
5
Ich halte es für eine schlechte Idee, eine fehlerfreie Festplatte aus dem RAID zu entfernen. Meistens verursacht es keine Probleme, aber jedes Mal, wenn Sie dies tun, besteht die Gefahr, dass Daten verloren gehen oder Daten beschädigt werden.
Kasperd
1
Mach das niemals. Wenn Sie einen Datenträger mit fügen --assume-cleanauf einem Live - System, und Sie hatten alle Schreibvorgänge geschehen auf die verbleibende Disk, fordern Sie für Ärger.
Sanmai