Processo de backup ininterrupto no Solaris

4

=========== Detalhes do sistema ===========

SO: Solaris 10, atualização 11
CPU_ARCH: SPARC (sparcv9)
HW: Sun Fire V490 (Yeahhhh baby old school)
KERNEL_REV: 150400-40
Programa: bpbkar32 (Netbackup da Symantec)
TL; DR: Não é possível matar processos mesmo com kill -9 devido ao zpool SUSPENDED devido a possivelmente não dois bons caminhos.

Problema:

Nós temos um monte (16) de processos inutilizáveis no sistema; Nós fomos notificados pela equipe de backup que eles não podiam matar esses trabalhos do servidor mestre do NB, nem gerar novos backups, então nós pulamos e tentamos um ./bp.kill_all e recebemos:

bash-3.2 # ./bp.kill_all

Looking for NetBackup processes that need to be terminated.
Killing bpbkar processes...

The following processes are still active
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 Dec 09 ? 0:00 bpbkar32 -r 8035200 -ru root -dt 0 -to 0 -bpstart_time 1481325879 -clnt nerp323
root 12618 1 0 Dec 07 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 357484 -to 0 -bpstart_time 1481077264 -clnt ne
root 29693 1 0 Dec 09 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 529430 -to 0 -bpstart_time 1481249210 -clnt ne
root 10168 1 0 Dec 09 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 530349 -to 0 -bpstart_time 1481250129 -clnt ne
root 1950 1 0 Dec 14 ? 0:00 bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 -clnt ne
Do you want this script to attempt to kill them? [y,n] (y) y
Killing remaining processes...
Waiting for processes to terminate...
Waiting for processes to terminate...
Waiting for processes to terminate...
Waiting for processes to terminate...
Waiting for processes to terminate...
There are processes still running.

... saída truncada para legibilidade.

Levando-nos a prosseguir para tentar matar esses processos com extremo preconceito, via kill -9 , também sem sucesso. Eu olhei para Como matar uma tarefa que não pode ser morto (ininterrupto?) e E se? kill -9 'não funciona? e pesquisado em "processo uninterruptable do Solaris" com resultados parciais. A reinicialização parece ser o tema comum e uma que parece ser nossa solução "bater a cabeça contra a mesa aqui" também.

Assim sendo, eu gostaria de: - validar minha lógica e raciocínio sobre a causa raiz - Veja se há uma maneira melhor de determinar onde o processo está parado / o que o sys chama está tentando executar. - Resolva a E / S sem uma reinicialização, se possível, e subsequentemente, os processos que não podem ser eliminados.
  Praticamente apenas uma análise de causa raiz e algum tipo de atenuação "No futuro, não alterne o trabalho enquanto os backups estiverem em execução ou se você não tiver dois caminhos de trabalho".

Aqui está o que eu tenho / o que estou pensando:
1) Popping no diretório / proc / 1950 / e olhando para o status. Não há dados com a compreensão dessa saída, mesmo com strings . Spews caracteres aleatórios. A coisa de nota é que 'cwd' mostra um link para nada, e tentar resolvê-lo via ls -alL /proc/1950/cwd irá travar o terminal e também criar drumroll outro processo ininterrupto.

2) A execução de um pstack 1950 gerará algumas informações úteis, mas nada que eu não possa ver de um ps -eaf ou que eu possa entender. Todos os zeros, porém, parece ruim, pois não vemos endereços ou syscall como eu faço com um pid de trabalho.

bash-3.2 # pstack 1950

1950: bpbkar32 -r 2678400 -ru root -dt 962300 -to 0 -bpstart_time 1481682080 0000000000000000 ???????? (0, 0, 0, 0, 0, 0)

3) A execução de um truss será interrompida se for tentada no processo em execução, idem para pfiles gerando um erro de "pfiles: cannot control process 1950". Interessante, mas esperado.

4) A execução de um strace apenas me diz que um "rastreador já existe"

5) executando um pwdx para imprimir os retornos cwd:
bash-3.2 # pwdx 1950

1950: /bucket

Isso é interessante, pois nosso df inclui isso ...
df -h /bucket

Filesystem size used avail capacity Mounted on
bucket 1.9T 31K 1.9T 1% /bucket

... mas tentar fazer cd no / bucket e fazer um ls produz o mesmo efeito de suspensão.

bash-3.2 # zpool list

NAME SIZE ALLOC FREE CAP HEALTH ALTROOT
bucket 1.94T 308K 1.94T 0% SUSPENDED -
rpool 136G 58.0G 78.0G 42% ONLINE -

bash-3.2 # umount /bucket

cannot open 'bucket': pool I/O is currently suspended

bash-3.2 # zpool export bucket

cannot unmount '/bucket': Device busy

bash-3.2 # zpool status -x

pool: bucket
state: SUSPENDED
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: http://www.sun.com/msg/ZFS-8000-HC
scan: none requested
config:
NAME STATE READ WRITE CKSUM
bucket SUSPENDED 0 0 0 experienced I/O failures c3t50060E80102B1F5Ad78 FAULTED 2 0 0 too many errors

Sooo ... Estou sentindo que estamos mortos na água, e realmente que quando esse "switch work" estava acontecendo, não havia dois caminhos ativos / saudáveis para a SAN, e então acabamos puxando o tapete de debaixo do vdev e aconteceu que o backup estava funcionando lá quando ele morreu, mas qualquer processo, como meu ls , teria o mesmo comportamento.

Alguém tem algum último pensamento salvador de "executar este comando desconhecido que salvará você de uma reinicialização" ???

    
por Sending_Grounds 15.12.2016 / 21:27

2 respostas

4

Como sugerido por Jeff, o zpool clear deve ajudar a resolver o problema se o caminho (s?) tiver retornado. Já que parece que o servidor provavelmente não pode ver o LUN (s).

Um zpool clear -F -n bucket também informará se o pool pode ser importado descartando o último conjunto de transações (a opção -F). '

Você mencionou o trabalho de troca, portanto, talvez queira verificar qual trabalho foi executado e se uma das alterações removeu o caminho ou qualquer um dos caminhos. Você viu sua saída 'luxadm display / dev / rdsk / c <

por 15.12.2016 / 23:08
3

Você pode ver seu status de SAN (supondo FC SAN) com o seguinte:

for port in 'fcinfo hba-port | grep Port | awk '{ print $4 }''; do
> fcinfo remote-port -ls -p $port
> done

Além disso, leia a página do manual para mpathadm . Você pode usar mpathadm show lu LUN para mostrar o status de um LUN.

    
por 16.12.2016 / 11:58