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