Backup para CD-R/RW e DVD+/- R/RW
Publicado por Rui Costa 12/04/2006
[ Hits: 7.543 ]
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
Resolvendo alguns erros ao executar o apt-get, Ubuntu 16.04
Gerenciamento de software e hardware de desktop
Configurando um Domínio no BIND9 com Debian 3.1
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (11)