Tem que prefere o modo texto e tem quem prefere o ambiente gráfico, mesmo que precisa de
vários cliques e demora um pouco mais do que uma simples linha de comando, navegar em
ambiente gráfico é muito fácil e intuitivo, também pode criar scripts e executar a partir de atalho
no desktop ou agendar.
Criar arquivo .tar.gz via konqueror
Clique com botão auxiliar sobre o arquivo ou diretório que deseja empacotar, as opções mudam
conforme a instalação, procure em "ações", "empacotar" ou termos semelhantes.
Mesmo que tenha utilizado script ou linha de comando na criação do .tar.gz, pode descompactar
via konqueror, basta um clique com botão auxiliar sobre o arquivo, selecione -> "ações" ->
"extrair para..." vai abrir o utilitário Ark, continue navegando nas opções e escolha onde deseja
salvar e Ok,
Konqueror -> Duplo clique no arquivo .tar.gz, nesta mesma janela do konqueror será criado um
diretório com o mesmo nome do original de onde criou o .tar.gz, por exemplo, se utilizou um
ponto de montagem em /mnt/alguma-coisa na criação do .tar.gz, nesta janela do konqueror vai
aparecer um diretório mnt, vá navegando dentro dos diretórios até encontrar o arquivo que deseja,
quando achar o arquivo desejado, pode arrastar para outro diretório, abrir e etc...
Exemplo, navegar no arquivo cl10-hda3.tar.gz que é um backup de uma instalação onde foi
utilizado o ponto de montagem /mnt/hd2, quando navegar neste arquivo, na URL do konqueror
aparece algo assim: tar:/root/cl10-hda3.tar.gz/mnt/hd2/etc isto é feito em arquivos temporários,
existem somente nas janelas do konqueror enquanto em uso, não fica disponível para acesso via
linha de comando, mesmo que indique um ponto de montagem ele não será afetado.
Empacotar arquivos do diretório corrente, sem compactar e sem mensagens no console (sem
paramentos zv).
Neste formato não exibe mensagens, pega somente os .txt do diretório corrente, não pega sub-
diretórios
Empacotar diretórios se seus sub-diretórios, exemplo para tudo que estiver abaixo de /home/zago
e sem compactar use:
tar cvf arquivo.tar /home/zago
Empacotar e compactar
tar cvfz arquivo.tar.gz /home/zago
No exemplo acima foi informado o caminho completo a partir do raiz, (/home/zago), quando
desempacotar vai salvar o caminho completo e criar os sub-diretórios a partir do diretório que
executar o comando, ou no mesmo local de origem quando indicou o caminho completo no
empacotamente e para extrair indique a partir do raiz( -C / ).
cd /home/
tar -zcvf homezago.tar.gz zago
cd /home/zago/
tar -zcvf zagoguiaz.tar.gz guiaz
Neste exemplo acima não guarda o caminho completo de origem, na extração dos arquivos cria
somente o sub-dirtório a partir do diretório local ou abaixo do caminho indicado (-C /caminho).
cd /home/zago
tar -zcvf guiaz-`date +%d%m%y`.tar.gz /home/zago/guiaz
-L, --tape-length N
muda a fita após gravar N*1024 bytes
-M, --multi-volume
cria/lista/extrai arquivos multivolumes
Quando a lista for grande desvie o resultado da pesquisa para um arquivo texto:
tar -tzf dirzago.tar.gz >> /home/zago/teste
Extrair somente um arquivo do .tar.gz, precisa informar o caminho e nome do arquivo, quando
não souber, use a opção acima para descobrir, exemplo para retirar de dentro do .tar.gz somente o
arquivo acima (comandos.txt), execute;
Restaurar a partir da raiz "/", dentro do diretório onde está a copia, execute:
tar -zxvf arquivo.tar.gz -C /
Este comando é útil para recuperar instalação completa de HD, descompacta o arquivo.tar.gz e
salva no mesmo ponto de montagem utilizado na criação do mesmo, portanto requer a indicação
do caminho completo na criação do .tar.gz e na restauração precisa montar a partição no mesmo
ponto de montagem que utilizou para criar o .tar.gz, caso não tenha o ponto de montagem ou
permissão para gravação, retornará erro ou criará diretórios a partir do raiz, portando não salva na
partição correta.
Para descobrir qual o caminho (ponto de montagem) utilizado na criação do arquivo de backup
.tar.gz, execute;
tar -ztvf arquivo.tar.gz | head -5
Este comando não salva nada em disco, somente exibe as 5 primeiras linhas no console, exemplo;
Nestes exemplos cria um tar do diretório /home/zago/guiaz, cria arquivo tar com nome Linux-BR-
FAQ-mais-data-de-criacao.tar.gz, veja os comandos com o resultado
Incluir também a hora e minutos, não utilize ":" como separador porque é um simbolo não válido
em nome de arquivos, exemplos:
Tem outras opções de datas e formatos, tais como; incluir a hora no formato de 12 horas, com ou
sem o zero a esquerda e muito mais, incluir o nome do dia da semana, veja o formato desejado e
substitua nos exemplos acima.
Muito útil para nomear arquivos em backup, evita que o novo arquivo sobrepõe o já existente,
facilita a organização e identificação dos arquivos.
Este formato de nomear arquivos podem ser utilizados por qualquer outro utilitário ou comando.
Observe que "date" e as variáveis estão dentro crase ` ` , para obter uma crase, pressione a tecla da
crase e depois a barra de espaço, ou prefira copiar e colar e de outro local.
No nosso exemplo teremos um diretório /home/copias onde será gravado o arquivo de cópia com
o nome do usuário mais a data de criação.por exemplo backup do usuário zago que está em
/home/zago executamos a linha:
no final da execução tenho em /home/copias um arquivo zagodatadehoje.tar.gz com tudo que tem
em /home/zago.
Exemplo com exclusão de arquivos desta cópia, crie o arquivo com a lista de exclusão, como
exemplo /etc/copianao, formato de linha de comando para excluir esta listagem do backup.
Mais detalhes sobre seleção no tar, veja neste documento o tópico "tar com seleção/exclusão"
Compactando:
o sinal que aparece em arquivo-`date +%d%m%y`.tar.gz é crase ou backquote (`), cuidado para
não confundir com apas simples ou quote (').
Tem um espaço entre "date +", com y minúsculo o ano tem dois dígitos com Y maiúsculo tem os
quatro dígitos.
Pesquisar com find em /tmp/guiaz para criar guiaz.tar.gz contendo todos arquivos .txt.
find /tmp/guiaz -name "*.txt" | xargs tar -zcvf guiaz.tar.gz
Alguns exemplos de uso combinando find por data com tar, fique atendo ao caminho, tanto para
salvar como de procura, nestes exemplos o caminho destino do .tar.gz é omitido, portanto salva
no diretório corrente, os demais caminhos para find e tar são informados, neste caso indicado
arquivos ou diretórios de procura, sempre faça testes em ambiente de testes, crie diretórios de
testes...
Empacontar todos .dbf com exclusão de um arquivo, coloque ele etre aspas, exemplo de
exclusão de locmod.dbf, faz backup de todos .dbf do caminho indicado, com excessão do
arquivo locmod.dbf, quando indica os arquivos não desce nos sub-diretórios, no exemplo
abaixo pega somente arquivos dentro de bcodados
O mesmo exemplo acima com uso do find para selecionar somente os .dbf modificados nas
ultimas 24 horas, excluindo do backup o arquivo locmod.dbf, ele não entra no backup
mesmo que alterado nas ultimas 24 horas.
Cuidado com a virada do dia, script que inicia antes e termina depois da meia noite,
nestes casos crie a variável no inicio do script contendo a data, trabalhe com ela do
inicio ao fim para evitar erros no nome do arquivo
ls guiaz-08-Ago-2004.tar.gz
Outros exemplos
Exemplo de uma rotina de backup de uma lista de diretórios menos alguns alguns arquivos ou
tipo de arquivo.
Criar arquivo tar dos diretórios listados em um arquivo, exceto os arquivos listados em outro
arquivo, são dois arquivos, um com a lista do diretórios do backup, outro com a lista dos arquivos
excluidos, arquivos que estão dentro dos diretórios de backup que não serão copiados.
Crie um arquivo copiasim contendo os diretórios que QUER COPIAR, exemplo de um copiasim
/home/zago/guiaz/
/home/zago/evolution/
/home/zago/genealogia/
/home/zago/doc/
/etc/
Crie um arquivo copianao contendo a lista de arquivos ou terminações que NÃO QUER
COPIAR, exemplo de um copianao
*.txt~
*.html~
*.tmp
*.$*
*.~*
*.bak
*.swp
SWAP
swap
~*.*
core*.*
Salve em um diretório qualquer, neste exemplo utilizei /var, na linha de comando do tar precisa
indicar o caminho e nome do arquivo.
ou se preferir:
explicando:
-T /var/copiasim
Arquivo de inclusão, contendo a lista de diretórios e arquivos do backup.
--exclude-from=/var/copianao
Arquivo de exclusão, contendo a lista de arquivos ou diretórios excluidos do backup, são arquivos
e diretórios que estão dentro dos diretórios listados em copiasim mas não serão copiados, como
exemplo na listagem, estão os temporários.
Pode incluir varias linhas de comando em script, em lugar de criar um arquivão de tudo, pode
dividir em linhas de comando para criar tar por usuários, grupos e etc...,
#!/bin/bash
mount -tnfs 192.168.1.200:/home/copia /mnt/copia
tar -zcvf /mnt/copia/alunos-`date +%d%m%y`.tar.gz -T /var/alunos --exclude-
from=/var/copianao
tar -zcvf /mnt/copia/zago-`date +%d%m%y`.tar.gz /home/zago/* --exclude-
from=/var/copianao
tar -zcvf /mnt/copia/turmas-`date +%d%m%y`.tar.gz /home/turm* --exclude-
from=/var/copianao
# CORTADO ALGUMAS LINHAS PARA DIMINUIR O TAMANHO DESTE TEXTO.
# as linhas abaixo não funcionam
# tar -zcvf /mnt/copia/doc-`date +%d%m%y`.tar.gz -T `find /home/ -name \*.d*` --
exclude-from=/var/copianao
# erro: bash: /bin/tar: Lista de argumentos muito longa
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/ -name \*.D*` --
exclude-from=/var/copianao
# erro: bash: /bin/tar: Lista de argumentos muito longa
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name *.D*` -
-exclude-from=/var/copianao
#tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name *.D*`
# esta pegando os arquivos .DLL e dat
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz -T `find /home/alunos -name \*.DOC`
# tar -zcvf /mnt/copia/Doc-`date +%d%m%y`.tar.gz /home/*.D* --exclude-
from=/var/copianao
# erro tar: /home/*.D*: Cannot stat: Arquivo ou diretório não encontrado
umount /mnt/copia
Explicando:
Máquina na rede com IP 192.168.1.200 exportando por NFS o diretório /home/copia, outra
maquina desta rede executa o script acima, a primeira linha monta este diretório.
A segunda linha compacta o que tem listado em /var/alunos, exceto o listado /var/copianao, salva
no arquivo com nome de alunos-datadecriação.tar.gz
Na terceira linha faz backup do diretório /home/zago menos o listado em /var/copianao
Na quarta linha faz backup de todos os diretórios que iniciam com turm, tenho um diretório para
cada turmaxxx e nesta linha faço um backup de todas.
A partir da quinta linha não está funcionando, preciso testar com find, fazer backup somente de
arquivos .doc, .xls, .bmp e .txt .gdb e .dbf que estão no /home , conforme relação no arquivo
/var/doc, as duas maneiras não funcionou, qualquer dia faço novos testes.
por ultimo a desmontagem do que foi montado na primeira linha; umount /mnt/copia
A linha de comando abaixo cria um arquivo com todos os diretório de /home, use seu editor
preferido para ajustar ou excluir eventuais sub-diretórios, a primeira linha funciona no SUSE 10.1
e a segunda no CL10, o resultado pode ser diferente em sua instalação, deve ter um diretório por
linha neste formato.
/home/contabil
/home/netlogon
/home/vendas
/home/zago
cat tarhome
#!/bin/bash
while read LINHA ; do
# seus comandos aqui, exemplo para testar e remover as barras
# echo $LINHA
MDIR=`echo $LINHA | sed "s|/||g"`
MVAR2=`echo $MDIR`-`date +%d.%b.%Y`
tar czvf $MVAR2.tar.gz $LINHA
done < /tmp/dirhome.txt
tar -zcvf /home/outros-`date +%d%m%y`.tar.gz /home --exclude-from=/tmp/dirhome.txt
tar -zcvf dirtemp-`date +%d%m%y`.tar.gz /tmp
No diretório onde executou ou indicar para salvar os arquivos, deverá criar arquivos neste
formato.
homevendas-12.Jul.2006.tar.gz
homezago-12.Jul.2006.tar.gz
Na minha opinião o melhor é montar script de forma a criar os .tar.gz dentro do limite da mídia,
compactar por tipo de arquivo, diretório, usuário ou outra forma que facilite na restauração,
procure neste documento as opções com listagem em arquivo, exclusão de arquivos e diretórios e
etc... Procure fazer de forma que na recuperação de um arquivo não force o uso de um grande
conjunto de CD/DVD, um arquivão dividido em vários CD/DVD corre risco maior, danificando
um CD pode comprometer todos, estude a melhor forma de backup, como restaurar e identificar
arquivos de maneira mais rápida e segura. O que parece fácil agora pode se tornar um problemão
depois.
-M, --multi-volume
cria/lista/extrai arquivos multivolumes
Não consegui compactar com multi-volume, usar -z e -M na mesma linha de comando, depois de
dezenas de tentativas desisti desta opção, tem as alternativas de compactar e dividir com split,
compactar para depois dividir com -M, não achei produtivo fazer em duas etapas, embora seja
uma solução segura e prática quando automatizada via scripts. Resolvi o problema do cliente com
troca do gravador de CD por um gravador de DVD.
Para eventual uso futuro, pretendo testar com DVDR/W para gravar em DVD da mesma forma
que grava em disquete (floppy), nem sei se isto é possível. Coloquei aqui esta copia parcial do
script, removi as partes de testes e alterei o nome da empresa por uma ISO de DVD do SUSE,
criar tar em partes de 700MB para gravar em CD, o exemplo a seguir fica mais fácil e pratico
trabalhar com split, aqui tem a finalidade de mostrar o uso de multi-volume com tar, ajuste a seu
modo e se preferir inclua as opções de passar por parametros; tamanho, nome das partes e
diretório de backup.
du /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso
3665416 SUSE-Linux-10.1-GM-DVD-i386.iso
3665416
MPARTE=700000
MQTDEARQ=`expr $MQTDEARQ + 1`
Tem que nomear as partes e indicar -f de file para cada uma, exemplo de como deve ficar o
comando tar para dividir em 6 partes, a quantidade de partes depende do resultado do tamanho
total pelo de cada parte, some mais uma parte porque o "bc" retorna inteiro, portanto precisa de
mais uma parte para eventual resto da divisão, não tem problema criar este arquivo a mais, se não
for necessário ele será ignorado.
Pode fazer via script ou montar a linha de comando na não, o script que vem logo a seguir serve
para monta esta linha de comando.
cat multivol.sh
#!/bin/bash
MTOTAL=$(du /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso | awk '{print $1}')
MPARTE=700000
MQTDEARQ=`echo "$MTOTAL/$MPARTE" | bc`
MQTDEARQ=`expr $MQTDEARQ + 1`
for i in $(seq 1 $MQTDEARQ)
do
MPARTES=$MPARTES$(printf " -f parte-0$i.tar")
done
tar -c -M -L $MPARTE $MPARTES /home/zago/SUSE-Linux-10.1-GM-DVD-i386.iso
Este script acima cria no diretório corrente os arquivos com tamanho e nomes especificados nas
variáveis iniciais, parte-01.tar, part-02.tar ...., pode fazer via script ou montar a linha de comando
na mão.
Restaurar a partir de arquivos multi-volumes, não tentei recuperar direto do CD, o melhor é copiar
todos os CD para um diretório local e executar outro script, pode pegar o numero total de arquivos
no diretório como referencia do total de partes no script abaixo para criar os nomes das partes,
depois de concluindo o tar ignora o restante.
cat mtarrestore.sh
#!/bin/bash
MQTDEARQ=`ls | wc -l`
for i in $(seq 1 $MQTDEARQ)
do
MPARTES=$MPARTES$(printf " -f parte-0$i.tar")
done
echo $MPARTES
tar -x -M $MPARTES
Onde $MPARTES contém as partes do tar, -f parte-01.tar -f parte-02.tar ...., pode fazer via script
ou montar a linha de comando na mão, aliás, o script serve para montar a linha de comando com a
variável contendo todos os nomes das partes precedidadas de -f.
Split
Split divide o arquivo conforme tamanho solicitado, crie o tar normalmente, crie o arquivão .tar e
depois aplique o split para dividir o arquivo em pedaços do tamanho desejado que pode ser a
capacidade de um disquete, CD ou DVD, estes pedaços pode criar ISO e gravar CD DVD, para
recuperar precisa juntar os pedaços com cat para depois aplicar o tar no desempacotamento, acho
esta forma mais trabalhosa mas é uma solução segura também.
Criar um arquivo compactado do diretorio /home/zago e gravar em /mnt/copia com o nome zago-
datadecriação.tar.gz.
Tem um espaço entre "date +", com y minúsculo o ano tem dois dígitos com Y maiúsculo tem os
quatro dígitos.
log do tar
tar não registra eventos em arquivo de log, pode redirecionar a saido do console para arquivo.
-v, --verbose
mostra a lista dos arquivos processados
Em scripts não precisa do (v), caso queira salvar as mensagens em arquivo, acrescente no final da
linha de comando do tar ">> logtar.txt", sem as aspas, assim fica gravado no arquivo logtar.txt,
redireciona as mensagens do console para este arquivo, depois é só analisar com um editor de
texto, formato da linha de comando ou em script
Execute o script com a opção -xv para exibir as linhas de comando, (bash -xv
script.sh). Use linhas com echo para salvar ou exibir conteúdo de variáveis,
comentários e mensagens em arquivo. Ttem mais dicas para depurar erros em script
neste tutorial.
http://www.zago.eti.br/script/log-de-comandos.html
indicações
FAQ com mensagens da lista Linux-br
http://www.zago.eti.br/tar.txt
tar+ssh, uso para backup via rede, salvar em outra maquina da rede, dicas e
exemplos em;
http://www.zago.eti.br/ssh/ssh.html
FAQ, dicas e indicação de tutorias sobre uso dos pacotes zip e suas variações, gzip,
bzip, unzip, xzip, gnozip e etc....
http://www.zago.eti.br/zip.txt
FAQ sobre backup em geral.
http://www.zago.eti.br/backup.txt
Fita DAT, uso do tar em fita DAT, FAQ especifico em:
http://www.zago.eti.br/fitadat.txt
Manual do tar (inglês)
http://www.gnu.org/software/tar/manual/tar.html
Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html