Backup
Iremos ver neste capítulo as diversas formas de fazer backup de arquivos, diretórios, mídias de armazenamento (CD ou DVD) ou partições do sistema, usando os comandos tar, cpio, dd, dump e restore, sendo que a forma mais eficiente de backup de um sistema inteiro é usando o comando dump e restore.
Tar – arquivos de pacotes
O comando tar faz a leitura de vários arquivos ou diretórios e depois os compacta em um único arquivo reduzindo seu tamanho, sendo a forma mais simples de fazer backups de arquivos, diretórios e de um diretório para outro.
Para fazer backup usamos usando tar podemos usar algumas opções como:
-c (para criar um novo arquivo compactado no formato dos comandos tar, bzip2, gzip ou gunzip)
•
-x (para descompactar um arquivo compactado)
•
-v (para exibir mensagens do comando executado)
•
-f (especifica um arquivo compactado com a extensão .tar, .tar.gz, tar.bz2)
•
-t (lista todos os arquivos dentro do arquivo compactado)
•
-p (preservas as permissões)
•
-j (compacta um arquivo no formato do comando bzip2)
•
-z (compacta um arquivo no formato dos comandos gzip e gunzip)
•
Exemplos :
O exemplo abaixo cria um diretório com três arquivos e depois o compacta no formato tar, bzip2, gzip ou gunzip
$ mkdir pasta
$ cd pasta
$ touch arquivo{1,2,3}.txt
$ ls
arquivo1.txt arquivo2.txt arquivo3.txt
$ cd ..
$ tar -cvf backup.tar pasta pasta/
pasta/arquivo2.txt pasta/arquivo1.txt pasta/arquivo3.txt
Cria um backup no formato tar
$ tar -cvf backup.tar pasta pasta/
pasta/arquivo2.txt pasta/arquivo1.txt pasta/arquivo3.txt
Cria um backup no formato bzip2
$ tar -cvjf backup.tar.bz2 pasta
pasta/
pasta/arquivo2.txt pasta/arquivo1.txt pasta/arquivo3.txt
Cria um backup no formato bzip ou gunzip
$ tar -cvzf backup.tar.gz pasta pasta/
pasta/arquivo2.txt pasta/arquivo1.txt pasta/arquivo3.txt
Agora para restaurar o backup utilize a opção -x ao invés da opção -c, e também é possível especificar o diretório de destino com a opção -C onde será restaurado o backup, como mostra o exemplo abaixo.
$ tar -xvzf backup.tar.gz -C /tmp pasta/
pasta/arquivo2.txt pasta/arquivo1.txt pasta/arquivo3.txt
cpio – utilitário de copia de arquivos de um local para outro
O comando cpio agrupa vários arquivos em um só de forma similar ao comando tar, mas sendo raramente usado hoje em dia e possui algumas opções como:
-o (cria um novo arquivo compactado)
•
-i (extrai arquivos de um arquivo compactado)
•
-t (lista o conteúdo)
•
A sintaxe do comando cpio é:
cpio opções < arquivo_origem > arquivo_destino
Exemplos :
Este exemplo cria um arquivo chamado arquivos.txt com a opção -o do comando cpio, e depois o compacta agrupando em arquivo binário (.bin) chamado arquivos.bin.
$ cat > arquivos.txt arquivo1.txt
arquivo2.txt
$ touch arquivo1.txt arquivo2.txt
$ cpio -o < arquivos.txt > /tmp/arquivos.bin 1 block
Agora para desagrupar os arquivos compactados renomeie ou apague os arquivos originais para que possa ser feito a restaurmação do backup usando a opção -i do comando cpio
$ rm -f arquivo1.txt arquivo2.txt
$ cpio -i < /tmp/arquivos.bin 1 block
dd – utilitário para converter e copiar arquivos
É um programa de copia e conversão de arquivos, onde pode ser usado para criar uma copia de um sistema de arquivos inteiro de um disco ou partição, mas cujos tamanhos das partições sejam exatamente iguais (Ex: /dev/hda1 – 500 MB, /dev/hda2 – 500 MB).
A sintaxe do comando dd é:
dd if=origem of=destino opções
O comando dd possui algumas opções que são descritas abaixo:
if = ARQUIVO (Lê a partir do arquivo ao invés da entrada padrão)
•
of = ARQUIVO (Escreve no arquivo ao invés da saída padrão)
•
ibs = BYTES (Lê a quantidade de bytes de uma vez. O padrão é 512)
•
obs = BYTES (Escreve a quantidade de bytes de uma vez. O padrão é 512)
•
cbs = BYTES (Especifica a conversão de tamanho de bloco para bloco e não_bloco)
•
bs = BYTES (Lê e escreve a quantidade de bytes de uma vez)
•
skip = BLOCOS (Salta blocos ibs-byte blocos no arquivo de entrada antes da cópia)
•
seek = BLOCOS (Salta blocos obs-byte blocos no arquivo de saída antes da cópia)
•
count = BLOCOS (Copia blocos ibs-byte blocos do arquivo de entrada, ao invés de tudo até o final do arquivo)
•
conv = CONVERSÃO (Converte o arquivo conforme especificado pelo(s) argumento(s) de CONVERSÃO)
•
Alguns tipos de conversão são:
ascii - Converte EBCDIC para ASCII.
•
block - Para cada linha na entrada, a saída tem cbs bytes, recolocando a nova linha de entrada com espaço e enchendo com espaços se necessário.
•
unblock - Recoloca espaços em cada bloco de entrada cbs-sized como uma nova linha.
•
noerror - Continua depois de erros de leitura.
•
notrunc - Não trunca (limpa) o arquivo de saída.
•
sync - Enche todos os blocos de entradas para o tamanho de ibs com valores de zero no final
•
Os BLOCOS e BYTES podem ser em números ou múltiplos:
Bytes (b) – Ex: b 512
•
KiloBytes (KB ou K) – Ex: kB 1000, K 1024
•
MegaBytes (MB ou M) - MB 1000*1000, M 1024*1024
•
GigaBytes (GB ou G) – Ex: 1000*1000*1000, G 1024*1024*1024
•
Exemplos :
O exemplo abaixo faz uma copia de um arquivo com menos de 1.44 MB para o drive de disquete localizado em /dev/fd0.
$ dd if=arquivo.tar.gz of=/dev/fd0
O exemplo abaixo faz uma copia de um CD (podendo ser usado também um DVD) localizado no dispositivo /dev/hdd usando o link simbólico /dev/cdrom, logo em seguida é criado um arquivo .iso no diretório /tmp e gravado com o comando cdrecord (wodim) ou growisofs em um gravador de CD ou DVD localizado no dispositivo /dev/hdc usando o link simbólico /dev/cdrw ou /dev/dvd.
$ dd if=/media/cdrom of=/tmp/CD.iso
$ cdrecord -v speed=4 dev=/dev/cdrom -data /tmp/CD.iso ou
$ growisofs -dvd-compat -Z /dev/dvd=/tmp/CD.iso
O exemplo abaixo localiza todos os arquivos com a extensão .conf localizado no diretório /etc e cria o arquivo arquivos.txt. Depois é executado o comando dd que lê o arquivo arquivos.txt e cria o arquivo /tmp/arquivo_destino.txt lendo e escrevendo de 1K por vez.
$ cd pasta
$ find /etc/ -name *.conf > arquivos.txt
$ dd if=arquivos.txt of=/tmp/arquivo_destino.txt bs=1K
Copia completa de um disco rígido
Usando dd você pode criar backups de um disco rígido ou de apenas uma parte do disco (partição). Isto é também usado para fazer uma copia de uma instalação do Linux, ou seja, um clone para outros computadores similares, mas desde que tenham os discos rígidos exatamente do mesmo tamanho, mesmo modelo e fabricante (Ex: HD da marca Samsung – modelo SP0411N – 40 GB).
Exemplos:
Este exemplo faz uma copia do primeiro disco rígido e todas suas partições localizado no dispositivo /dev/hda, para o segundo disco rígido localizado no dispositivo /dev/hdb. (desde que tenham o mesmo tamanho, marca e modelo Ex: /dev/hda (15 GB) - /dev/hdb (15 GB)).
As opções count e bs são usadas para fazer o backup usando o primeiro bloco com poucos bytes (neste caso 512 bytes) para armazenar o MBR e a tabela de partição do disco.
* Vale lembra que este processo demora muitas horas, geralmente isso é feito da noite para o dia.
# dd if=/dev/hda of=/dev/hdb count=1 bs=512
Ou você pode também especificar um outro local com bastante espaço para armazenar a copia do disco rígido, e ainda usar o compactador gzip para comprimir o tamanho do arquivo.
# dd if=/dev/hda of=/home/backup/arquivo count=1 bs=512
ou usando o comando gzip
# dd if=/dev/hda | gzip > /home/backup/arquivo.gz
Restaurando backup da copia do disco rígido
Onde /home/backup/arquivo é o arquivo de backup do primeiro disco /dev/hda, e /dev/hdb é o segundo disco rígido
# dd if=/home/backup/arquivo of=/dev/hdb count=1 bs=512
Ou usando o comando gzip
# gzip -dc /home/backup/arquivo.gz | dd of=/dev/hdb count=1 bs=512
Copia de uma partição
Para fazer uma copia entre partições desde que a partição de origem seja do mesmo tamanho ou menor do que a partição de destino (Ex: /dev/hda2 – 500 MB, /dev/hdb2 – 500 MB), apenas especifique a partição de origem e a partição de destino, sendo que um diretório também pode ser usado como destino.
Onde /dev/hda2 é partição do primeiro disco /dev/hda, e /dev/hdb2 é partição do segundo disco /dev/hdb
Atenção! Para fazer o copia, as partições não podem estar montadas, onde você pode verificar com o comando df
Obs – o comando abaixo pode demorar um pouco dependendo do tamanho da partição
# dd if=/dev/hda2 of=/dev/hdb2 bs=1M
Ou você pode também especificar um outro local com bastante espaço para armazenar a copia da partição, e ainda usar o compactador gzip para comprimir o tamanho do arquivo.
# dd if=/dev/hda2 of=/home/backup/arquivo bs=1M
ou usando o comando gzip
# dd if=/dev/hda2 | gzip > /home/backup/arquivo.gz
Restaurando backup da partição
Onde /home/backup/arquivo é o arquivo de backup da partição /dev/hda2, e /dev/hdb2 é a segunda partição
# dd if=/home/backup/arquivo of=/dev/hdb2 bs=1M
Ou usando o comando gzip
# gzip -dc /home/backup/arquivo.gz | dd of=/dev/hdb2 bs=1M
Dump – backup incremental para sistema de arquivos ext2/ext3
A maneira mais comum de criar e restaurar backups é usando os comandos dump e restore, sendo necessário a sua instalação em sistemas Linux / Unix, por exemplo o comando abaixo instala o pacote dump em sistemas Debian.
# apt-get install dump
Criando dump em sistema de arquivos
Dump cria uma lista de arquivos que forma alterados desde o último backup com dump, e encompcta estes arquivos em um único arquivo para ser armazenado em um dispositivo.
Dump possui várias vantagens em relação aos outros comandos mostrados acima tar, cpio e dd, algumas vantagens são:
Backup incremental (com apenas os arquivos modificados recentemente)
•
Arquivos de qualquer tipo (incluindo dispositivos)
•
Preservação de permissões, propriedades, data e horários de modificação
•
O comando tar possui também estes recursos, portanto dump é um pouco mais sofisticado e pode ser útil em casos mais complexos e caso você deseje fazer backups entre sistemas Linux e Unix, dump é a melhor opção.
O comando dump possui varias opções, onde a primeira opção que deve ser especificada é o nível de backup que pode ser um número de 0 a 9, sendo que o número 0 faz um backup de todo o sistema de arquivos e os números de 1 a 9 são usados para backups incrementais, ou seja se você executar o dump por exemplo com a opção 1, ele irá fazer backup apenas dos arquivos que foram alterados desde o último backup realizado neste caso com a opção 0.
O primeiro backup sempre deve ser realizado iniciando com o nível 0, por exemplo, você pode fazer backup uma vez por semana iniciando no nível 0 e nos demais dias da semana um backup incremental usando o nível 1, assim garantindo que você possui sempre um backup atualizado.
Assim você pode fazer seus backups incrementais facilmente, se você executar o dump na seqüência abaixo:
1º dia – nível 0
•
2º dia – nível 1
•
3º dia – nível 2
•
4º dia – nível 3
•
5º dia – nível 4
•
6º dia – nível 5
•
7º dia – nível 6
•
8º dia – nível 7
•
9º dia – nível 8
•
10º dia – nível 9
•
11º dia – nível 0
•
Por exemplo, se for usado o nível de 5, os arquivos depois do nível de 4 serão atualizados e gravados no nível 5
A opção -u diz para o dump atualizar automaticamente o arquivo /var/lib/dumpdates (Debian) ou /etc/dumpdates (use os comandos updatedb e locate para localizar) quando o dump é executado gravando a data, o nível do dump e o sistema de arquivos. Caso não seja usado a opção -u, o dump será realizado no nível 0 e não será gravado nenhum registro de informação no arquivo dumpdates.
Abaixo segue um trecho do arquivo /var/lib/dumpdates
/dev/hdc1 0 Fri May 9 12:53:54 2008 -0300
A sintaxe do comando dump é:
dump opções parâmetros sistema_arquivos Abaixo seguem algumas opções do comando dump:
0-9 - Nível do dump de 0 a 9
•
B - O número de blocos de 1K por volume
•
b - Informa ao dump o número KB por bloco, o valor máximo é 1024
•
f - Especifica o arquivo de saída, informando ao dump onde gravar o backup, podendo ser uma fita (/dev/st0), um disquete (/dev/fd0), um diretório local ou remoto (/backup) e etc.
•
d – Especifica a densidade fita, o padrão é 1600BPI
•
s - Informa ao dump o comprimento da fita, o comprimento padrão é 2300
•
u - Informa ao dump que ele deve atualizar o arquivo /var/lib/dumpdates ou /etc/dumpdates após sua execução
•
T - Especifica a data que será gravada no arquivo dumpdates
•
W - Exibe o sistema de arquivos nos arquivos /var/lib/dumpdates ou /etc/dumpdates e /etc/fstab marcados para dump
•
w – É semelhante a opção -W, mas somente exibe o sistema de arquivos nos arquivos /etc/fstab e /etc/mtab nos quais precisam ser feito dump
•
- Parâmetros
Especifica o parâmetro correspondente a opção na seqüência. Por exemplo, se a opção “0usbf” é usada, abaixo seguem os parâmetros que devem ser na seguinte ordem:
# dump -0udsbf 1600 2300 1024 /dev/st0 /var
Onde a opção 0 especifica que não é incremental e é o primeiro backup, a opção u atualiza o arquivo dumpdates, e as opções dsbf correspondem a densidade, comprimento, número de blocos e o arquivo de saída da fita para gravar o backup.
- Sistema de arquivos
É o ponto de montagem (/home) ou nome de dispositivo (/dev/hda2) do sistema de arquivos para dump localizado no arquivo /etc/fstab como mostra o exemplo abaixo.
# /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda2 /home ext3 defaults,errors=remount-ro,usrquota,grpquota 0 1 /dev/hda3 none swap sw 0 0
/dev/hdb /media/cdrom0 udf,iso9660 user,noauto 0 0 Exemplo:
O exemplo abaixo faz o backup com dump do diretório /home dos usuários no diretório /backup no arquivo arquivo.bak
# mkdir /backup
# dump -0u -f /backup/arquivo.bak /home ou
# dump -0u -f /backup/arquivo.bak /dev/hda2
Restore – restaura arquivos ou sistema de arquivos de backup com dump
É o comando usado para restaurar arquivos criados pelo comando dump, dentre as opções mais úteis do comando restore, destacamos a opção -i para restauração interativa de arquivos e diretórios individuais e -r para a restauração completa de um sistema de arquivos inteiro.
A sintaxe do restore é:
restore opções parâmetros
As principais opções do comando restore são:
-v – Exibe mensagens
•
-f – Informa o arquivo de onde o restore deve ler os dados.
•
-r –Restaura um sistema de arquivos inteiro no diretório corrente de destino
•
-R – Esta opção é útil se a restauração for interrompida e exibe um resume completo
•
-t – Lista o arquivos dentro do arquivo de backup
•
-C – Compara os arquivos do backup com os arquivos do sistema de arquivos
•
-T – Especifica um arquivo temporário
•
-x – Somente os arquivos especificados são extraídos do arquivo de backup
•
-f – Especifica o arquivo de backup
•
-h – Restaura somente o diretório corrente quando especificado
•
-y – Não faz perguntas de erros
•
-s - Especifica o número da posição do arquivo no backup
•
i – Inicia o restore em modo interativo de arquivos específicos
•
Quando usada a opção -i em modo interativo, o comando restore irá ler as informações dos diretórios do backup e apresentar um shell de comandos que são mostrados abaixo:
add – adiciona um diretório ou arquivo especificado para ser restaurado, onde serão precedidos com um asterisco *
•
ls - Lista os arquivos de um diretório
•
cd - Muda de diretório
•
pwd – Exibe o diretório corrente
•
delete – Exclui um diretório ou arquivo especificado a ser excluído da restauração
•
extract – Todos os arquivo ou diretórios adicionados com o comando add, serão restaurados do backup
•
help – Exibe ajuda
•
quit – Sai do restore
•
Exemplos:
O exemplo abaixo faz um teste antes exibindo os arquivos com a opção -t
# restore -tvf /backup/arquivo.bak
Primeiramente escolha a partição a ser usada para restaurar o backup e lembre-se de verificar se o sistema de arquivos é ext2/ext3, onde você pode criar facilmente com os comandos mkfs.ext3 ou mke2fs, e lembre-se de que criando o sistema de arquivos, a partição será formatada e os dados perdidos.
# mkfs.ext3 /dev/hdb1 ou
# mke2fs -j /dev/hdb1
Depois monte o sistema de arquivos com mount e acesse o diretório com cd para restaurar o backup.
# mount /dev/hdb1 /mnt
# cd /mnt
Restaura todos os arquivos do arquivo de backup /backup/arquivo.bak usando a opção -r e especificando o diretório corrente (/mnt) ou omitindo o diretório corrente.
# cd /mnt
# restore -rvf /backup/arquivo.bak /mnt ou
# restore -rvf /backup/arquivo.bak
O exemplo abaixo entra em modo interativo usando a opção -i, onde será adicionado para restauração o diretório arquivos com o comando add e depois restaurado com o comando extract e que será perguntado o número do volume do próximo dump, caso inicie o dump no nível 0 o próximo será 1. Após isso será perguntado se deseja preservar as permissões e proprietário onde você deve escolher “y”.
# cd /mnt
# restore -ivf /backup/arquivo.bak /mnt
Verify tape and initialize maps Input is from a local file/pipe Input block size is 32
Dump date: Fri May 9 13:15:25 2008
Dumped from: the epoch
Level 0 dump of /mnt on debian:/dev/hdc1
Label: none
Extract directories from tape Initialize symbol table.
restore >ls # exibe os arquivos e diretórios
.:
2 ./ 1641 arquivos/ 12 teste 2 ../ 11 lost+found/
restore >add arquivos # adciona o diretório arquivos
Make node ./arquivos
Make node ./arquivos/documentos
restore >ls # repare um asterisco * antes do diretório arquivos, marcado para ser restaurado
.:
2 ./ 1641*arquivos/ 12 teste 2 ../ 11 lost+found/
restore > extract # restaura o diretório arquivos
Extract requested files
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes):1 # especifique o próximo volume, neste caso “1”, pois foi o dump foi iniciado no nível “0”
extract file ./arquivos/file1.txt extract file ./arquivos/file2.txt Add links
Set directory mode, owner, and times.
set owner/mode for '.'? [yn]y # escolha “y” para preservar as permissões e proprietário restore > quit # digite “quit” para sair do restore