Como realizar backup incremental no Linux, usando o comando tar

O comando tar está ligado às tarefas de gestão de backups desde sua origem.
O nome do utilitário se refere ao dispositivo de gravação/leitura em fitas (tape drives), muito usado, ainda hoje, por sua confiabilidade e capacidade de armazenamento.
backup tape drive
Tar é abreviatura para tape archiver.

Apesar do nome, nunca foi 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.

fita cartuchos dell ultrium
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 você 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

Para listar os arquivos incrementais, durante o processo, inclua a opção ‘-g’ à linha de comando.
É 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, com eles, não é 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.

ibm flash backup drive
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.
hdd storage backup

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/.

Conteúdo relacionado pelo Google

Como adicionar a data atual ao nome de um arquivo no Bash.

Esta dica pode ajudar em diversas situações, principalmente quando se quer criar um arquivo de dentro de um script Bash e se deseja incluir uma string com a data atual no próprio nome do arquivo.
Um dos casos em que se pode aplicar o recurso é um script de backup de segurança.
Veja alguns exemplos de como chegar ao resultado, no decorrer deste texto.
Se você tiver alguma solução diferente, sinta-se à vontade para compartilhá-la nos comentários.
Para obter a data atual, no formato dia-mês-ano, use a seguinte fórmula:


hoje=$(date +"%d-%m-%y")


O código Bash, acima, irá armazenar dentro da variável hoje a data no formato determinado anteriormente. Para poder ver conteúdo da variável, use o comando echo:


echo "a data atual é: $hoje."

Veja o meu resultado:

a data atual é: 23-04-17.

Para inserir o valor da data atual em uma variável com o nome de um arquivo, basta alterar estes exemplos.
Segue algumas dicas:


hoje=$(date +'%d-%m-%y')
nomearquivo=nomearquivo-$hoje

Para obter o valor da variável nomearquivo, use novamente o comando echo:


echo $nomearquivo
nomearquivo-23-04-17

Quando você for definir o nome do arquivo, dentro do script, basta lhe atribuir o valor da variável nomearquivo.
O post Como realizar backup incremental no Linux tem um exemplo real. Sugiro dar uma olhada.
Se preferir que o ano seja exibido com 4 dígitos, use o %Y (em maiúscula):


hoje=$(date +'%d-%m-%Y'); echo "Data atual: $hoje."

Exemplos de formatação do date no Bash Shell

Acompanhe mais alguns exemplos de formatação do comando.
Para incluir o nome do dia da semana:


hoje=$(date +'%A-%d-%m-%Y'); nomearquivo=backup-$hoje.bak; echo "Nome do meu arquivo de backup, hoje: $nomearquivo."
Nome do meu arquivo de backup, hoje: backup-domingo-23-04-2017.bak.

Ou, ainda, com o nome do mês completo:


hoje=$(date +'%A-%d-%B-%Y'); nomearquivo=backup-$hoje.bak; echo "Nome do meu arquivo de backup, hoje: $nomearquivo."
Nome do meu arquivo de backup, hoje: backup-domingo-23-abril-2017.bak.

E se eu precisar criar vários arquivos de backup, no mesmo dia?! Como posso adicionar a data (que vai ser a mesma), sem sobrescrever arquivos?
Há várias soluções para este caso.
A minha preferida é usar ‘%s’ no lugar de ou em adição ao nome do arquivo.
Este parâmetro retorna o número de segundos decorridos desde 1970-01-01 00:00:00 UTC.
Veja um exemplo:


minhadata=$(date +'%s')
nomearq=arq-$minhadata
echo -e "Nome do arquivo: $nomearq."

Para mim, o resultado da sequencia de comandos acima, foi:

Nome do arquivo: arq-1493045947.

Desta forma, basta que os arquivos sejam criados com uma diferença de, pelo menos, 1 segundo em relação ao outro.
Se esta não for uma necessidade, prefiro usar apenas o parâmetro ‘%F’:



minhadata=$(date +'%F');nomearq=arq-$minhadata;echo -e "\nNome do meu arquivo:\t$nomearq."
Nome do meu arquivo:	arq-2017-04-24.

Ou o ano (em 4 dígitos) seguido do número do dia, uma vez que a data já é exibida à direita dos nomes dos arquivos, na listagem dos diretórios — o que torna esta informação redundante.
Veja um exemplo:


minhadata=$(date +'%Y-%j');nomearq=arq-$minhadata;echo -e "\nNome do meu arquivo:\t$nomearq."
Nome do meu arquivo:	arq-2017-114.

Saiba mais usando o ‘man date’.

Conteúdo relacionado pelo Google

Instale o Android Studio para Linux

Se você tem interesse em desenvolver apps para Android e prefere usar uma plataforma sólida e livre, pode usar Linux.
Neste post, vou mostrar como instalar o Android Studio no Fedora 25, no Ubuntu 16.04 e no Debian 9.0. Se a dua distro é diferente destas, tente adaptar os procedimentos para conseguir fazer a instalação.
Este texto cobre a instalação da ferramenta GUI voltada para desenvolvimento de apps para a plataforma móvel Android.


Recomendo, ainda, complementar o seu ambiente de desenvolvimento com algumas ferramentas CLI, descritas neste artigo.
android studio browse samples

Prepare o ambiente para instalar o Android Studio no Linux

Se você usa Debian ou Ubuntu, instale os seguintes pacotes:

sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386

Quem usa o Fedora 25, instala os seguintes:

sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686

Baixe e instale o Android Studio

android studio ide code sample
Agora você já tem o ambiente pronto para receber a ferramenta.
Vá até o site de downloads: https://developer.android.com/studio/index.html e baixe o pacote zip.
O comando que segue, assume que o pacote foi baixado para a pasta de Downloads e que você já tenha uma pasta /opt no seu sistema (dentro da qual será instalado o Android Studio):

mv Downloads/android-studio-ide-162.3764568-linux.zip /opt/

É claro que você pode optar por instalar o Studio em outra pasta. Isto fica a seu critério.
Agora vá até a pasta que contém o pacote e extraia o seu contéudo:

cd /opt
unzip android-studio-ide-162.3764568-linux.zip

Pronto!
Para ter mais conforto crie atalhos para o aplicativo.
Escolha um destes 2 métodos:

  1. inclua a seguinte linha no seu arquivo ~/.bashrc:
    export PATH="/opt/android-studio/bin:$PATH"
    
  2. ou crie um link simbólico para o programa:
    sudo ln -s "/opt/android-studio/bin/studio.sh" /usr/local/bin/android-studio
    

Depois disto, para rodar o android-studio basta usar um destes 2 comandos:

/opt/android-studio/bin/studio.sh

ou

android-studio

android studio ide development

Conteúdo relacionado pelo Google

instale o Android SDK no Linux

Em algumas distribuições Linux, você pode começar a desenvolver para a plataforma móvel imediatamente, após instalar o metapacote Android SDK, que contém um conjunto de ferramentas e softwares utilitários CLI voltados para quem deseja programar para esta plataforma.
O kit inclui uma variedade de ferramentas de assistência ao desenvolvedor de aplicações para a plataforma mobile Android.
As ferramentas, presentes no kit, se classificam em 3 grupos:

  1. SDK Tools — ou Software Development Kit Tools (kit de ferramentas de desenvolvimento de software)(
  2. Platform-tools ou ferramentas de plataforma.
  3. Build-tools ou ferramentas de construção

É conveniente dizer que as ferramentas incluídas são CLI, ou seja, voltadas para a linha de comando.
O SDK Tools é independente de plataforma e é sempre requerido, seja qual for a versão do Android para a qual você deseja voltar o seu trabalho.
Testei a instalação nos sistemas operacionais Debian 9 Stretch e no Ubuntu 16.04 LTS Xenial Xerus. Nas duas distribuições os pacotes estão presentes e podem ser instalados direto dos repositórios.
No Debian 9.0 Stretch o Android-SDK é uma novidade — e ele provê todas as ferramentas necessárias para desenvolver para a plataforma Android, a partir da versão android-23.
É possível também instalar os binários do Google, diretamente no diretório /usr/lib/android-sdk.
A documentação oficial revela que todas as bibliotecas usadas no app ainda não estão cobertas, tal como o Android Support — que não faz muito sentido dentro do Debian, já que só é útil dentro de um app Android.

Como instalar o kit de desenvolvimento Android no Debian ou Ubuntu

Claro que, depois da instalação do kit, você vai precisar estudar e ler um pouco mais para se aprofundar na área de desenvolvimento para a plataforma. Neste sentido, espero que os links na seção de Referências (lá embaixo!) ajude.
Para instalar os metapacotes necessários, siga os passos:

  1. Comece a instalar android-sdk e o android-sdk-platform-23 (pacote sugerido):
    sudo apt update
    sudo apt install android-sdk android-sdk-platform23
    
  2. Ajuste algumas variáveis de ambiente:
    export ANDROID_HOME=/usr/lib/android-sdk
  3. Opcionalmente, rode o gradle:
    gradle build --init-script /usr/share/android-sdk-helper/init.gradle
    

Com este procedimento, você terá algumas ferramentas de linha de comando (CLI) para iniciar — como o adb, o emulator, o fastboot etc.
Sugiro complementar este kit com a instalação da IDE Android Studio, uma ferramenta gráfica (GUI) para desenvolvimento visual.

Referências

https://guardianproject.info/2017/03/13/build-android-apps-with-debian-apt-install-android-sdk/.
https://bits.debian.org/2017/03/build-android-apps-with-debian.html.
https://wiki.debian.org/AndroidTools.

Conteúdo relacionado pelo Google

Como criar tabelas MySQL em um script PHP

Já expliquei anteriormente, no artigo como criar tabelas no MySQL como realizar esta mesma tarefa dentro da linha de comandos do MySQL.
Neste texto, vou mostrar como obter o resultado através de um script PHP.
Abra o seu editor de textos favorito e vamos ao código:

<html>
<head>
<title>Como criar tabelas com PHP</title>
</head>
<body>
<?php
/* substitua as variáveis abaixo pelas que se adequam ao seu caso */
$dbhost = 'localhost:3036'; // endereco do servidor de banco de dados
$dbuser = 'root'; // login do banco de dados
$dbpass = 'minhasenha'; // senha
$dbname = 'nomebanco'; // nome do banco de dados a ser usado
$conecta = mysql_connect($dbhost, $dbuser, $dbpass, $dbname);
$seleciona = mysql_select_db($dbname);
$sqlcriatabela = "CREATE TABLE contatos (nome VARCHAR(50), telefone VARCHAR(25));";
$criatabela = mysql_query( $sqlcriatabela, $conecta );

// inicia a conexao ao servidor de banco de dados
if(! $conecta )
{
  die("<br />Nao foi possivel conectar: " . mysql_error());
}
echo "<br />Conexao realizada!";

// seleciona o banco de dados no qual a tabela vai ser criada
if (! $seleciona)
{
  die("<br />Nao foi possivel selecionar o banco de dados $dbname");
}
echo "<br />selecionado o banco de dados $dbname";

// finalmente, cria a tabela 
if(! $criatabela )
{
  die("<br />Nao foi possivel criar a tabela: " . mysql_error());
}
echo "<br />A tabela foi criada!";

// encerra a conexão
mysql_close($conecta);
?>
</body>
</html>

Crie uma tabela temporária no MySQL

Ao usar o parâmetro TEMPORARY, a tabela seria criada e depois eliminada, ao final da sessão, com o comando mysql_close($conecta); na linha 39. Assim, a cada vez que a página é recarregada, a tabela é recriada e removida.
Altere o código, pratique e divirta-se!

Conteúdo relacionado pelo Google