Este capítulo descreve como fazer a manutenção de seu sistema de arquivos e os programas de manutenção automática que são executados periodicamente pelo sistema.
A checagem do sistema de arquivos permite verificar se toda a estrutura para armazenamento de arquivos, diretórios, permissões, conectividade e superfície do disco estão funcionando corretamente. Caso algum problema exista, ele poderá ser corrigido com o uso da ferramenta de checagem apropriada. As ferramentas de checagem de sistemas de arquivos costumam ter seu nome iniciado por fsck e terminados com o nome do sistema de arquivos que verifica, separados por um ponto:
e2fsck.
dosfsck.
Para verificar um sistema de arquivos é necessário que ele esteja desmontado
caso contrário poderá ocorrer danos em sua estrutura.  Para verificar o sistema
de arquivos raíz (que não pode ser desmontado enquanto o sistema estiver sendo
executado) você precisará inicializar através de um disquete e executar o
fsck.ext2.
Este utilitário permite verificar erros em sistemas de arquivos EXT2 (Linux Native).
fsck.ext2 [opções] [dispositivo]
Onde:
fsck.ext2 verificar se existem agrupamentos danificados na
unidade de disco durante a checagem.
fsck.ext2.
badblocks.
Caso a opção -c seja usada junto com -n, -l ou -L, o sistema de arquivos será verificado e permitirá somente a atualização dos setores danificados não alterando qualquer outra área.
Caso sejam encontrados arquivos problemáticos e estes não possam ser
recuperados, o fsck.ext2 perguntará se deseja salva-los no
diretório lost+found.  Este diretório é encontrado em todas as
partições ext2.
Após sua execução é mostrado detalhes sobre o sistema de arquivos verificado como quantidade de blocos livres/ocupados e taxa de fragmentação.
Exemplos: fsck.ext2 /dev/hda2, fsck.ext2 -f /dev/hda2, fsck.ext2 -vrf /dev/hda1.
Verifica o sistema de arquivos minix em um dispositivo.
fsck.minix [opções] [dispositivo]
Onde:
Exemplo: fsck.minix -f /dev/hda8, fsck.minix -vf /dev/hda8
Procura blocos defeituosos em um dispositivo.
badblocks [opções] [dispositivo]
Onde:
fsck.ext2 junto com a opção
-l.
badblocks.
badblocks
procura por blocos defeituosos gravando alguns padrões (0xaa, 0x55, 0xff, 0x00)
em cada bloco do dispositivo e comparando seu conteúdo.
Nunca use a opção -w em um dispositivo que contém arquivos pois eles serão apagados!
Exemplo: badblocks -s /dev/hda6, badblocks -s -o bad /dev/hda6
Permite desfragmentar uma unidade de disco. A fragmentação é o armazenamento de arquivos em áreas não seqüenciais (uma parte é armazenada no começo a outra no final, etc), isto diminui o desempenho da unidade de disco porque a leitura deverá ser interrompida e feita a movimentação da cabeça para outra região do disco onde o arquivo continua, por este motivo discos fragmentados tendem a fazer um grande barulho na leitura e o desempenho menor.
A desfragmentação normalmente é desnecessária no GNU/Linux porque
o sistema de arquivos ext2 procura automaticamente o melhor local para
armazenar o arquivo.  Mesmo assim, é recomendável desfragmentar um sistema de
arquivos assim que sua taxa de fragmentação subir acima de 10%.  A taxa de
fragmentação pode ser vista através do fsck.ext2.  Após o
fsck.ext2 ser executado é mostrada a taxa de fragmentação seguida
de non-contiguos.
A ferramenta de desfragmentação usada no GNU/Linux é o
defrag que vem com os seguintes programas:
O sistema de arquivos deve estar desmontado ao fazer a desfragmentação.  Se
quiser desfragmentar o sistema de arquivos raíz (/), você
precisará inicializar através de um disquete e executar um dos programas de
desfragmentação apropriado ao seu sistema de arquivos.  A checagem individual
de fragmentação em arquivos pode ser feita com o programa frag.
ATENÇÃO: Retire cópias de segurança de sua unidade antes de fazer a desfragmentação. Se por qualquer motivo o programa de desfragmentação não puder ser completado, você poderá perder dados!
e2defrag [opções] [dispositivo]
Onde:
e2defrag.
Todos os inodos terão prioridade igual a zero caso a opção -i não seja usada ou o inodo não seja especificado no [arquivo]. O [arquivo] deverá conter uma série de linhas com um número (inodo) ou um número prefixado por um sinal de igual seguido da prioridade.
Exemplo: e2defrag -n -v /dev/hdb4, e2defrag -r /dev/hda1
Tudo que acontece em sistemas GNU/Linux pode ser registrado em
arquivos de log em /var/log, como vimos anteriormente.  Eles são
muito úteis por diversos motivos, para o diagnóstico de problemas, falhas de
dispositivos, checagem da segurança, alerta de eventuais tentativas de invasão,
etc.
O problema é quando eles começam a ocupar muito espaço em seu disco. Verifique quantos Megabytes seus arquivos de LOG estão ocupando através do comando cd /var/log;du -hc. Antes de fazer uma limpeza nos arquivos de LOG, é necessário verificar se eles são desnecessários e só assim zerar os que forem dispensáveis.
Não é recomendável apagar um arquivo de log pois ele pode ser criado com permissões de acesso indevidas (algumas distribuições fazem isso). Você pode usar o comando: echo -n >arquivo ou o seguinte shell script para zerar todos os arquivos de LOG de uma só vez (as linhas iniciante com # são comentários):
     #! /bin/sh
     cd /var/log
     for l in `ls -p|grep '/'`; do
      echo -n >$l &>/dev/null
      echo Zerando arquivo $l...
     done
     echo Limpeza dos arquivos de log concluída!
Copie o conteúdo acima em um arquivo com a extensão .sh, dê
permissão de execução com o chmod e o execute como usuário
root.  É necessário executar este script para zerar arquivos de
log em subdiretórios de /var/log, caso sejam usados em seu
sistema.
Algumas distribuições, como a Debian GNU/Linux, fazem o
arquivamento automático de arquivos de LOGs em arquivos .gz
através de scripts disparados automaticamente pelo cron.  ATENÇÃO:
LEMBRE-SE QUE O SCRIPT ACIMA APAGARÁ TODOS OS ARQUIVOS DE LOGs DO SEU SISTEMA
SEM POSSIBILIDADE DE RECUPERAÇÃO.  TENHA ABSOLUTA CERTEZA DO QUE NÃO PRECISARÁ
DELES QUANDO EXECUTAR O SCRIPT ACIMA!
Os arquivos responsáveis pela manutenção automática do sistema se encontram em
arquivos individuais localizados nos diretórios /etc/cron.daily,
/etc/cron.weekly e /etc/cron.montly.  A quantidade de
arquivos depende da quantidade de pacotes instalado em seu sistema, porque
alguns programam tarefas nestes diretórios e não é possível descrever todas,
para detalhes sobre o que cada arquivo faz veja o cabeçalho e o código de cada
arquivo.
Estes arquivos são executados pelo cron através do arquivo
/etc/crontab.  Você pode programar quantas tarefas desejar, para
detalhes veja cron, Section 25.7.
Alguns programas mantém arquivos do cron individuais em
/var/spool/cron/crontabs que executam comandos periodicamente.
O cron é um daemon que permite o agendamento da execução de um
comando/programa para um determinado dia/mês/ano/hora.  É muito usado em
tarefas de arquivamento de logs, checagem da integridade do sistema e execução
de programas/comandos em horários determinados.
As tarefas são definidas no arquivo /etc/crontab e por arquivos
individuais de usuários em /var/spool/cron/crontabs/[usuário]
(criados através do programa crontab).  Adicionalmente a
distribuição Debian utiliza os arquivos no diretório
/etc/cron.d como uma extensão para o /etc/crontab.
Para agendar uma nova tarefa, basta editar o arquivo /etc/crontab
com qualquer editor de texto (como o ae e o vi) e
definir o mês/dia/hora que a tarefa será executada.  Não é necessário reiniciar
o daemon do cron porque ele verifica seus arquivos a cada minuto.
Veja a seção O formato de um
arquivo crontab, Section 25.7.1 para entender o formato de arquivo
cron usado no agendamento de tarefas.
O arquivo /etc/crontab tem o seguinte formato:
     52  18    1   *   *    root     run-parts --report /etc/cron.montly
     |   |     |   |   |      |      |
     |   |     |   |   |      |      \_Comando que será executado
     |   |     |   |   |      |      
     |   |     |   |   |      \_ UID que executará o comando
     |   |     |   |   |            
     |   |     |   |   \_ Dia da semana (0-7)
     |   |     |   |
     |   |     |   \_ Mês (1-12)
     |   |     |
     |   |     \_ Dia do Mês (1-31)
     |   |
     |   \_ Hora
     |
     \_ Minuto
Onde:
Os campos do arquivo são separados por um ou mais espaços ou tabulações. Um asterisco * pode ser usado nos campos de data e hora para especificar todo o intervalo disponível. O hífen - serve para especificar períodos de execução (incluindo a o número inicial/final). A vírgula serve para especificar lista de números. Passos podem ser especificados através de uma /. Veja os exemplos no final desta seção.
O arquivo gerado em /var/spool/cron/crontabs/[usuário] pelo
crontab tem o mesmo formato do /etc/crontab exceto
por não possuir o campo usuário (UID), pois o nome do arquivo já
identifica o usuário no sistema.
Para editar um arquivo de usuário em /var/spool/cron/crontabs ao
invés de editar o /etc/crontab use crontab -e, para
listar as tarefas daquele usuário crontab -l e para apagar o
arquivo de tarefas do usuário crontab -r (adicionalmente você pode
remover somente uma tarefa através do crontab -e e apagando a
linha correspondente).
OBS: Não esqueça de incluir uma linha em branco no final do arquivo, caso contrário o último comando não será executado.
O cron define o valor de algumas variáveis automaticamente durante
sua execução; a variável SHELL é definida como
/bin/sh, PATH como /usr/bin:/bin,
LOGNAME, MAILTO e HOME são definidas
através do arquivo /etc/passwd.  Os valores padrões destas
variáveis podem ser substituídos especificando um novo valor nos arquivos do
cron.
Exemplos de um arquivo /etc/crontab:
     SHELL=/bin/sh
     PATH=/sbin:/bin:/usr/sbin:/usr/bin
     
     00 10  * * *  root sync
     # Executa o comando sync todo o dia as 10:00
     00 06  * * 1  root updatedb
     # Executa o comando updatedb toda segunda-feira as 06:00.
     10,20,40 *  * * *  root runq
     # Executa o comando runq todos os dias e a toda a hora em 10, 20 e 40 minutos. 
     */10 *  * * *  root fetchmail
     # Executa o comando fetchmail de 10 em 10 minutos todos os dias
     15 0  25 12 * root echo "Feliz Natal"|mail john
     # Envia um e-mail as 0:15 todo o dia 25/12 para john desejando um feliz natal. 
     30 5  * * 1-6   root  poff
     # Executa o comando poff automaticamente as 5:30 de segunda-feira a sábado.
Guia Foca GNU/Linux
Versão 5.20 - Sunday, 03 de November de 2002gleydson@cipsga.org.br