
=========== Systemdetails ===========
Betriebssystem: Solaris 10, Update 11
CPU_ARCH: SPARC (sparcv9)
HW: Sun Fire V490 (Yeahhhh, Baby Old School)
KERNEL_REV: 150400-40
Programm: bpbkar32 (Netbackup von Symantec)
TL;DR: Prozesse können nicht beendet werden, auch mit kill -9
SUSPENDED zpool, da möglicherweise nicht zwei gute Pfade vorhanden sind.
Ausgabe:
Wir haben eine Reihe (16) nicht beendebarer Prozesse auf dem System. Das Backup-Team hat uns benachrichtigt, dass sie diese Jobs vom NB-Masterserver aus nicht beenden und auch keine neuen Backups erstellen können. Also haben wir es versucht und Folgendes ./bp.kill_all
erhalten:
bash-3.2./bp.kill_all
Suche nach NetBackup-Prozessen, die beendet werden müssen.
Bpbkar-Prozesse werden beendet …Die folgenden Prozesse sind noch aktiv:
root 20346 1 0 02:02:33 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 1047868 -to 0 -bpstart_time 1481767648 -clnt n
root 18689 1 0 Dez 09 ? 0:00 bpbkar32 -r 8035200 -ru root -dt 0 -to 0 -bpstart_time 1481325879 -clnt nerp323
root 12618 1 0 Dez 07 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 357484 -to 0 -bpstart_time 1481077264 -clnt ne
root 29693 1 0 9. Dez. ? 0:00 bpbkar32 -r 2678400 -ru root -dt 529430 -to 0 -bpstart_time 1481249210 -clnt ne root
10168 1 0 9. Dez. ? 0:00 bpbkar32 -r 2678400 -ru root -dt 530349 -to 0 -bpstart_time 1481250129 -clnt ne
root 1950 1 0 14. Dez. ? 0:00 bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 -clnt ne
Soll dieses Skript versuchen, sie zu beenden? [y,n] (y) y
Verbleibende Prozesse werden beendet ...
Warten auf die Beendigung von Prozessen ...
Warten auf die Beendigung von Prozessen ...
Warten auf die Beendigung von Prozessen ...
Warten auf die Beendigung von Prozessen ...
Warten auf die Beendigung von Prozessen ...
Es werden noch Prozesse ausgeführt.
... gekürzte Ausgabe zur besseren Lesbarkeit.
Dies führte uns dazu, diese Prozesse mit äußerster Voreingenommenheit zu beenden, kill -9
ebenfalls ohne Erfolg. Ich habe mir angesehenWie beendet man eine Aufgabe, die nicht beendet werden kann (nicht unterbrechbar?)UndWas ist, wenn „kill -9“ nicht funktioniert?sowie eine Suche nach „Unterbrechungsfreier Solaris-Prozess“ mit teilweisen Ergebnissen. Neustart scheint das gemeinsame Thema zu sein und auch unsere „Kopf-gegen-den-Schreibtisch-hauen“-Lösung zu sein.
Davon abgesehen möchte ich:
- meine Logik und Argumentation hinsichtlich der Grundursache bestätigen
- sehen, ob es einen besseren Weg gibt, um zu ermitteln, wo der Prozess gestoppt wurde/welchen Systemaufruf er auszuführen versucht
- die E/A möglichst ohne Neustart auflösen und anschließend die Prozesse, die nicht beendet werden können.
Im Grunde nur eine Grundursachenanalyse und eine Art „Führen Sie in Zukunft keine Switch-Arbeiten durch, während Backups ausgeführt werden oder wenn Sie nicht über zwei Arbeitspfade verfügen“-Minderung.
Hier ist, was ich habe/was ich denke:
1) Ich gehe in das Verzeichnis /proc/1950/ und sehe mir den Status an. Ich habe keine Chance, die Ausgabe zu verstehen, selbst mit strings
. Gibt zufällige Zeichen aus. Bemerkenswert ist, dass „cwd“ einen Link zu nichts anzeigt, und der Versuch, ihn über aufzulösen, ls -alL /proc/1950/cwd
lässt das Terminal hängen und erstellt außerdemTrommelwirbelein weiterer unterbrechungsfreier Prozess.
2) Das Ausführen von a pstack 1950
generiert einige nützliche Informationen, aber nichts, was ich nicht aus a ersehen ps -eaf
oder verstehen kann. Alles Nullen, sieht aber schlecht aus, da wir keine Adressen oder Systemaufrufe sehen, wie ich es bei einer funktionierenden PID tue.
bash-3.2pstack 1950
1950: bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 00000000000000000 ???????? (0, 0, 0, 0, 0, 0)
3) Das Ausführen von a truss
bleibt hängen, wenn es im laufenden Prozess versucht wird. Das Gleiche gilt für pfiles
die Generierung eines Fehlers wie „pfiles: Prozess 1950 kann nicht gesteuert werden“. Interessant, aber zu erwarten.
4) Beim Ausführen von a strace
bekomme ich nur die Meldung, dass ein „Tracer bereits vorhanden ist“
5) Ausführen von a pwdx
zum Drucken der cwd-Rückgaben:
bash-3.2#pwdx 1950
1950: /Eimer
Das ist interessant, da unser DF es enthält …
df -h /bucket
Verwendete Dateisystemgröße Verfügbare Kapazität Auf
Bucket montiert 1,9 T 31 K 1,9 T 1 % / Bucket
... aber der Versuch, in /bucket zu wechseln und einen auszuführen, ls
führt zum gleichen Hängereffekt.
bash-3.2zpool list
NAME GRÖSSE ZUTEILUNG FREI CAP GESUNDHEIT ALTROOT
Eimer 1,94T 308K 1,94T 0% AUSGESETZT -
rpool 136G 58,0G 78,0G 42% ONLINE -
bash-3.2umount /bucket
„Bucket“ kann nicht geöffnet werden: Pool-E/A ist derzeit angehalten
bash-3.2zpool export bucket
'/bucket' kann nicht ausgehängt werden: Gerät beschäftigt
bash-3.2zpool status -x
Pool: Bucket-
Status:
Status SUSPENDED: Ein oder mehrere Geräte weisen aufgrund von E/A-Fehlern einen Fehler auf.
Aktion: Stellen Sie sicher, dass die betroffenen Geräte verbunden sind, und führen Sie dann „zpool clear“ aus.
Siehe:http://www.sun.com/msg/ZFS-8000-HC
Scan: keine angeforderte
Konfiguration:
NAME STATE READ WRITE CKSUM
Bucket SUSPENDED 0 0 0 aufgetretene E/A-Fehler c3t50060E80102B1F5Ad78 FAULTED 2 0 0 zu viele Fehler
Also … ich habe das Gefühl, dass wir aufgeschmissen sind und dass es während der „Umschaltarbeit“ KEINE zwei aktiven/funktionsfähigen Pfade zum SAN gab und wir deshalb dem vdev den Boden unter den Füßen weggezogen haben. Dabei hat sich herausgestellt, dass das Backup dort zwar funktioniert hat, als es den Geist aufgegeben hat, aber jeder andere Prozess, beispielsweise meiner ls
, hätte dasselbe Verhalten gezeigt.
Hat irgendjemand einen letzten rettenden Gedanken wie „Führen Sie diesen unbekannten Befehl aus, der Ihnen einen Neustart erspart“???
Antwort1
Wie von Jeff vorgeschlagen, sollte das Löschen des Zpools helfen, das Problem zu beheben, wenn die Pfade zurückgegeben wurden. Da es so klingt, als wäre dies nicht der Fall, kann der Server die LUN(s) wahrscheinlich nicht sehen.
A zpool clear -F -n bucket
teilt Ihnen auch mit, ob der Pool durch Verwerfen des letzten Transaktionssatzes importiert werden konnte (Option -F).`
Sie haben Switch-Arbeit erwähnt, also möchten Sie vielleicht überprüfen, welche Arbeit durchgeführt wurde und ob eine der Änderungen den oder einen der Pfade entfernt hat. Haben Sie sich Ihre `luxadm display /dev/rdsk/c<____>s2-Ausgabe angesehen? Oder versucht, die Pfade mit cfgadm neu zu konfigurieren? Oder ein Forcelip-Ereignis über einen Pfad gesendet?
Die vollständige Ausgabe von a zpool status bucket
kann auch hilfreich sein, um den Pooltyp (Spiegel, Cat, Stripe, ...) zu bestimmen. Aufgrund des Problems gehe ich davon aus, dass es sich nicht um einen Spiegel handelt.
Mir ist klar, dass ich das leicht sagen kann, da ich nicht involviert bin, aber geraten Sie noch nicht gleich in Panik, da die Daten noch alle auf dem Array vorhanden sein sollten, vorausgesetzt, es ist nicht das Problem. Aber Sie müssen möglicherweise am Ende erneut importieren und dabei einige der Transaktionen zurücksetzen.
Viel Glück!
Antwort2
Sie können Ihren SAN-Status (FC SAN vorausgesetzt) wie folgt sehen:
for port in `fcinfo hba-port | grep Port | awk '{ print $4 }'`; do
> fcinfo remote-port -ls -p $port
> done
Lesen Sie auch dieManpage fürmpathadm
. Mit können Sie mpathadm show lu LUN
den Status einer LUN anzeigen.