Antes de colocar a mão na massa, vamos entender como o script trabalha:
- verifica se tem cd na unidade, caso contrário o script fica
buzinando o usuário, reproduzindo uma mensagem de alerta em mp3.
Só após este teste, o serviço continua com as suas instruções operações.
- verifica se já foi efetuada alguma gravação no cd, pois na primeira
gravação o script não precisa procurar a próxima posição disponível
para gravação.
- verifica se o espaço no cd é suficiente para gravar as informações
especificadas. Caso o disco tenha pouco espaço, o script fica
novamente buzinando o usuário para trocar o cd (reproduzindo um mp3
que avisa estar com espaço insuficiente).
Vamos criar uma pasta
/rede/script para armazenar todos os arquivos
deste serviço:
# mkdir -p /rede/script
# cd /rede/script
O arquivos .mp3 você poder baixar em:
# wget http://cabelo.neti.vila.bol.com.br/cdrwcheio.mp3
# wget http://cabelo.neti.vila.bol.com.br/cdrw.mp3
Obs: você pode criar sua própria mensagem de voz em mp3!
Criando o script que verifica se existe disco na unidade de CD:
# vi temcd
cdrw=true
while $cdrw = true; do # Este loop termina quando for inserido um disco na unidade
cdrecord -msinfo -s dev=0,0,0 # Verifica o que tem na unidade de CD
if [ "$?" = "0" ]; # Existe CD?
then
cdrw=false # Se existir, sai do loop
else
echo "sem cd" # Se não existir, então reproduz o .mp3
mpg123 -q -r 48000 /rede/script/cdrw.mp3
sleep 10 # Espera 10 segundos
fi
done
Criando o script que verifica se o usuário retirou o CD da unidade
(quando estiver cheio):
# vi semcd
cdrw=true
while $cdrw = true; do # Este loop termina quando for inserido um disco na unidade
cdrecord -msinfo -s dev=0,0,0 # Verifica o que tem na unidade de CD
if [ "$?" != "0" ]; # Tirou o CD?
then
cdrw=false # Se tirou, sai do loop
else
echo "com cd" # Se existir cd na unidade, então reproduz o .mp3
mpg123 -q -r 48000 /rede/script/cdrwcheio.mp3
sleep 10 # Espera 10 segundos
fi
done
Criando as regras de backup:
Em meu caso, deveria copiar um Banco de dados Interbase/Firebird e o
conteúdo da pasta /rede/meusdoc.
Cada usuário terá que adaptar o script para a sua real necessidade, na
verdade isto implica em trocar o path da informação a serem gravada e
comentar a linha que faz o backup do banco de dados.
Se existir dificuldade em entender os script, me envie um e-mail para
esclarecer as dúvidas.
Resolvi deixar 7 versões do backup no HD (uma versão para cada dia da
semana). Assim se eu precisar voltar um backup de até uma semana atrás,
não precisarei recorrer ao CD. Além disto, se o CD falhar, eu tenho uma
semana para constatar o erro! :)
Vamos gerar 8 pastas: uma para cada dia da semana e outra para gerar a
imagem a ser gravada:
# cd /rede
# mkdir iso
# cd iso
# mkdir Mon Sun Tue Wed Thu Fri Sat tmp
Cada pasta representa um dia da semana e a pasta tmp será usada para
gerar o arquivo .iso (imagem).
Criando o script que gera a imagem e grava o CD:
# cd /rede/script
# vi geraiso
/rede/script/temcd # chama o script que verificar se existe cd na unidade
/bin/rm -rf /rede/iso/tmp/* # apaga o lixo da ultima gravação
HOJE=`/bin/date | /bin/cut -c 1-3` # grava na variável o dia da semana
POSCD=`/usr/bin/cdrecord -s -msinfo dev=0,0,0` # grava na variável a próxima posição disponível do cd
echo $POSCD | /bin/grep , > /dev/null # aqui o script verificar se será a 1a gravação no cd
if [ "$?" = "1" ]; then
TESTE='VIRGEM'
else
TESTE='USADO'
fi
cd /rede/iso/$HOJE # entra na para do dia atual
# a linha abaixo efetua o backup do banco Interbase.
/opt/interbase/bin/gbak -b -v /servdad/FARMAVIDA.GDB /rede/iso/$HOJE/bcodados.gdk -user SYSDBA -pass masterkey
/bin/cp -rp /rede/meusdoc/* /rede/iso/$HOJE # copia os dados para o dia atual
/bin/mkdir /rede/iso/tmp/"`date +%Y%m%d`" # cria uma pasta ano-mes-dia para gravar na raiz do cd
/bin/cp -rp /rede/iso/$HOJE/* /rede/iso/tmp/"`date +%Y%m%d`" # copia novamente os dados para tmp
if [ $TESTE = 'VIRGEM' ]; then # se for a primeira gravação, gera um imagem normal
# echo "Primeira Trilha"
/usr/bin/mkisofs -o /rede/iso/data.iso -JrT /rede/iso/tmp
else
# echo "Segunda Trilha" # gera uma imagem informando a próxima posição livre
/usr/bin/mkisofs -o /rede/iso/data.iso -JrT -C $POSCD -M /dev/cdrom /rede/iso/tmp
fi
/bin/rm -rf /rede/iso/tmp/"`date +%Y%m%d`" # apaga o lixo
# finalmente grava o cd.
/usr/bin/cdrecord dev=0,0,0 -v speed=8 -eject -multi -data /rede/iso/data.iso
if [ "$?" != "0" ]; then # se o disco estiver cheio
/rede/script/semcd # ficar buzinado até que o cd seja trocado
/rede/script/geraiso # começa tudo de novo.
fi
Não vamos esquecer de dar o direito de execução nos arquivos:
# chmod 770 *
Adicionando o script no crontab:
# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
# 01 * * * * root run-parts /etc/cron.hourly
# 02 4 * * * root run-parts /etc/cron.daily
# 22 4 * * 0 root run-parts /etc/cron.weekly
# 42 4 1 * * root run-parts /etc/cron.monthly
10 19 * * * root /rede/script/geraiso %
Tentei ser o mais claro possível. É claro que podemos aprimorar
muito estes scripts, porém os mesmos estão funcionando.
Qualquer sugestão, favor me envie um e-mail para que eu também possa
incrementar as melhorias em meus servidores.