O que * exatamente * se ferra quando mato -9 ou puxa o poder?

13

Configuração

Sou programador há algum tempo, mas ainda sou um pouco confuso em coisas internas profundas.

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

  1. kill -9 um processo (ruim)
  2. puxe espontaneamente o plugue de energia em 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 que um sistema esteja executando o Apache 2, o MySQL 5, o PHP 5 e o Python 2.6.5 através do mod_wsgi.

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

Minha preocupação

Cada vez que eu tenho que fazer um destes, especialmente o segundo, estou muito preocupado por um período de tempo que algo foi quebrado. Algum arquivo em algum lugar pode estar corrompido - quem sabe qual arquivo? Existem mais de 1.000.000 de arquivos no computador.

Frequentemente estou usando o OS X, portanto, executarei uma operação "Verificar disco" por meio do Utilitário de Disco. Não reportará nenhum problema, mas ainda estou preocupado com isso.

E se algum arquivo de configuração em algum lugar se estragar? 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 não descobrir sobre isso até o próximo mês, em um cenário crítico, quando a corrupção ou dano causar uma catástrofe?

Ou, e se dados valiosos já estiverem 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 realmente ruim aconteceu ainda. O pior é que tive que consertar algumas tabelas do MySQL, mas parece que não perdi nenhum dado.

Mas, se minhas preocupações não forem infundadas, e um dano real puder acontecer em qualquer das situações 1 ou 2, então minha esperança é que haja uma maneira de detectá-lo e preveni-lo.

Minha (s) pergunta (s)

Isso pode ocorrer porque os sistemas operacionais modernos são projetados para garantir que nada seja perdido nesses cenários? Isso poderia ser porque o software moderno é projetado para garantir que nada seja perdido? E quanto ao design moderno de hardware? Quais medidas estão em vigor quando você puxa o plugue de energia?

Minha pergunta é, para ambos os cenários, o que exatamente pode dar errado, e quais etapas devem ser tomadas para corrigi-lo?

Estou com a impressão de que uma coisa que pode dar errado é que alguns programas podem não ter liberado seus dados no disco, portanto, quaisquer dados muito recentes que deveriam ser gravados no disco (digamos, alguns segundos antes o poder puxar) pode ser perdido. Mas e além disso? E esse problema de perda de dados de 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ê quer matar -9 um processo ou puxar a energia de todo o sistema. (parece instantâneo, mas alguém pode atrasá-lo para mim?)

  2. Explicações de todas as coisas que poderiam dar errado nesses cenários, juntamente com probabilidades (por suposto, é claro) (ou seja, isso é muito improvável, mas isso é 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 ocorrem. (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 garantir que nada esteja corrompido ou danificado em algum lugar da unidade.

  5. Medidas que podem ser tomadas para fortalecer uma configuração do computador, de forma que, se algo precisar ser eliminado ou a energia precisar ser puxada, qualquer possível dano será atenuado.

  6. Algumas informações sobre arquivos binários - não é verdade que o arquivo binário do apache ou alguma biblioteca poderia ter um byte ou dois aleatórios corrompidos no meio, que não sairia e causaria um problema até mais tarde? ? Como posso me assegurar de que isso não aconteceu como resultado do poder de puxar ou matar?

Muito obrigado!

    
por Mike 01.06.2010 / 22:24

4 respostas

9

Puxar o poder faz com que tudo pare em vôo, sem aviso. kill -9 tem o mesmo efeito em um único processo, finalizando-o com um SIGKILL .

Se um processo é morto por kernel ou falta de energia, ele não faz nenhuma limpeza. Isso significa que você pode ter arquivos gravados pela metade, estados inconsistentes ou caches perdidos. Você geralmente não precisa se preocupar com nada disso por causa do registro no diário, status de saída e backup de bateria.

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

A maioria dos softwares é inteligente o suficiente para repetir 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 cortada no meio, o remetente tentará mais tarde até obter sucesso.

Seu sistema de arquivos é provavelmente registrado em diário. Se você estiver movendo ou gravando um arquivo e ele morrer no meio do fluxo, o sistema de arquivos registrados ainda fará referência ao original. O sistema de arquivos com registro em diário fará alterações de forma não destrutiva, deixando a cópia antiga, e fará referência apenas à nova cópia como último passo antes de recuperar espaço das cópias antigas ocupadas no disco.

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

Sim, alguns bits podem se tornar corrompidos em um binário, mas eu não me preocuparia muito com o hardware moderno. Se você é realmente paranóico, você pode monitorar a saúde de seus discos e RAID com as ferramentas apropriadas, mas você deve fazer isso de qualquer maneira. Faça backups regulares e obtenha uma fonte de alimentação ininterrupta.

    
por 01.06.2010 / 23:50
5

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

1 matar -9

é POSIX SIGKILL e depende da implementação. O processo que recebe este sinal não terá a oportunidade de lidar com isso.

1 Desligar

depende do hardware. Os chefes estacionam automaticamente sob o impulso da unidade e tudo em seu cache de gravação perde a atualização da DRAM e decai para uma 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 com cabeça protetora)

A energia está perdida: O disco rígido é redefinido. A cabeça está estacionada na zona de pouso usando energia do fuso. Motor do fuso parado.

2 - o que pode dar errado

Os arquivos

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

3 - contramedidas

veja acima o que os discos fazem.

Procure sistemas de arquivos registrados, eles são normais agora: link

Software como o MS Word ou o vi gravará em um arquivo temporário em vez do original. O objetivo é nunca deixar o sistema em um estado em que não há 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 alternar para ele quando a corrupção é detectada" (não fiz nada suporte técnico desde o Win2k, então não sei quais são os novos mecanismos da MS)

4 - o que fazer

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

  • Manter backups
  • Verifique em que você estava trabalhando 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

Poder redundante? Educação do usuário final? colocar fita e papelão no botão de energia?

6

Falta de problemas de hardware, drivers de disco corrompidos, kernel do sistema operacional defeituoso, ausência de somas de verificação ou falhas 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.

    
por 02.06.2010 / 00:20
4

Quanto a um kill -9, isso envia um sinal ao processo para "morrer" imediatamente. 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 pode capturar este sinal e fazer outra coisa. Sem limpeza, sem nada: apenas morre.

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

Binários como o próprio Apache e outros não são propensos a serem corrompidos por uma súbita perda de poder ou por uma morte do sistema, uma vez que estão na memória ou sendo lidos; se eles estão sendo lidos (por exemplo, o Apache HTTP está começando, por exemplo), é possível que uma oscilação de energia possa corromper o binário, mas parece improvável.

Eu tenho um pessoal do Mac Mini que gosta de desligar o frio (não importa quantas vezes eu fale para ele ...) e isso continua acontecendo.

Na maioria das vezes, contanto que você não dependa de matar -9 ou desligue-se regularmente, eu não me preocuparia muito. As coisas estavam 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).

    
por 01.06.2010 / 23:33
3

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

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

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

    
por 01.06.2010 / 23:57