Arquivos históricos do BR-Linux.org apresenta:

Backup em CD-R com gravação multi-sessão

O Alessandro de Oliveira Faria (alessandrofaria@netitec.com.br) mandou um script e o respectivo tutorial de gravação de backups em CDs multi-sessão, que serve para quem tem backups que não preenchem todo o conteúdo do CD - assim, a mesma mídia pode ser regravada várias vezes até lotar. Veja abaixo o texto dele:

Criando um invejável serviço de backup em CD-R com gravação multi-sessão

por Alessandro de Oliveira Faria (alessandrofaria@netitec.com.br)

Com este tutorial, você criará um serviço de backup em CD-R que efetua a gravação no modo multi-sessão. Este processo permite que o dados gravados sejam lidos em um cdrom convencional, mesmo utilizando o mesmo disco para outras gravações do backup. Outro processo interessante neste artigo são as rotinas que avisam o usuario com uma voz gravada em mp3, se a unidade esta com o cd lotado ou sem nenhum disco na unidade!

1 - A INSTALAÇÃO DO CDRW E O CONCEITO DE FUNCIONAMENTO:

Neste tutorial, explico apenas a instalação e configuração de drivers CDRW ATAPI, pois os drives SCSI funcionam sem muito problemas. Para elaborar este texto, usei um Gravador LG.

Em primeiro lugar, vamos verificar que a sua BIOS identificou a unidade de CD corretamente digitando o seguinte comando:


# dmesg | grep ATAPI
hdc: HL-DT-ST GCE-8520B, ATAPI CD/DVD-ROM drive
scsi0 : SCSI host adapter emulation for IDE ATAPI devices

Copie o nome do dispositivo que o sistema atribuiu a sua unidade de cd, pois esta informação será imprescindível mais tarde.

Outro detalhe importante são os pacote(relacionados logo abaixo) que devem estarem instalados para este tutorial ser concluido com exito.

Pacotes obrigatórios:

- cdrecord
- mkisofs
- mpg123 (Vou partir do princípio que a placa de som está instalada e configurada)

Agora um ponto muito importante, é ter carregado os modulos dos drivers apropriados para que todo o hardware funcione corretamente. Em algumas distribuções este modulo é carregado automáticamente, já em outras não. Em todo caso verifique se o módulo ide-scsi está carregado com o comando abaixo:


#lsmod

Se você não encontrar o módulo, adicione a seguinte linha no fim do arquivo /etc/rc.d/rc.local:


/sbin/insmod ide-scsi

Agora vamos configurar os modulos para funcionarem corretamente adicionando as seguintes linhas no final do arquivo: /etc/modules.conf


alias scd0 srmod
alias scsi_hostadapter ide-scsi
options ide-cd ignore=hdc

Observe que na última linha inseri o nome do dispositivo do meu gravador LG, troque o hdc pelo nome do dispositivo atribuido pelo Linux.

Agora salve tudo e reinicie a sua máquina, e apos o login, digite o seguinte comando. Se estiver correto, as ultimas linhas deverão ser semelhantes com a mensagens abaixo:


# dmesg
SCSI subsystem driver Revision: 1.00
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
Vendor: HL-DT-ST Model: CD-RW GCE-8520B Rev: 1.03
Type: CD-ROM ANSI SCSI revision: 02
scsi : 0 hosts left.

Vamos testar se o seu cdrom continua funcionando correntamente. Insira um disco de dados na unidade de cd e digite:


[root@servidor rc.d]# mount /dev/sr0 /mnt/cdrom
[root@servidor rc.d]# cd /mnt/cdrom
[root@servidor rc.d]# ls

Se o conteúdo do seu cd de dados aparecer corretamente, implica que tudo indo muito bem. Agora vamos continuar, e não esqueça de desmontar o cd:


[root@servidor rc.d]# mount /mnt/cdrom

Trocaremos o link da unidade de cd-rom para o dispositivo scsi:


# cd /dev
# ln -sf /dev/sr0 cdrom

Agora vamos identificar o seu gravador de CD no programa cdrecord. Este programa será reponsável pela gravação de um arquivo .iso em um CD-R


# cdrecord -scanbus
Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
scsibus0:
0,0,0 0) 'HL-DT-ST' 'CD-RW GCE-8520B ' '1.03' Removable CD-ROM
0,1,0 1) *
0,2,0 2) *

Os três primeiros numeros a esquerda separados por vírgula, são os numeros que representam o nosso gravador de cd para o programa cdrecord. No exemplo acima refenciamos ao CDRW atraves dos numeros 0,0,0.

Para gravar um cd no linux, existe 2 etapas. A primeira consiste em gerar uma imagem dos dados a serem gravados no cd, a segunda é a gravação da imagem no cd virgem.

Mkisofs é o programa que gera a image a ser gravada, sua sintaxe é:


# mkisofs -o nome_da_imagem.iso -JrT /nome/do/diretorio/

-o nome_da_imagem.iso: Este parâmetro informa o nome do arquivo .iso, que contem a imagem a ser gravada no cd.

-JrT Torna os nome longos de arquivos compativel com outros sistemas operacionais.

Veja no exemplo abaixo, estou gerando um arquivo sierra.iso que se encontra na pasta gerarcd:


# mkisofs -o /rede/iso/sierra.iso -JrT /rede/public/gerarcd/
Using CAL_D000.BMP;1 for /rede/public/gerarcd/SIERRA/PRTARTST/16BIT/CAL_DN.BMP
(CAL-DN.BMP)
4.88% done, estimate finish Mon Aug 11 21:47:26 2003
87.71% done, estimate finish Mon Aug 11 21:47:23 2003
97.45% done, estimate finish Mon Aug 11 21:47:23 2003
Total translation table size: 100031
Total rockridge attributes bytes: 158561
Total directory bytes: 262144
Path table size(bytes): 66
Max brk space used 1254a4
102624 extents written (200 Mb)

Agora só nos resta efetuarmos a gravação do CD, para isto usamos o programa cdrecord que se encarrega de gravar a imagem no disco virgem:


# cdrecord dev=0,0,0 -v speed=8 -eject -data /rede/iso/sierra.iso

Parametros:

dev=0,0,0 : dispositivo indicado pelo cdrecord -scanbus
-v speed=8 : efetua a gravação na velocidade 8x
-eject : Abre a gaveta do cd-rom após o término da gravação
-data nome_do_arq : nome e caminho do arquivo .iso (imagem) a ser gravado.

Com o exemplo acima, não conseguiremos gravar mais nenhuma outra informação no disco, pois o mesmo foi finalizado. Para utilizarmos o espaço livre no cd, teremos que efetuar uma gravação multi-seção.

Não existe segredo para fazermos gravação multi-seção. Apenas temos que verificar qual é a próxima posição disponível (espaço livre) no cd, para continuarmo a gravação apartir desde ponto.

Obtendo esta informação, precisamos avisar ao programa cdrecord que a imagem a ser gravada será multi-seção e ao programa mkisofs qual será a sua posição em que a .iso será gravada no cd.

Vou dar um breve exemplo, para este texto não ficar muito extenso:

Gerando a primeira imagem:


# mkisofs -o nome_da_imagem.iso -JrT /nome/do/diretorio/

Gravando a primeira seção:


# cdrecord dev=0,0,0 -v speed=8 -eject -multi -data nome_da_imagem.iso

Obtendo a próxima posição livre:


# cdrecord -msinfo dev=0,0,0
0,34093

Gerando as próximas imagens:


# mkisofs -o nome_da_imagem.iso -JrT -C 0,34093 -M /dev/cdrom /nome/do/diretorio/

Gravando as próximas seções:


# cdrecord dev=0,0,0 -v speed=8 -eject -multi -data nome_da_imagem.iso

2 - CRIANDO O SERVIÇO

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ó apos 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 proxima posição disponível para gravação.
- Verifica se o espaço no cd, é suficiente para gravar as informações especificada. 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ópia mensagem de voz em mp3!

Criando o script que verifica se existe disco na unidade de CD:


[root@servidor script]# 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 ser 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 atraz, não precisarei recorer 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
export LC_ALL=en_US
/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 variavel o dia da semana
POSCD=`/usr/bin/cdrecord -s -msinfo dev=0,0,0` # grava na variavel 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 intebase.
/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 gravacao, 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, digitando "crontab -e" e adicionando uma linha como a abaixo, que executa todo dia às 19:10:


10 19 * * * root /rede/script/geraiso %

Tentei ser o mais claro possível. É claro que podemos aprimorar muito estes script porém o mesmo esta funcionando.

Qualquer sugestão, favor me envie um e-mail (alessandrofaria@netitec.com.br) para que eu também possar incrementar as melhorias em meus servidores.

--------------------------------------------------------------------------------
Alessandro de Oliveira Faria
http://www.netitec.com.br email: alessandrofaria@netitec.com.br

Postado por brain em agosto 23, 2003 10:36 PM

Comentários para "Backup em CD-R com gravação multi-sessão"

» Postado por: jr em agosto 29, 2003 04:04 PM, 200.161.70.:

 

» Postado por: fuji em agosto 30, 2003 02:28 PM, 200.225.194:

 

» Postado por: Rui Costa em setembro 30, 2003 08:56 AM, 62.48.201.7:

 

» Postado por: EDUARDO em outubro 19, 2003 03:44 PM, 200.180.75.:

 

» Postado por: Irina Medvedeva em outubro 27, 2003 12:21 PM, 213.252.122:

 

» Postado por: Primata em novembro 4, 2003 08:01 AM, 200.158.243:

 

» Postado por: Thiago Ferreira em novembro 17, 2003 05:39 PM, 200.232.54.:

 

» Postado por: Weinberg Gregg em dezembro 11, 2003 06:06 AM, 62.213.67.1:

 

» Postado por: Green Matthew em dezembro 21, 2003 07:06 AM, 62.213.67.1:

 

» Postado por: Viviane em janeiro 8, 2004 10:23 AM, 200.241.100:

 

» Postado por: Rasnic Raegen em janeiro 19, 2004 03:26 PM, 62.213.67.1:

 

» Postado por: sandro dos santos soares em janeiro 22, 2004 11:22 PM, 200.151.141:

 

» Postado por: radar demonchacon em fevereiro 4, 2004 09:26 AM, 201.5.114.2:

 

» Postado por: Elexandro em abril 13, 2004 10:40 AM, 200.180.90.:

 

» Postado por: Magda em abril 23, 2004 12:19 PM, 143.54.25.2:

 

» Postado por: Arimatea em julho 13, 2004 04:53 PM, 200.164.230:

 

» Postado por: Cristiano em agosto 22, 2004 02:07 PM, 200.175.123:

 

» Postado por: Briana Banks em setembro 10, 2004 03:48 AM, 208.35.141.:

 

» Postado por: Miguel Moura em outubro 2, 2004 04:21 AM, 82.102.32.7:

 

» Postado por: keno em outubro 5, 2004 03:31 PM, 148.244.150:

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)


O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.