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