Backup para CD-R/RW e DVD+/- R/RW
Publicado por Rui Costa 12/04/2006
[ Hits: 7.527 ]
Este é um script que elaborei para a criação de backups em CD's e DVD's, iniciado pelo utilizador.
Detecta automaticamente o tipo de disco inserido no gravador, se já tem dados gravados ou não e permite fazer cópias com ou sem compressão de dados.
#!/bin/sh #Script de Backup para CD's e DVD's - Versao Novembro 2005 #Variáveis a adaptar #origens -> Lista de directorias para fazer backup, separadas por espaços #backups -> Correspondencia entre as directorias de backup e as directorias no CD/DVD #device="/dev/sr0" -> Link para o dispositivo de gravação #deviceid="0,0,0" -> ID SCSI do dispositivo de gravação #cdr_speed=8 -> Velocidade de gravação em CD-R #cdrw_speed=4 -> Velocidade de gravação em CD-RW #dvdr_speed=2 -> Velocidade de gravação em DVD-R e DVD+R #dvdrw_speed=2 -> Velocidade de gravação em DVD-R e DVD+RW #Nestas últimas 4 variáveis é ecessário ver as especifica?es do hardware #formato -> Formato das cópias ("normal" ou "targz") clear #_________________________________________________________ #Vari?eis que devemos definir para que tudo funcione bem #--------------------------------------------------------- #Relativas ao hardware device="/dev/dvd" deviceid="/dev/dvd" cdr_speed=16 cdrw_speed=8 dvdr_speed=4 dvdrw_speed=2 data=`date +%Y-%m-%d` #Relatórios dirrelat="/copias/relatorios" fichlog="$dirrelat"/backup_cd_dvd_"$data".txt #Imagem que vai ser gravada para CD/DVD fich_imagem="/tmp/backges$data.img" #Definição do formato da cópia - Alterar para "normal" caso não se queira cópias comprimidas formato="targz" if [ "$formato" = "normal" ]; then backups="basedados=/basedados definicoes=/var/defs samba=/etc/samba apache=/etc/apache2 sysconfig=/etc/sysconfig hosts=/etc/hosts" else backups="backup=/tmp/backups" fi #Para o caso de cópias comprimidas origens="/basedados /var/defs /etc/samba /etc/apache2 /etc/sysconfig /etc/hosts" fichbase="backup_diario" fichtar="/tmp/backups/$fichbase"_"$data.tar.gz" echo " " >>$fichlog echo " " >>$fichlog echo "Início de Backup em $(date +%A", "%d"/"%m"/"%Y" ? "%H":"%M)" >>$fichlog if [ "$formato" = "normal" ]; then echo "Backup de $backups no formato $formato" echo "Backup de $backups no formato $formato" >>$fichlog else echo "Backup de $origens no formato tar.gz" echo "Backup de $origens no formato tar.gz" >>$fichlog fi if [ -d /tmp/backups ]; then rm -rf /tmp/backups/* >/dev/null 2>&1 fi if [ -f /tmp/atipcd.txt ]; then rm -rf /tmp/atipcd.txt fi if [ -f /tmp/toccd.txt ]; then rm -rf /tmp/toccd.txt fi if [ -f /tmp/dvdrelat ]; then rm -rf /tmp/dvdrelat fi if [ -f /tmp/dvderros ]; then rm -rf /tmp/dvderros fi #Vamos ver o tipo de disco inserido no gravador e o tipo de unidade echo echo "A verificar o tipo de disco inserido" echo " " >>$fichlog echo "A verificar o tipo de disco inserido" >>$fichlog #cdrecord -debug=0 -s -eject dev=$deviceid >/dev/null 2>&1 cdrecord -debug=0 -s -eject dev=$deviceid #>/dev/null 2>&1 cdrecord -debug=0 -s -load dev=$deviceid >/dev/null 2>&1 dvd+rw-mediainfo $device >/tmp/dvdrelat 2>/tmp/dvderros #Vamos ver se temos um gravador de CD's ou DVD's grep "not a DVD unit" /tmp/dvderros >/dev/null 2>&1 dvdunit=$? if [ $dvdunit -eq 0 ]; then #É um gravador de CD's tipodisco="CD" else #teste=`more /tmp/dvderros|fgrep -i "mounted"|cut -d "[" -f 2|cut -d " " -f 1,2` grep -i "no media" /tmp/dvderros >/dev/null 2>&1 naotemdisco=$? grep -i "non-DVD" /tmp/dvderros >/dev/null 2>&1 temcd=$? tipodvd=`grep -i "Mounted Media" /tmp/dvdrelat|cut -d "," -f 2|cut -d " " -f 2` >/dev/null 2>&1 if [ $naotemdisco -eq 0 ]; then #Não tem nada la dentro echo " -> Por favor, insira um CD ou DVD no gravador" echo " -> Não encontrei nenhum disco no gravador" >>$fichlog cdrecord dev=$deviceid -eject >/dev/null 2>&1 exit elif [ $temcd -eq 0 ]; then #Tem um CD inserido tipodisco="CD" echo " -> Inseriu um $tipodisco" elif [ "$tipodvd" = "DVD-R" -o "$tipodvd" = "DVD-RW" -o "$tipodvd" = "DVD+R" -o "$tipodvd" = "DVD+RW" ]; then tipodisco="$tipodvd" echo " -> Inseriu um DVD do tipo $tipodisco" echo " -> Inseriu um DVD do tipo $tipodisco" >>$fichlog else echo " -> Não foi possível fazer a detecção do tipo de disco" echo " -> Mensagem de erro: $teste" echo " -> Não foi possível fazer a detecção do tipo de disco" >>$fichlog echo " -> Mensagem de erro: $teste" >>$fichlog cdrecord dev=$deviceid -eject >/dev/null 2>&1 exit fi fi #Se for um CD vamos verificar o tipo de CD if [ "$tipodisco" = "CD" ]; then #Ou ?um CD ou não tem nada l?dentro cdrecord -s debug=0 dev=$deviceid -atip >/tmp/atipcd.txt 2>/dev/null atipcd=`more /tmp/atipcd.txt|fgrep -i "erasable"|tr -d " "|tr '[:upper:]' '[:lower:]'` if [ -z "$atipcd" ]; then #CD não grav?el echo " -> O CD inserido não é válido para gravação" >>$fichlog echo " -> O CD inserido não é válido para gravação" echo " -> Insira um CD ou DVD v?ido para gravação" cdrecord dev=$deviceid -eject >/dev/null 2>&1 exit elif [ "$atipcd" = "iserasable" ]; then #?um CD-RW tipodisco="CD-RW" echo " -> Foi encontrado um CD do tipo $tipodisco" echo " -> Foi encontrado um CD do tipo $tipodisco" >>$fichlog else tipodisco="CD-R" cdrecord -s debug=0 dev=$deviceid -toc >/tmp/toccd.txt 2>/dev/null toccd=`more /tmp/toccd.txt|fgrep -i "first:"|tr '[:upper:]' '[:lower:]'|cut -d " " -f 1` if [ -z "$toccd" ]; then #?um CD-R Limpo) echo " -> Foi encontrado um CD virgem do tipo $tipodisco" echo " -> Foi encontrado um CD virgem do tipo $tipodisco" >>$fichlog else #?um CD-R multisess? ou j?fechado mscd=`cdrecord -s debug=0 dev=$deviceid -msinfo|fgrep -i "0," 2>/dev/null` if [ -z $mscd ]; then #J?fechado echo " -> Foi encontrado um disco do tipo $tipodisco já fechado" >>$fichlog echo " -> Não é possível gravar neste CD" >>$fichlog echo " -> Foi encontrado um disco do tipo $tipodisco já fechado" echo " -> Não e possível gravar neste CD" echo " -> Insira um CD-R virgem, um CD-RW ou um DVD" cdrecord dev=$deviceid -eject >/dev/null 2>&1 exit else #CD-R Multisess? ainda aberto echo " -> Foi encontrado um CD do tipo $tipodisco em multisessão" >>$fichlog echo " -> Não é aconselhável efectuar backups em CD-R's multisessão" >>$fichlog echo " -> Foi encontrado um CD do tipo $tipodisco em multisessão" echo " -> Não é aconselhável efectuar backups em CD-R's multisessão" echo " -> Insira um CD-R virgem, um CD-RW ou um DVD" cdrecord dev=$deviceid -eject >/dev/null 2>&1 exit fi fi fi fi echo "Suporte seleccionado: $tipodisco" >>$fichlog #Verificar o espaçoem disco echo " " >>$fichlog echo "A verificar espaço necessário em disco" >>$fichlog echo echo "A verificar espaço necessário em disco" freespace=`df -l --sync -BM /|fgrep -i "/dev"|tr -s " "|cut -d " " -f 4|tr -d "M"` tamanho=`mkisofs -quiet -print-size -D -U -J -r -graft-points $origens 2>/dev/null|tr -d " "` tamanhotargz=`echo "scale=0; $tamanho*2.048/1024*0.3"|bc -l` tamanho=`echo "scale=0; $tamanho*2.048/1024"|bc -l` echo " -> Espaço disponível em disco: $freespace MB" echo " -> Dimensão em formato normal: $tamanho MB" echo " -> Dimensão estimada em formato targz: $tamanhotargz MB" echo " -> Espaço disponível em disco: $freespace MB" >>$fichlog echo " -> Dimensão em formato normal: $tamanho MB" >>$fichlog echo " -> Dimensão estimada em formato targz: $tamanhotargz MB" >>$fichlog if [ "$formato" = "targz" ]; then if [ $(echo "$freespace<$tamanhotargz"|bc -l) -eq 1 ]; then echo " -> O espaço disponível pode ser insuficiente para criar os ficheiros targz" echo " -> O espaço disponível pode ser insuficiente para criar os ficheiros targz" >>$fichlog fi fi if [ "$formato" = "normal" ]; then if [ $(echo "$freespace<300"|bc -l) -eq 1 ]; then echo " -> O espaço disponível pode ser insuficiente para criar ficheiros temporários" echo " -> O espaço disponível pode ser insuficiente para criar ficheiros temporários" >>$fichlog fi fi #Caso se escolha cópias comprimidas if [ $formato = "targz" ]; then echo echo " " >>$fichlog if [ ! -d "/tmp/backups" ]; then echo "A directoria /tmp/backups não existe. Vou criar." echo "A directoria /tmp/backups não existe. Vou criar." >>$fichlog mkdir /tmp/backups chmod 777 /tmp/backups fi if [ ! -d "/tmp/backups" ]; then echo " -> Não foi possível criar a directoria /tmp/backups" echo " -> Tente criar a directoria manualmente e dar-lhe permissões" echo " -> Não foi possível criar a directoria /tmp/backups. A Sair" >>$fichlog exit else echo "Foi encontrada a directoria /tmp/backups." echo "Foi encontrada a directoria /tmp/backups." >>$fichlog fi #Vamos criar os ficheiros comprimidos echo echo " " >>$fichlog echo "A criar o backup comprimido em /tmp/backups/" >>$fichlog echo "A criar o backup comprimido em /tmp/backups/" echo "A criação do ficheiro poderá demorar alguns minutos" echo " -> Aguarde um pouco, por favor" tar cvzf $fichtar $origens >> $fichlog #if [ $? -ne 0 ]; then if [ ! -f "$fichtar" ]; then echo " Não foi possível criar o ficheiro comprimido!" echo " Houve um erro ao criar o ficheiro!" echo " Não foi possível criar o ficheiro comprimido!" >> $fichlog echo " Houve um erro ao criar o ficheiro!" >> $fichlog exit fi echo " -> Aguarde um momento, por favor" sleep 10 sync sleep 5 fi #Vamos verificar o espaço necessário echo echo " " >>$fichlog echo "A calcular o espaço necessário no $tipodisco" echo "A calcular o espaço necessário no $tipodisco" >> $fichlog tamanho=`mkisofs -quiet -print-size -D -U -J -r -graft-points $backups 2>/dev/null` tamanho=`echo "scale=0; $tamanho*2.048/1024"|bc -l` echo " -> Espaço necessário: $tamanho" echo " -> Espaço necessário: $tamanho" >> $fichlog if [ "$tipodisco" = "CD-R" -o "$tipodisco" = "CD-RW" ]; then if [ $(echo "$tamanho>640"|bc -l) -eq 1 ]; then echo " -> O conteúdo poderá não caber num CD" echo " ->Demasiado grande para um $tipodisco em formato $formato" >>$fichlog echo "A sair" if [ "$formato" = "normal" ]; then echo " -> Opte por fazer cópias comprimidas ou utilizar DVD's" exit else if [ -f /tmp/backups/*.tar.gz ]; then echo " -> Opte por utilizar DVD's" echo " -> A remover os ficheiros tar.gz" rm -rf /tmp/backups/*.tar.gz exit fi fi fi fi if [ "$tipodisco" = "DVD-R" -o "$tipodisco" = "DVD-RW" -o "$tipodisco" = "DVD+R" -o "$tipodisco" = "DVD+RW" ]; then if [ $(echo "$tamanho>=4450"|bc -l) -eq 1 ]; then echo " -> O conteúdo poderá não caber num DVD" echo " ->Demasiado grande para um $tipodisco em formato $formato" >>$fichlog echo "A sair" >>$fichlog if [ "$formato" = "normal" ]; then echo " -> Opte por fazer cópias comprimidas" exit else if [ -f /tmp/backups/*.tar.gz ]; then echo " -> A remover os ficheiros tar.gz" rm -rf /tmp/backups/*.tar.gz exit fi fi fi fi #GRAVACAO EM CD if [ "$tipodisco" = "CD-R" -o "$tipodisco" = "CD-RW" ]; then echo echo " " >>$fichlog if [ "$tipodisco" = "CD-R" ]; then echo "A efectuar a gravação" echo "A efectuar a gravação em $tipodisco" >>$fichlog nice --5 mkisofs -V "backges$data" -D -U -J -r -graft-points $backups | cdrecord dev=$deviceid speed=$cdr_speed -fs=8m -driveropts=burnfree - if [ $? -eq 0 ]; then echo " -> Gravação terminada com sucesso" echo "Gravação terminada com sucesso" >>$fichlog else echo " -> Podem ter ocorrido erros na gravação" echo "Podem ter ocorrido erros na gravação" >>$fichlog fi elif [ "$tipodisco" = "CD-RW" ]; then echo "A limpar o CD" echo "A limpar o CD" >>$fichlog cdrecord dev=$deviceid speed=$cdrw_speed blank=fast echo "A efectuar a gravação" echo "A efectuar a gravação em $tipodisco" >>$fichlog nice --5 mkisofs -V "backges$data" -D -U -J -r -graft-points $backups | cdrecord dev=$deviceid speed=$cdrw_speed -fs=8m -driveropts=burnfree - if [ $? -eq 0 ]; then echo " -> Gravação terminada com sucesso" echo " -> Gravação terminada com sucesso" >>$fichlog else echo " -> Podem ter ocorrido erros na gravação" echo " -> Podem ter ocorrido erros na gravação" >>$fichlog fi fi fi #Fim da sec?o CD #GRAVACAO EM DVD-R/-RW if [ "$tipodisco" = "DVD-RW" -o "$tipodisco" = "DVD-R" ]; then echo echo " " >>$fichlog if [ "$tipodisco" = "DVD-R" ]; then echo "A efectuar a gravação em DVD-R" echo "A efectuar a gravação em DVD-R" >>$fichlog echo " -> Não utilize o servidor enquanto estiver em gravação" nice --5 growisofs -dvd-compat -speed=$dvdr_speed -Z $device -DUJrT -graft-points $backups 2>/dev/null if [ $? -eq 0 ]; then echo " -> Gravação terminada com sucesso" echo " -> Gravação terminada com sucesso" >>$fichlog else echo " -> Podem ter ocorrido erros na gravação" echo " -> Podem ter ocorrido erros na gravação" >>$fichlog fi elif [ "$tipodisco" = "DVD-RW" ]; then formdvd=`dvd+rw-mediainfo $device|fgrep -i "Mounted Media"|cut -d "W" -f 2|tr -d " "|tr '[:upper:]' '[:lower:]'` if [ ! "$formdvd" = "restrictedoverwrite" ]; then echo " -> Primeira utiliza?o do DVD-RW, a formatar" echo " -> Primeira utiliza?o do DVD-RW, a formatar" >>$fichlog echo " -> Este processo demorar?entre 30 a 60 minutos" dvd+rw-format -force=full $device fi formdvd=`dvd+rw-mediainfo $device|fgrep -i "Mounted Media"|cut -d "W" -f 2|tr -d " "|tr '[:upper:]' '[:lower:]'` if [ "$formdvd" = "restrictedoverwrite" ]; then echo " -> A efectuar a gravação do DVD-RW" echo " -> A efectuar a gravação do DVD-RW" >>$fichlog echo " -> Não utilize o servidor enquanto estiver em gravação" nice --5 growisofs -dvd-compat -speed=$dvdrw_speed -Z $device -DUJrT -graft-points $backups 2>/dev/null if [ $? -eq 0 ]; then echo " -> Gravação terminada com sucesso" echo " -> Gravação terminada com sucesso" >>$fichlog else echo " -> Podem ter ocorrido erros na gravação" echo " -> Podem ter ocorrido erros na gravação" >>$fichlog fi else echo " -> Não foi possível formatar devidamente o $tipodisco" echo " -> Utilize outro DVD" echo " -> A formatação do $tipodisco correu mal" >>$fichlog exit fi fi fi #Fim da sec?o DVD- #GRAVACAO EM DVD+R/+RW if [ "$tipodisco" = "DVD+RW" -o "$tipodisco" = "DVD+R" ]; then echo echo " " >>$fichlog echo "A efectuar a gravação" echo "A efectuar a gravação em $tipodisco" >>$fichlog echo " -> Não utilize o servidor enquanto estiver em gravação" if [ "$tipodisco" = "DVD+R" ]; then nice --5 growisofs -dvd-compat -speed=$dvdr_speed -Z $device -DUJrT -graft-points $backups 2>/dev/null elif [ "$tipodisco" = "DVD+RW" ]; then nice --5 growisofs -dvd-compat -speed=$dvdrw_speed -Z $device -DUJrT -graft-points $backups 2>/dev/null fi if [ $? -eq 0 ]; then echo " -> Gravação terminada com sucesso" echo " -> Gravação terminada com sucesso" >>$fichlog else echo " -> Podem ter ocorrido erros na gravação" echo " -> Podem ter ocorrido erros na gravação" >>$fichlog fi fi #Fim da sec?o DVD+ #ELIMINAR FICHEIROS DESNECESSÁRIOS echo echo " " >>$fichlog if [ "$formato" = "targz" ]; then if [ -d /tmp/backups ]; then echo " -> A remover os ficheiros tar.gz" echo " -> A remover os ficheiros tar.gz" >>$fichlog rm -rf /tmp/backups/*.tar.gz >/dev/null 2>&1 fi fi if [ -f /tmp/atipcd.txt ]; then rm -rf /tmp/atipcd.txt fi if [ -f /tmp/toccd.txt ]; then rm -rf /tmp/toccd.txt fi echo "Fim de Backup em $(date +%A", "%d"/"%m"/"%Y" ? "%H":"%M)" >>$fichlog
Criar usuários com ponto (nome.usuario) no Slackware
Como Converter várias fotos JPG em arquivos PDFs, compactando e girando em 90º
Extrair o áudio de arquivos de vídeo
SSSR - configure Samba no Damn Small Linux e DSL-N
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta