Esse tutorial se aplica àqueles que usam o Debian Etch com um kernel mais atual que o 2.6.21 e que vêem a seguinte mensagem durante o desligamento:
DISK MIGHT NOT BE SPUN DOWN PROPERLY. UPDATE SHUTDOWN UTILITY
For more info, visit http://linux-ata.org/shutdown.html
Consultando o site indicado acima, você pode ter uma descrição detalhada sobre a causa do problema. Pra resumir, pode-se dizer que a forma como o utilitário Shutdown trabalha usando um kernel mais recente é inadequada, podendo a longo prazo, causar danos ao disco. Para corrigir isso, seria necessário atualizar o script de desligamento, que no Debian, está no pacote sysvinit.
Como pode-se ver na página de changelogs do pacote, isso foi corrigido no dia 23 de dezembro do ano passado, e hoje já está disponível no Debian Testing e Unstable. O problema fica para os usuários do Etch, que não receberam a correção, já que o kernel padrão dessa versão (2.6.1
não é afetado.
O uso de um kernel atual as vezes se faz necessário, principalmente por problemas relacionados a compatibilidade de hardware, motivo que me fez adotar a última versão disponível. E como não queria passar a usar o Lenny por um pequeno problema como esse, resolvi buscar uma solução.
Como o pacote é relativamente recente, não encontrei muitos artigos sobre o assunto, apenas algumas discussões em fóruns onde a única solução era usar gambiarras cuja eficiência era um tanto quanto duvidosa. Pensei em baixar o pacote do Lenny, mas as dependências requerem versões mais atuais da GlibC, então isso não seria possível. Por fim, a solução foi compilar um pacote com a versão atual, assim não teria problema com dependências.
Para os que não desejam fazer todo o processo, disponibilizei os pacotes do Sysvinit atualizados neste apontador. Os pacotes foram compilados para a arquitetura i386 e até o presente momento, não apresentou nem um tipo de problema. Se por motivos de segurança, aprendizado ou as duas coisas, continue lendo para você mesmo criar os pacotes.
Primeiramente, certifique-se que você tem os repositórios oficiais ativados no seu sources.list, incluindo os repositórios de código-fonte (aqueles que começam por deb-src). Pode seguir este apontador para verificar se estão corretos.
Agora, adicione também o repositório de código-fonte do Debian Lenny:
deb-src http://ftp.br.debian.br/debian lenny main
Depois de adicionar os repositórios necessários, atualize a lista de pacotes do apt-get:
# apt-get update
Entre em um diretório de sua escolha – sugiro /usr/src/ - e baixe as dependências de compilação e o código-fonte do pacote sysvinit:
# cd /usr/src/
# apt-get build-dep sysvinit
# apt-get -t lenny source sysvinit
Agora, entre no diretório recém criado do código-fonte do sysvinit:
# cd sysvinit-2.86.ds1
Construa os pacotes com o comando abaixo:
# dpkg-buildpackage -b -us -uc
Depois de terminar o processo, os pacotes .deb estarão no diretório /usr/src/ e só precisam ser instalados:
# cd ..
# dpkg -i *.deb
O comando acima irá instalar todos os pacotes .deb localizados no diretório, verifique antes se não existem outros pacotes lá. Para confirmar, certifique-se de instalar todos os pacotes criados, que devem ser:
initscripts_2.86.ds1-53_i386.deb
sysvinit_2.86.ds1-53_i386.deb
sysvinit-utils_2.86.ds1-53_i386.deb
sysv-rc_2.86.ds1-53_all.deb
Pronto, se quiser, pode apagar o diretório do código-fonte e os demais pacotes para liberar espaço. Tentei ser o mais sucinto possível sem omitir informações importantes, qualquer dúvidas sobre o processo usado, por favor, use os comentários e responderei assim que puder. Só lembrando que não me responsabilizo por quaisquer danos ou problemas causados pela instalação dos pacotes ou pelos procedimentos aqui descritos. Espero que tenha sido útil.
:~)
Do Debian Etch