Como copiar direto na fita em .tar pelo comando scp para economizar espaço em disco? [RESOLVIDO]

1. Como copiar direto na fita em .tar pelo comando scp para economizar espaço em disco? [RESOLVIDO]

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 25/04/2014 - 13:09h

Como copiar direto na fita em .tar pelo comando scp para economizar espaço em disco?


Oi galera, gostaria de tirar uma dúvida sobre o seguinte caso:

- Tava tentando criar (sou iniciante) um script simples para que um servidor de backup ás 22:30 todos os dias começasse a copiar para si, pastas importantes de outros 3 servidores em rede.

- Infelizmente um desses 3 servidores tem um drive de fita LT0 e eu tenho mídias de 900GB para backup, gostaria muito que o SERVIDOR de backup tivesse esse drive, mas ele foi instalado em outro no passado e não deixaram tirar.

- Por causa disso, tenho que fazer um backup diário (total) nesse servidor de backup (que tem 7 HDs de 300GB e fiz uma LVM para somar tudo dando aproximadamente 2TB para armazenamento) criando pastas com a data do dia até encher o HD e depois deletar os mais antigos.

- Ao mesmo tempo após cada backup eu queria compactar para .tar sem compressão e mandar gravar na fita lto em outro servidor, assim fico com backups diários em HD e tb em fita com a vantagem da fita, por eu ter vários posso ter backups mais antigos para restauração, os em HD duram uma semana pois a soma total de arquivos é 215GB.

Daí fiz esse script e queria a juda de vcs:

###################################

#DECLARA VARIAVEIS

pasta=bkp$(date +%d%m%y)

notes=bkpNotes$(date +%d%m%y)

redeadm=bkpRedeAdm$(date +%d%m%y)

web=bkpWeb$(date +%d%m%y)

#---------------------------
#
# Cria novos diretórios (com a data do dia) vazios para backup
#

cd /root/backup

mkdir $pasta

cd $pasta

mkdir $notes

mkdir $redeadm

mkdir $web
#
#---------------------------
#
# Copia os arquivos
#

scp -r root@10.3.48.3:/srv /root/backup/$pasta/$web

scp -r root@10.3.48.3:/var/lib/mysql /root/backup/$pasta/$web

scp -r root@10.3.48.2:/local/notesdata /root/backup/$pasta/$notes

scp -r root@10.3.48.13:/home/VOL01 /root/backup/$pasta/$redeadm

scp -r root@10.3.48.13:/home/VOL02 /root/backup/$pasta/$redeadm

scp -r root@10.3.48.13:/home/VOL03 /root/backup/$pasta/$redeadm

#
#---------------------------
#
# Compacta e grava
#

tar -cvf /root/backup/$pasta.tar /root/backup/$pasta

scp /root/backup/$pasta.tar root@10.3.48.2:/dev/st0

rm /root/backup/$pasta.tar


##############################################################

Minha dúvida é na ultima parte;

tar -cvf /root/backup/$pasta.tar /root/backup/$pasta

scp /root/backup/$pasta.tar root@10.3.48.2:/dev/st0

rm /root/backup/$pasta.tar


Do jeito que está ele duplica o tamanho em disco pois copia os diretórios, cria um arquivo.tar, grava na fita e depois deleta o arquivo .tar

Como copiar direto na fita em .tar pelo comando scp para economizar espaço em disco?

Tem como otimizar esse código, deixá-lo com menos linhas?



  


2. Re: Como copiar direto na fita em .tar pelo comando scp para economizar espaço em disco? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/04/2014 - 15:22h

Eu não entendi direito, mas me pareceu que o script executa na máquina que tem o LVM de 2TiB, mas o drive de fita está noutra máquina.

Você pode, sim, economizar alguns comandos. No mínimo, depois de transferir todos os arquivos para a máquina local, você pode gerar o "tarzão" direto para a fita, usando a seguinte pipeline:

tar -cvf - /root/backup/$pasta | ssh root@10.3.48.2 'cat > /dev/st0' 


(Se você tiver dificuldades com tamanho de blocos, pode tentar trocar o cat por dd, já que tanto o dd como o tar têm opções para controle de (re)blocagem.)

Mas eu acho que você poderia otimizar muito mais. Por exemplo, já que você está com LVM, pode criar snapshots diários e utilizar rsync para possivelmente reduzir enormemente a quantidade de dados transferidos, ganhando bastante tempo *e* espaço, até mesmo para guardar mais do que sete dias de back-up em disco ou, quem sabe?, rearrumar esse LVM para ter alguns discos de espelhamento (RAID 5, quiçá com disco de spare), sem, contudo, afetar a quantidade de dias guardados.

Se você puder trabalhar com múltiplos arquivos na mesma fita, poderia ainda separar o back-up de cada área na hora de colocar na fita. Por exemplo:

for area in /bkp/area1 /bkp/area2 /home1 /home2; do
# nst -> fita que não rebobina automaticamente
( cd / && tar cf - ."$area" ) | ssh root@servidor 'cat > /dev/nst0'
done

# Agora, sim, que tudo acabou, rebobina a fita.
ssh root@servidor 'mt -f /dev/st0 rewind'


Para recuperar um arquivo que estivesse em /home1, você faria algo do tipo abaixo.

# Pula os dois primeiros arquivos (/bkp/area1 e /bkp/area2).
# Note que nao rebobina, por estar usando /dev/nst0.
mt -f /dev/nst0 rewind # garante que está no início da fita
mt -f /dev/nst0 fsf 2 # pula os dois primeiros arquivos, ficando no terceiro

# O tar sem a opção "-f" usa "/dev/tape", que normalmente é
# um link para /dev/st0. Logo, após a extração a fita será
# rebobinada.
tar xv ./home1/paulo1205/.bash_profile



3. Muito Obrigado

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 08/05/2014 - 10:25h

Não tenho palavras para expressar minha gratidão, esse site do viva o linux, tem sido de uma ajuda tremenda pra mim que estou começando e me apaixonando pelo mundo linux.

Tive que observar um bom tempo pra entender sua sugestão, isso pq não conheço muito ainda os comandos, mas agora entendi, sua solução é excelente, eu é que estou com um pouco de receio por ser iniciante, e por sorte até que onde trabalho acabei de deparando generosos recursos de TI disponível, porém sem pessoal especializado e por isso q entrei nessa empreitada.

No passado tinha aqui um admin muito inteligente que arrecadou recursos e comprou servidores, mídias, fez um cabeamento estruturado muito bom e sua intenção era solucionar os problemas usando software livre, só que por um infeliz azar da vida ele veio a falecer, deixando a administração a optar por solução proprietária ( pago, resolve meu problema, não quero ter dor de cabeça com isso ), com isso o equipamento ficou em desuso e agora tive a oportunidade de trabalhar na área de T.I e decidi iniciar estudos no mundo linux pq considero software livre um excelente solução quanto a segurança e com diminuição de custos, mas o preço que to pagando é queimar a muquifa pra aprender.kkk

utilizei a seguinte linha pra resolver o problema:

tar cvf - /root/backup/$pasta | ssh root@10.3.48.2 dd of=/dev/st0

utilizando o dd e ficou a contento, aprendi que o pipe line "|" envia a saida de um comando a entrada de outro, não sabia essa do cat, pra mim ele só mandava texto pra um arquivo, foi legal saber disso.

quando a sugestão de script vou estudar bem e amadurecer no shellscript antes de implementar, por hora não tenho problema com espaço o servidor é de teste e por enquanto em paralelo ainda é utilizado solução proprietária para backups, minha intenção é utilizar scripts para backups usando linux e a solução proprietária somente como contingência.

por hora vou fazer o backup no tar e realmente tive o problema de blcos, que resolvi usando o tar com o parametro -b (tamanho do bloco) e resolveu.

Agradeço a grande ajuda.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts