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