O comando tar está ligado às tarefas de gestão de backups desde sua origem.
Seu é uma referência ao dispositivo de gravação/leitura em fitas (tape drives), muito usado, ainda hoje, por sua confiabilidade e capacidade de armazenamento.
Tar é abreviatura para tape archiver.
Apesar do nome, o utilitário não é restrito a qualquer tipo de mídia de gravação.
Backups feitos com o tar podem ser armazenados aonde você achar melhor.
Neste post, vamos abordar alguns usos do programa para, no final, montar um pequeno script, que você pode alterar para criar seu próprio backup automatizado ou integrar a outro script mais complexo.
Se tiver alguma dúvida, por favor, clique nos links presentes no texto para obter mais informações.
Não esqueça de dar uma olhada também na tag backup deste site e nos links da sessão de referências.
Os desafios de fazer backups eficientes
Fazer cópias de segurança de um grande volume de dados, pode tomar muito tempo.
Consome tanto tempo, que muita gente deixa de ter este cuidado — e pode se arrepender amargamente por isso.
O ideal é automatizar o processo de backup.
O processo de cópia e compressão de uma grande quantidade de arquivos também consome tempo de processamento — todo o sistema pode ficar significativamente mais lento durante a realização da tarefa.
Para não ser uma “coisa chata” na sua vida, contudo, o backup eficiente precisa ser automático e rodar em background, ou seja, ser executado nos bastidores — de preferência, em um horário em que você não esteja usando (muito) o computador.
O backup incremental é demorado na primeira vez em que é executado, mas é rápido nas outras execuções.
Isto ocorre por que consiste em apenas adicionar arquivos novos ou que foram alterados, desde a última vez em que foi feito. O resto é ignorado.
Como fazer o backup incremental com o comando tar
Se tiver algum dúvida extra, leia o post “9 exemplos de uso do comando tar“.
Para realizar um backup simples de um diretório no sistema rode o tar, seguido do nome desejado para o arquivo de backup e do nome do diretório a ser copiado:
tar cvf justincase-backup-2afeira.tar /home/justincase
No comando acima:
- a opção ‘c’ indica que você deseja comprimir/copiar os arquivos do diretório para dentro de um só arquivo de backup.
- a opção ‘v’ indica que você deseja ter feedback sobre a execução da tarefa. Você pode usar ‘vv’ ou ‘vvv’ e tornar o comando ainda mais verboso.
- a opção ‘f’ deve preceder o nome do arquivo que vai abrigar o backup.
Há outras formas de usar este mesmo comando. As opções, por exemplo, podem ser dadas separadamente:
tar -c -v -f justincase-backup-2afeira.tar /home/justincase
O backup padrão, realizado desta forma, não é um processo incremental, contudo.
Para realizar a cópia incremental de arquivos, é necessário acrescentar a opção ‘–incremental’ ou sua abreviatura ‘-G’.
Veja um exemplo de uso:
time tar --incremental -cjf temp/backup-config.tar.bz .config/
real 1m44,454s
user 1m43,921s
sys 0m1,049s
Note que usei o comando time, no começo da linha.
Seu uso é opcional.
Como utilitário do sistema, o time, mede o tempo de execução da sequência de instruções que o seguem.
O mesmo procedimento, na segunda execução, já mostra uma redução de aproximadamente 10 segundos.
time tar --incremental -cjf temp/backup-config.tar.bz .config/
real 1m33,590s
user 1m33,276s
sys 0m0,991s
Experimente realizar o backup em diretórios com uma quantidade maior de arquivos grandes, para obter uma diferença de tempo bem maior.
Opções de compressão para o tar
É uma boa prática acrescentar a opção de compressão ao seu comando de backup com o tar:
- você pode usar a opção ‘a’ para determinar automaticamente qual o programa/sistema de compressão será usado sobre o arquivo — baseado na sua extensão. Portanto se o arquivo tiver a extensão .tar.bz, o tar irá entender que deve usar o bzip para comprimí-lo.
- você pode indicar manualmente o nome do programa de compressão com a opção ‘I’.
- as opções de compressão mais comuns são ‘j’ (bzip2), ‘z’ (gzip), ‘Z’ (compress) e ‘J’ (xz). A primeira tem uma taxa de compressão melhor.
- outras opções possíveis, são ‘–lzip’, ‘–lzop’ e ‘–lzma’.
Lembre-se que arquivos MP3, MPEG, JPEG – entre outros tipos de arquivos de mídia – já estão compactados e, nestes casos, não será possível obter uma taxa de compressão significativa.
Arquivos comprimidos são transferidos mais rápido pela rede ou para dentro da mídia de backup.
Por outro lado, o processo de compressão/descompressão pode sobrecarregar temporariamente o sistema.
Como recuperar arquivos tar
Para ver o conteúdo do arquivo, use a opção ‘t’:
tar tvf meubackup.tar.bz
Para recuperar o backup use a opção ‘x’ (extract). Neste caso, é importante informar ao tar sobre o método/programa usado para realizar a compressão:
tar xvjf meubackup.tar.bz
No exemplo acima, sei que preciso usar a opção ‘j’, por que a extensão do arquivo indica que ele foi comprimido com o bzip.
Ler a extensão de um arquivo, não é um meio muito confiável para determinar os padrões de compressão utilizados — por que a pessoa que realizou o backup é livre para escolher a extensão que ela quiser.
Você pode usar a opção ‘a’ ou nada, para permitir que o próprio tar descubra o método de compressão utilizado:
tar xvaf meubackup.tar.bz
ou
tar xvf meubackup.tar.bz
Como testar e obter informações de arquivos comprimidos com o tar
Você pode usar o comando file para tentar determinar o método de compressão utilizado em um arquivo:
file --brief ../backup-scripts.tar.bz
bzip2 compressed data, block size = 900k
Ou, ainda,
file --uncompress --brief --mime backup-scripts.tar.bz
application/x-tar; charset=binary compressed-encoding=application/x-bzip2; charset=binary
Pode também testar o arquivo com as opções já dadas:
tar -tvf meubackup.tbz
A extensão tbz, usada no exemplo acima, também é muito comum em arquivos tareados, comprimidos com o bzip2.
Testar os seus backups é tão importante quanto fazê-los.
Seria muito ruim descobrir que o backup não funcionou ou teve problemas, justo na hora em que você vai precisar dele.
A melhor hora para testar seus backups é quando você não precisa deles.
Assim, é possível analisar a situação com calma e determinar exatamente o que é que não está funcionando neste processo — e corrigir os problemas.
Como criar um script de backup
O script, que segue, reúne basicamente o que foi visto até aqui, neste artigo.
Entendo que você possa necessitar de algo mais complexo, para atender às suas necessidades particulares ou profissionais. Neste caso, ele pode servir como um ponto de partida para chegar aonde quer.
Não esqueça de alterar as variáveis de ambiente e os nomes de diretórios e arquivos, para refletir a sua realidade.
Script de backup
#!/bin/bash
# Descrição = Realiza cópia de segurança de arquivos importantes
# Criado em 20 de Abril de 2017
# Autor: Elias Praciano
# Version 1.0
## cria as variáveis para compor o nome arquivo de backup
# atribui à variável DATA os valores de
# data e hora atuais, para usar
# na composição do nome do arquivo
DATA=$(date +'%d-%m-%Y')
# Define o nome do arquivo de backup
ARQUIVO=backup-$DATA.tar.gz
# cria a variável contendo o local de origem dos arquivos
ORGDIR=scripts
# cria a variável contendo o local de destino
DESDIR=backup
# comando de criação do backup
tar -cvvjf $DESDIR/$ARQUIVO $ORGDIR
Leia sobre como adicionar uma data ao nome do seu arquivo, se quiser ter mais flexibilidade nesta escolha, dentro do script
Antes de poder ser executado, o script precisa obter permissão de execução. Veja como fazer isto:
chmod +x ./nome-do-script-de-backup.sh
Agora, que ele já está pronto para rodar, teste-o:
./nome-do-script-de-backup.sh
Leia também por que usamos ./ na frente de alguns arquivos executáveis no Linux.
Referências
http://broexperts.com/how-to-perform-incremental-backup-in-linux-using-tar-utility/.
One reply on “Como realizar backup incremental no Linux, usando o comando tar”
Bom dia! No título consta como backup incremental, mas não vi onde a rotina fará o backup incremental, pois essa rotina sempre tirará o backup completo do diretório escolhido. Onde que a rotina verifica quais os arquivos foram alterados? Isto que eu não entendi e não consegui implementar.