1 morte -9

1 morte -9

Configurar

Já sou programador há algum tempo, mas ainda estou um pouco confuso com questões internas profundas.

Agora. Estou bem ciente de que também não é uma boa ideia:

  1. kill -9 um processo (ruim)
  2. puxe espontaneamente o plugue de alimentação de um computador ou servidor em execução (pior)

No entanto, às vezes você simplesmente precisa. Às vezes, um processo simplesmente não responde, não importa o que você faça, e às vezes, um computador simplesmente não responde, não importa o que você faça.

Vamos supor um sistema rodando Apache 2, MySQL 5, PHP 5 e Python 2.6.5 por meio de mod_wsgi.

Nota: estou mais interessado no Mac OS X aqui, mas uma resposta pertencente a qualquer sistema UNIX me ajudaria.

A minha preocupação

Cada vez que tenho que fazer uma dessas coisas, especialmente a segunda, fico muito preocupado por um período de tempo com a possibilidade de algo ter quebrado. Algum arquivo em algum lugar pode estar corrompido – quem sabe qual arquivo? Existem mais de 1.000.000 de arquivos no computador.

Costumo usar o OS X, então executarei uma operação "Verificar disco" por meio do Utilitário de Disco. Ele não reportará problemas, mas ainda estou preocupado com isso.

E se algum arquivo de configuração em algum lugar fosse bagunçado. Ou pior ainda, e se um arquivo binário em algum lugar estiver corrompido. Ou um arquivo de script em algum lugar está corrompido agora. E se algum hardware estiver danificado?

E se eu só souber disso no próximo mês, num cenário crítico, quando a corrupção ou os danos causarem uma catástrofe?

Ou, e se dados valiosos já tiverem sido perdidos?

Minha esperança

Minha esperança é que essas preocupações e preocupações sejam infundadas. Afinal, depois de fazer isso muitas vezes antes, nada de realmente ruim aconteceu ainda. O pior é que tive que reparar algumas tabelas do MySQL, mas parece que não perdi nenhum dado.

Mas, se as minhas preocupações não forem infundadas e se puderem ocorrer danos reais na situação 1 ou na situação 2, então a minha esperança é que haja uma forma de detectá-los e preveni-los.

Minhas perguntas)

Será que isso acontece porque os sistemas operacionais modernos são projetados para garantir que nada se perca nesses cenários? Será que isso acontece porque o software moderno é projetado para garantir que nada seja perdido? E quanto ao design de hardware moderno? Que medidas estão em vigor quando você desliga o plugue de alimentação?

A minha pergunta é, para ambos os cenários, o queexatamentepode dar errado e quais etapas devem ser tomadas para corrigi-lo?

Tenho a impressão de que uma coisa que pode dar errado é que alguns programas podem não ter liberado seus dados para o disco, portanto, quaisquer dados muito recentes que deveriam ter sido gravados no disco (digamos, alguns segundos antes da inicialização ) pode ser perdido. Mas e além disso? E esse mesmo problema de perda de dados em 5 segundos pode atrapalhar um sistema?

E quanto à corrupção de arquivos aleatórios escondidos em algum lugar na enorme floresta de arquivos em meus discos rígidos?

E quanto a danos no hardware?

O que mais me ajudaria

  1. Descrições detalhadas sobre o que acontece internamente quando você encerra -9 um processo ou desliga todo o sistema. (parece instantâneo, mas alguém pode desacelerar para mim?)

  2. Explicações de todas as coisas que podem dar errado nesses cenários, juntamente com probabilidades (aproximadas, é claro) (ou seja, isso é muito improvável, mas é provável)...

  3. Descrições de medidas em vigor em hardware, sistemas operacionais e software modernos, para evitar danos ou corrupção quando esses cenários ocorrerem. (para me confortar)

  4. Instruções sobre o que fazer após um kill -9 ou um power pull, além de "verificar o disco", para realmente ter certeza de que nada está corrompido ou danificado em algum lugar da unidade.

  5. Medidas que podem ser tomadas para fortalecer a configuração de um computador de modo que, se algo tiver que ser desligado ou a energia tiver que ser desligada, qualquer dano potencial seja mitigado.

  6. Algumas informações sobre arquivos binários - não é verdade que o arquivo binário do Apache ou alguma biblioteca pode ter um ou dois bytes aleatórios corrompidos no meio, que não apareceriam e causariam problemas até mais tarde? Como posso ter certeza de que isso não aconteceu como resultado da atração de poder ou da morte?

Muito obrigado!

Responder1

Puxar a energia faz com que tudo pare durante o vôo, sem aviso prévio. kill -9 tem o mesmo efeito em um único processo, encerrando-o à força com umSIGKILL.

Se um processo for interrompido por kernel ou queda de energia, ele não fará nenhuma limpeza. Isso significa que você pode ter arquivos escritos pela metade, estados inconsistentes ou caches perdidos. Normalmente, você não precisa se preocupar com nada disso por causa do registro no diário, do status de saída e da bateria reserva.

Arquivos temporários em /tmp desaparecerão automaticamente se estiverem em tmpfs, mas você ainda pode ter arquivos de bloqueio específicos do aplicativo para remover, como o lock e .parentlock para firefox.

A maioria dos softwares é inteligente o suficiente para tentar novamente uma transação se não registrar um status de saída bem-sucedido. Um bom exemplo disso é um sistema de correio típico. Se uma mensagem estiver sendo entregue, mas for cortada no meio, o remetente tentará novamente mais tarde até obter sucesso.

Seu sistema de arquivos provavelmente está registrado em diário. Se você estiver movendo ou gravando um arquivo e ele morrer no meio do fluxo, o sistema de arquivos registrado em diário ainda fará referência ao original. O sistema de arquivos registrado em diário fará alterações de forma não destrutiva, deixando a cópia antiga e, em seguida, referenciará a nova cópia apenas como última etapa antes de recuperar o espaço que as cópias antigas ocupavam no disco.

Agora, se você tiver uma matriz RAID, ela possui todos os tipos de buffers de memória para aumentar o desempenho e fornecer confiabilidade em caso de falha de energia. Muito provavelmente o seu sistema de arquivos não saberá sobre os caches no dispositivo e seu estado, então ele pensa que uma alteração foi confirmada no disco, mas ainda está no cache RAID em algum lugar. Então, o que acontece quando o poder acaba? Esperamos que você tenha uma bateria funcional em seu gabinete RAID e a monitore. Caso contrário, você terá um sistema de arquivos corrompido para fsck.

Sim, alguns bits podem ser corrompidos em um binário, mas eu não me preocuparia com isso em hardware moderno. Se você for realmente paranóico, poderá monitorar a integridade de seus discos e do RAID com as ferramentas apropriadas, mas deveria fazer isso de qualquer maneira. Faça backups regulares e obtenha uma fonte de alimentação ininterrupta.

Responder2

Em um desligamento inesperado, os únicos arquivos que devem ser corrompidos são os arquivos abertos para gravação. Na maioria dos sistemas, em qualquer momento, você provavelmente não está gravando em um arquivo. Provavelmente.

1 morte -9

é POSIX SIGKILL e depende da implementação. O processo que recebe este sinal não terá oportunidade de tratá-lo.

1 Desligue

depende do hardware. Os cabeçotes estacionam automaticamente sob o impulso da unidade e tudo em seu cache de gravação perde a atualização da DRAM e se transforma em corrupção irrecuperável em segundos. O mesmo acontece com a memória do sistema, cache da CPU, registros, etc.

De wdc.com (google: site:wdc.com Estacionamento de cabeça protetora)

A energia foi perdida: o disco rígido foi reiniciado. O cabeçote é estacionado na zona de pouso usando a energia do fuso. Motor do fuso parado.

2 – o que pode dar errado

os arquivos deixados abertos são gravados de forma incompleta. Se um arquivo for aberto para gravação, haverá corrupção de dados. As gravações de arquivos em hardware moderno são rápidas e os PCs modernos normalmente não ficam sobrecarregados com IO. É como caminhar com os olhos vendados por uma estrada rural tranquila. Na maioria das vezes, você ficará bem.

3 - contramedidas

veja acima o que os discos fazem.

Procure sistemas de arquivos registrados em diário, eles estão normais agora:http://en.wikipedia.org/wiki/Journaling_file_system

Softwares como MS Word ou vi gravarão em um arquivo temporário em vez do original. O objetivo é nunca deixar o sistema em um estado onde não haja cópia consistente no disco.

O Windows mantém cópias do registro (é muito importante) Wikipedia: "O Windows 2000 mantém uma cópia alternativa das seções do registro (.ALT) e tenta mudar para ela quando a corrupção é detectada" (não fiz suporte técnico pesado desde Win2k, então não tenho certeza de quais são os novos mecanismos da MS)

4 - o que fazer

Em ordem de dificuldade (fácil-difícil)

  • Mantenha backups
  • Verifique no que você trabalhou pela última vez
  • Inicialize a partir de um disco separado e procure as datas/horas da última modificação para descobrir o que o sistema poderia estar fazendo no momento da falha
  • Inicialize a partir de um disco separado e compare md5sums de todos os seus arquivos com uma cópia offline.

Manter backups é a resposta mais apropriada; bons backups devem permitir que você volte para a versão modificada anteriormente.

5

Energia redundante? Educação do usuário final? colocar fita adesiva e papelão sobre o botão liga / desliga?

6

Exceto por mau funcionamento de hardware, drivers de disco corrompidos, kernel do sistema operacional quebrado, ausência de somas de verificação ou travamentos durante atualizações, binários e bibliotecas não são abertos para leitura e gravação, para que não sejam corrompidos. Acontece, mas é raro.

Responder3

Quanto a um kill -9, isso envia um sinal para o processo “morrer” na hora. O processo morre (a menos que esteja em sono ininterrupto, caso em que se torna um zumbi). Nenhum arquivo é fechado, nenhum dado é gravado e o programa não consegue captar esse sinal e fazer outra coisa. Sem limpeza, sem nada: simplesmente morre.

Os sistemas de arquivos hoje são muito robustos; coisas como XFS, JFS, ext3 e ext4 possuem diários e outras coisas para manter intactos os metadados do sistema de arquivos.

Binários como o próprio Apache e outros provavelmente não serão corrompidos por uma perda repentina de energia ou pela interrupção do sistema, pois estão na memória ou sendo lidos; se eles estiverem sendo lidos (ou seja, o Apache HTTP está sendo iniciado, por exemplo), é possível que uma oscilação de energia possa corromper o binário, mas parece improvável.

Eu tenho um Mac Mini, as pessoas parecem gostar de desligar o frio (não importa quantas vezes eu diga a eles.....) e ele continua funcionando.

Na maioria das vezes, contanto que você não dependa de kill -9 ou desligue regularmente, eu não me preocuparia muito. As coisas eram muito piores no passado; Eu me preocuparia mais com (por exemplo) o Solaris 2.6 do que com o Solaris 10 (e assim por diante).

Responder4

Um "kill -9" não sincronizará uma operação de E/S pendente. Isso geralmente não é um problema, mas se o sistema estiver sob carga pesada de E/S, você poderá perder dados.

É mais um problema com servidores, onde o controlador RAID (sem cache com bateria) pode armazenar gravações em cache e perder seus dados.

Editar: Mais uma coisa... se você depende de unidades montadas em rede e possui identificadores de arquivos abertos, é muito provável que deixe o arquivo inconsistente ou corrompido. No Windows, o exemplo clássico disso é quando os usuários montam arquivos PST do Outlook em um compartilhamento e perdem energia ou conectividade de rede.

informação relacionada