Revista Do Linux
EDIÇÃO DO MÊS
 CD do Mês

 Capa
 Entrevista
 Corporativo
 Plataforma
 Evento
 Seguranca
 Hakers
 Sistema
 

Backups com tar e cpio

A maioria dos programas de backup são na verdade front ends para dois comandos muito versáteis, o tar e o cpio. Veja sua sintaxe e parâmetros e passe a usá-los na administração de sua rede

O comando tar pode ser considerado o comando mais utilizado para realizar backups no sistema Linux. Com o tar podemos criar um backup geral, seletivo, incremental e até mesmo diferencial, que podem ser feitos em unidade de fita magnética, disquete e em arquivos.

Um backup simples com tar pode ser assim:

# tar -cf backup.tar /etc/*

Esse comando realiza a cópia do diretório /etc inteiro no arquivo backup.tar no diretório corrente. O parâmetro c especificado no comando diz para o tar criar um novo arquivo de backup e o parâmetro f diz que a saída deverá ser redirecionada para um arquivo. Nesse caso especificamos o backup.tar é o mesmo que:

# tar -c /etc/* >backup.tar 

Para extrairmos o conteúdo desse backup é muito simples, basta substituir o parâmetro c pelo parâmetro x.

# tar -xf backup.tar 

O único detalhe que não deve ser esquecido é que o restore acima é feito no path relativo, ou seja, se esse comando for executado no diretório home do usuário, o tar irá restaurar o backup a partir dele e então será criado um diretório etc e dentro desse diretório o seu conteúdo. O correto seria restaurar esse backup estando no raiz / porque o diretório /etc se encontra a partir dele. Podemos restaurar também somente alguns arquivos especificando-os na frente do comando:

# tar -xf backup.tar etc/passwd etc/shadow

Se você quiser listar o conteúdo desse backup, utilize o parâmetro t no lugar do x.

# tar -tf backup.tar 

Também pode ser especificada uma lista de arquivos na frente do comando:

# tar -tf backup.tar etc/passwd etc/shadow

Backups em fitas magnéticas podem ser facilmente realizados especificando o caminho do device correspondente. Para fazer o backup acima em uma unidade DAT SCSI fica assim:

# tar -cf /dev/st0 /etc*

Backups em disquete também são possíveis, é só substituir o caminho do device de /dev/st0 para /dev/fd0H1440.

# tar -cf /dev/fdH1440 /etc*

Mas provavelmente seu backup do diretório /etc não caberá em um único disquete, então podemos criar backup multivolume, para isso basta adicionarmos o parâmetro -M na frente do tar.

# tar -M -cf /dev/fdH1440 /etc*

Quando cada disquete ocupar sua capacidade total o comando tar irá solicitar que você troque o disquete.

Podemos também criar nossos backups compactando-os, e dispomos para isso de três tipos de compactação:

  • I — Compacta utilizando o bzip2
  • z — Compacta utilizando o gzip
  • Z — Compacta utilizando o compress
# tar -cfz backup.tgz /etc*

Esse comando cria um arquivo backup.tgz com o conteúdo do /etc inteiro e compactado. Um pequeno detalhe é que não podemos ter backups multivolumes compactados. O restore desse backup deve ser feito da mesma maneira que vimos anteriormente, mas devemos acrescentar o parâmetro z:

# tar -xfz backup.tgz

Podemos adicionar arquivos em nosso backup. Para proceder assim basta substituir o parâmetro c pelo parâmetro r.

tar -rf backup.tar /usr/local/etc*

Esse comando irá acrescentar o conteúdo do /usr/local/etc no arquivo backup.tar, e se o arquivo backup.tar não existir, ele também irá criar como o parâmetro -c o faz. Esse comando associado ao comando find pode nos propiciar um backup seletivo. Veja um exemplo:

# find -name *.c -exec tar -rf backup.tar {} \;

O find irá procurar todos os arquivos que terminarem com .c e executará o tar para acrescentar no arquivo backup.tar.

Lembre-se, se você executar esse comando diversas vezes sem remover o arquivo backup.tar, estará sempre incrementando-o.

Podemos usufruir todos os recursos do find para efetuarmos o backup com tar, como no caso de fazer um backup de todos os arquivos criados por um determinado usuário:

# find -user edison -exec tar -rf backup.tar {} \;

Uma boa maneira também seria criar uma lista de arquivos a ser agrupados e depois criar um tar lendo-a. A vantagem é que o tar será executado uma única vez. Veja o exemplo:

# find /etc -name \* >lista.txt
# tar -T lista.txt -cf backup.tar

Podemos também verificar se existe diferença entre o arquivo tar e o arquivo que está no sistema.

# tar -df backup.tar etc/passwd
etc/passwd: Data/hora de Modificação diferente
etc/passwd: Tamanho diferente

Um outro comando bastante usado para fazer cópias é o cpio. Admito que esse é bem mais usado pelos usuários de Unix mais antigos. Apesar de a sintaxe do cpio ser diferente da do tar, o resultado é exatamente o mesmo, isto é, agrupar vários arquivos em um único. Podemos até gerar um cpio no formato tar. O cpio recebe uma lista de arquivos a ser agrupados e essa lista pode ser um arquivo ou o resultado de uma procura do find. Exemplo com uma lista em arquivos:

# cat lista.txt
exemplo/arquivo1.txt   
exemplo/arquivo2.txt   
exemplo/arquivo3.txt   
exemplo/arquivo4.txt
#cpio -o <lista.txt > cpio.bin

O comando acima criou um arquivo binário (cpio.bin) com o conteúdo de cada arquivo que estava na lista. Esse comando poderia ser executado com o find:

# find exemplo -name arquivo* |cpio -o >cpio.bin

Backup para mídia magnética também é possível desviando a saída para o device. Exemplo de desviando para um disquete:

# find exemplo -name arquivo* |cpio -o >/dev/fd0

Backups compactados também são possíveis com o cpio, basta desviar a saída do cpio para um programa de compactação como, por exemplo, o zip:

# find exemplo -name arquivo* |cpio -o| zip >cpio.zip

Desagrupar arquivos com cpio é tão simples como agrupá-los. Basta substituir o parâmetro -o pelo -i. Exemplo:

# cpio -i < cpio.bin

Para desagrupar arquivos compactados devemos descompactar antes, desta forma:

# unzip cpio.zip |cpio -i

Para listar o conteúdo de um arquivo cpio basta usar o atributo -t:

# cpio -t <cpio.bin

Como foi dito, podemos criar arquivos cpio com formato tar, e para isso devemos acrescentar o parâmetro -H tar no comando. Tente fazer isto:

# cpio -o -H tar <lista.txt >cpio.tar
# tar -xvf cpio.tar

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux