Copias de Seguranca: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(53 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 23: Linha 23:
Um '''backup total''' consiste em '''salvar todos os dados''', incluindo todos os arquivos de todos os discos rígidos, onde haja informações a serem recuperadas.
Um '''backup total''' consiste em '''salvar todos os dados''', incluindo todos os arquivos de todos os discos rígidos, onde haja informações a serem recuperadas.


A vantagem deste método é dispor de uma '''cópia total dos dados''', facilitando sua recuperação caso seja necessário. Entretanto, caso haja grande quantidade de informações a serem guardadas, o backup total pode ser muito demorados e ainda ser necessário várias conjuntos de fitas ou outros dispositivos para armazenar as informações.  
A vantagem deste método é dispor de uma '''cópia total dos dados''', facilitando sua recuperação caso seja necessário. Entretanto, caso haja grande quantidade de informações a serem guardadas, o backup total pode ser muito demorado e ainda ser necessário várias conjuntos de dispositivos para armazenar as informações.  


Como os backup devem ser realizados regularmente, mantendo-se as informações de cada período considerado, o uso de backup total leva a manter dados redundantes, uma vez que toda a informação é copiada em cada backup.
Como os backup devem ser realizados regularmente, mantendo-se as informações de cada período considerado, o uso de backup total leva a manter dados redundantes, uma vez que toda a informação é copiada em cada backup.


===Backup incremental===
===Backup incremental===
Um '''backup incremental''' somente '''salva os dados que foram alterados''' desde o último backup total ou incremental. No backup incremental deve-se manter uma fita com um '''backup total''' (não importa a quanto tempo tenha sido criada) e todos os '''backups incrementais''' realizados.
Um '''backup incremental''' somente '''salva os dados que foram alterados''' desde o último backup total ou incremental. No backup incremental deve-se manter uma base de dados com um '''backup total''' (não importa a quanto tempo tenha sido criada) e todos os '''backups incrementais''' realizados.


A vantagem do backup incremental é o uso eficiente do tempo e do espaço a ser utilizado pelos dados, já que o processo de cópia envolve somente a cópia dos dados que foram modificados desde o último backup.
A vantagem do backup incremental é o uso eficiente do tempo e do espaço a ser utilizado pelos dados, já que o processo de cópia envolve somente a cópia dos dados que foram modificados desde o último backup.


A desvantagem é que as restaurações totais ou parciais são demoradas, já que pode-se ter que pesquisar em várias fitas para se localizar os dados necessários.
A desvantagem é que as restaurações totais ou parciais são demoradas, já que pode-se ter que pesquisar em várias bases de dados para se localizar os dados necessários.


===Backup diferencial===
===Backup diferencial===


Um '''backup diferencial''' '''salva os dados que foram alterados''' desde o último backup total.
Um '''backup diferencial''' '''salva os dados que foram alterados''' desde o último backup total.
É necessário uma fita com o backup total e da fita mais recente do backup diferencial para realizar uma recuperação completa do sistema.
É necessário uma base de dados com o backup total e da base de dados mais recente do backup diferencial para realizar uma recuperação completa do sistema.


O backup diferencial tem a vantagem de permitir uma recuperação rápida, mas a desvantagem de ser demorado caso tenha passado muito tempo desde o último backup total.
O '''backup diferencial''' tem a vantagem de permitir uma recuperação rápida, mas a desvantagem de ser demorado caso tenha passado muito tempo desde o último backup total.
 
[[Arquivo:BackUp.png]]


==Armazenamento==
==Armazenamento==
Existem vários tipos de '''dispositivos de armazenamento''' que podem ser utilizados para guardar a cópia de segurança dos dados, como '''unidades de fita''', '''discos rígidos''', e '''CD/DVD'''.
Existem vários tipos de '''dispositivos de armazenamento''' que podem ser utilizados para guardar a cópia de segurança dos dados, como '''unidades de fita''', '''discos rígidos''' e '''serviços em nuvem'''.


As '''unidades de fita''' são indicadas para backups profissionais <ref name=VALLE/>, entretanto, exigem organização e cuidado para seu armazenamento para não comprometer os dados.
As '''unidades de fita''' ainda são utilizadas para backups <ref name=VALLE/>, entretanto, exigem organização e cuidado para seu armazenamento para não comprometer os dados.


Os '''discos rígidos''' são uma ótima unidade de armazenamento em termos de custo e capacidade de armazenar informações. Unidades removíveis são práticas de serem substituídas e podem ser uma boa solução para empresas de pequeno porte.
Os '''discos rígidos''' são uma ótima unidade de armazenamento em termos de custo e capacidade de armazenar informações. Unidades removíveis são práticas de serem substituídas e podem ser uma boa solução para empresas de pequeno porte.


Os '''CD/DVD''' apresentam capacidade de armazenamento limitada e são frágeis, sendo adequados para uso doméstico.
Os '''serviços em nuvem''' são soluções modernas para o armazenamento de cópias de segurança.


==Políticas de backup==
==Políticas de backup==
Linha 79: Linha 81:
Exemplo de comando para '''compactar''' o diretório /dados e '''criar um arquivo tar.gz''' <ref name=MORIMOTO/>:
Exemplo de comando para '''compactar''' o diretório /dados e '''criar um arquivo tar.gz''' <ref name=MORIMOTO/>:
  tar -zcvf arquivo.tar.gz dados/
  tar -zcvf arquivo.tar.gz dados/
:onde a opção '''z''' indica para campactar com gzip, '''c''' para criar novo arquivo, '''v''' para exibir informações e '''f''' para usar como destino um arquivo.
:*onde a opção '''z''' indica para compactar com gzip, '''c''' para criar cópia dados, '''v''' para exibir informações e '''f''' para usar como destino um arquivo.


Para descompactar o arquivo posteriormente, troca-se a opção '''c''' por '''x''':
Para descompactar o arquivo posteriormente, troca-se a opção '''c''' por '''x''' para extrair os dados:
  tar -zxvf arquivo.tar.gz
  tar -zxvf arquivo.tar.gz
:Como não foi indicada um diretório destino, este comando descompacta no diretório corrente.
:*Como não foi indicada um diretório destino, este comando descompacta no diretório corrente.


Estes comandos são úteis para realizar '''cópias de segurança''' de um ou mais diretórios do sistema, gerando um arquivo compactado que poderia ser armazenado em um '''disco rígido externo''' ou gravado em '''DVD'''.
Estes comandos são úteis para realizar '''cópias de segurança''' de um ou mais diretórios do sistema, gerando um arquivo compactado que poderia ser armazenado em um '''disco rígido externo''' ou gravado em '''DVD'''.
Linha 92: Linha 94:


Suponha que seja preciso fazer backups diários de um diretório de dados diariamente. As invés de renomear cada arquivo gerado pelo backup, um pequeno script poderia facilitar o processo <ref name=MORIMOTO/>:
Suponha que seja preciso fazer backups diários de um diretório de dados diariamente. As invés de renomear cada arquivo gerado pelo backup, um pequeno script poderia facilitar o processo <ref name=MORIMOTO/>:
  DATA='date +%Y%b%d
#!/bin/bash
  DATA=`date +%Y%b%d`
  cd /mnt/backup
  cd /mnt/backup
  tar -zcvf Backup-"$DATA".tar.gz dados/
  tar -zcvf Backup-"$DATA".tar.gz dados/
:No exemplo os arquivos de backup são armazenados no diretório /mnt/backup, que pode ser um diretório montado em um disco rígido exclusivo para as cópias de segurança.
:*No exemplo os arquivos de backup são armazenados no diretório '''/mnt/backup''', que pode ser um diretório montado em um disco rígido exclusivo para as cópias de segurança.


====Agendamento de backup====
===Agendamento de backup===


Para que script seja executado diariamente de forma automática, o mesmo pode ser incluído no '''agendamento de tarefas''' com a '''crontab global''', por exemplo <ref name=MORIMOTO/>:
Para que script seja executado diariamente de forma automática, o mesmo pode ser incluído no '''agendamento de tarefas''' com a '''crontab global''', por exemplo <ref name=MORIMOTO/>:
  30 6 * * * root /usr/local/bin/script-backup
  30 6 * * * root /usr/local/bin/script-backup
:onde 30 6 indica minuto e hora, root indica que o script será executado com permissão de administrdor e /usr/local/bin/ é o local onde está armazenado o script.
:*onde '''30 6''' indica minuto e hora, root indica que o script será executado com permissão de administrdor e '''/usr/local/bin/''' é o local onde está armazenado o script.
 
==Backup em Servidor Remoto==
 
Uma boa opção para realizar '''cópias de segurança''' é salvar os backups em um '''servidor remoto'''. Usar servidores em locais diferentes elimina a possibilidade de desastres e destruir o servidor principal e o servidor com o backup.
 
Para transferir dados entre os servidores pode-se utilizar a aplicação '''SSH''' e o comando de cópia remota '''scp'''.
 
Para que o backup seja feito de forma automática, é necessário utilizar '''chaves de autenticação''' para permitir que o '''script de backup''' transfira os arquivos sem necessidade de interferência do usuário <ref name=MORIMOTO/>.
 
;Uso de Chaves de Autenticação: Veja como gerar '''chaves de autenticação''' em '''[[Servidor SSH]]'''.
 
==Backup Incremental com rsync==
 
O utilitário '''rsync''' permite '''sincronizar''' o conteúdo de dois diretórios, transferindo apenas as modificações. Ele não trabalha apenas comparando arquivo por arquivo, mas também comparando o conteúdo de cada um. Se apenas uma parte do arquivo foi modificada, o '''rsync''' transferirá apenas ela, sem copiar novamente todo o arquivo <ref name=MORIMOTO/>.
 
Com o '''rsync''' é possível programar '''backup incrementais''' de grandes quantidades de dados, mantendo-se cópias atualizadas em discos rígidos externos ou em servidores remotos.
 
;Instalação do rsync: Utilizar o instalador de pacotes:
sudo apt-get install rsync
 
===Backup local com rsync===
Informar os diretórios de origem e de destino, para onde os arquivos serão copiados:
rsync -av /dados/ /mnt/backup/
:*No exemplo o diretório '''/dados/''' será salvo dentro diretório '''/mnt/backup/'''.
:*A opção '''-a''' mantem as permissões dos arquivos e a opção '''v''' mostra o progresso da cópia na tela.
:*O parâmetro '''--delete''' pode ser acrescentado para que o '''rsync''' delete no destino arquivos que tenham sido deletados no diretório origem.
 
A primeira cópia é mais demorada, uma vez que são copiados todos os arquivos, mas, a partir da segunda cópia a operação será mais rápida, transferindo apenas as mudanças.
 
Para recuperar os dados, basta inverter a ordem do comando:
rsync -av /mnt/backup/dados/ /dados/
 
===Backup remoto com rsync===
 
O '''rsync''' também pode ser utilizado remotamente com a ajuda do '''SSH'''.
 
Para tal, caso o '''rsync''' seja executado por um '''script de backup''', o servidor '''SSH''' que será utilizado para armazenar o backup deve ser acessível via uma '''[http://wiki.foz.ifpr.edu.br/wiki/index.php/Servidor_Remoto_SSH#Gera.C3.A7.C3.A3o_de_chaves_de_autentica.C3.A7.C3.A3o_p.C3.BAblica chave pública de autenticação]''', como visto no caso do '''tar'''.
 
A utilização do '''rsync''' remotamente poderia ser realizada com um comando do tipo <ref name=MORIMOTO/>:
sudo rsync -av --rsh "ssh -l bkuser" /dados/ bkuser@endereçoServidor:/backup/
:*O parâmetro '''--rsh "ssh -l bkuser"''' orienta o '''rsync''' a utilizar o SSH e o '''-l bkuser''' indica que o servidor remoto será acessado pelo usuário bkuser.
:*O parâmetro '''-av''' faz com que o '''rsync''' atualize os arquivos e grave novos arquivo no destino, sem remover arquivos que tenham sido deletados no diretório origem.
:*O parâmetro '''--delete''' pode ser acrescentado para que o '''rsync''' delete no destino arquivos que tenham sido deletados no diretório origem.
:*O parâmetro '''-z''' pode ser acrescentado para que o  '''rsync''' faça compressão dos dados.
 
Para recuperar o backup basta inverter a ordem dos arquivos de origem e destino.
 
===Backup incremental com rsync===
 
O '''rsync''' também pode ser utilizado para realizar '''backups incrementais''', guardando um histórico dos arquivos durante um período de tempo.
 
O script de  '''backup incremental''', apresentado por <ref name=MORIMOTO/>, combina o '''rsync''' com o comando '''cp -al''':
 
;cp -al: O comando '''cp''' é utilizado para copiar arquivos.
:*O parâmetro '''-a''' faz a cópia exata de um diretório, mantendo as permissões.
:*O parâmetro '''-l''' faz que com o '''cp''' gere um '''hard link''', ao invés de copiar os arquivos.
 
;hard links: Os '''hard links''' são '''atalhos''' para arquivos que apontam diretamente para o '''inode''' do arquivo dentro do sistema de arquivos e são vistos pelo sistema operacional exatamente como os arquivos reais. Funciona como se fossem dois arquivos compartilhando para a mesma área de memória.
:*Caso o arquivo seja modificado o '''hard link''' apontará para o arquivo modificado.
:*Caso o arquivo original seja apagado, o '''hard link''' continuará existindo, apontando para o '''inode''' do arquivo (que continuará existindo).
:*O arquivo somente será removido de fato quanto todos o '''hard link''' for removido.
 
;soft links: '''Soft links''', ou '''links simbólicos''', são atalhos gerados com o comando '''ln -s'''.
:*Diferentemente do '''hard link''', no '''soft link''' caso o arquivo seja removido o link ficará quebrado.
 
====Script para backup incremental====
Exemplo apresentado em <ref name=MORIMOTO/>:
rm -rf backup-6
mv backup-5 backup-6
mv backup-4 backup-5
mv backup-3 backup-4
mv backup-2 backup-3
mv backup-1 backup-2
cp -al backup-0 backup-1
rsync -av --delete /dados/ backup-0
Se executado diariamente o script cria um conjunto com um histórico de 7 diretórios, numerados de 0 a 6, usados para armazenar os backups:
*O diretório backup-0 tem o '''backup completo''' dos dados;
*A cada execução do script os diretórios de backups são '''rotacionados''' e o backup completo é atualizado no backup-0;
*Os diretórios de backup são na verdade '''hard links''' para os arquivos do backup-0, ocupando em disco o espaço que seria equivalente a um único backup.
 
O '''script''' funciona para aquivos que foram criados e deletados. Ao remover arquivos do diretório original não são removidos os '''hard links''' criados com o '''cp -al''', assim, os backups anteriores mantem os arquivos deletados. Entretanto, caso o arquivo seja modificado, não há como recuperar ar versões anteriores do mesmo.
 
==Tarefa==
;Backup total: Utilizar um '''servidor remoto''', acessado via '''SSH''', para ser utilizado para armazenar arquivos de '''backup total''':
#Utilizar como '''servidor remoto''' o Ubuntu Server instalado no IFPR (192.168.71.201)
#O servidor remoto possui um '''grupo especial''' chamado '''backup''' e uma '''conta especial''' para ser acessada pelo '''script de backup''', chamada '''bkuser''' (senha: 1234).
#O '''diretório home''' do usuário '''bkuser''' é um diretório especial para guardar os '''arquivos de backup''', portanto, poderia ser montado em uma partição exclusiva para backup.
#Gerar a '''chave de autenticação pública''' no cliente (ssh-keygen) que vai rodar o script de backup e copiá-la para o servidor remoto (ssh-copy-id), que vai armazenar os backups .
#Criar na máquina cliente um '''script de backup''' que identifique o '''proprietário do backup''', a '''identificação da data''' e salve diariamente os diretórios '''/home''' e '''/dados''' e que depois transfira os mesmos para o '''servidor remoto'''.
#Agendar a tarefa usando o agendamento de tarefas.
 
<!--;Backup incremetal e Backup total: Criar um '''script de backup''' para ser armazenado em um '''servidor remoto''', combinando:
#Armazenar de arquivos de '''backup total''' realizados semanalmente, mantendo o histórico dos arquivos e nomeando-os com a identificação da data;
#Atualizar de arquivos de '''backup incremental''', usando '''rsync''', executado diariamente.-->
 
;Avaliação da Tarefa: Montar '''arquivo TXT''' com os seguintes itens:
*'''Script''' de backup;
*'''ls -l''' dos diretórios que terão os dados copiados;
*Impressão do '''verbose''' (saída do comando tar) realizado durante a execução do script.
*Comando '''scp''' realizado para transferir o '''arquivo de backup''' para o servidor remoto (pode fazer parte do script);
*'''ls -l''' do diretório do '''servidor remoto''' onde foi armazenado o '''arquivo de backup''';
*Mostrar o agendamento na tabela '''crontab'''.


==Referências==
==Referências==
Linha 107: Linha 212:


----
----
--[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 08h36min de 12 de novembro de 2015 (BRST)
[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 16h49min de 12 de abril de 2021 (-03)
----
----


[[Categoria:Administração de Servidores]]
[[Categoria:Administração de Servidores]]

Edição atual tal como às 00h31min de 22 de outubro de 2022

Cópias de Segurança ou Backups

A cópia de segurança dos dados, ou backup, consiste em manter uma ou mais cópias dos dados para fins de recuperação em caso de acidente ou erro que ocasione e perda ou danificação dos dados [1].

Também é importante manter as cópias de segurança em local seguro. Para dados importantes, com necessidade extrema de recuperabilidade, várias cópias devem ser providenciadas e armazenadas em locais diferentes, em prédios ou cidades distinta.

Com o avanço da Internet e dos sistemas de armazenamento em nuvem, cópias de segurança podem ser providenciadas para serem armazenadas por meio da rede, permitindo um espalhamento físico dos dados.

Tipos de backup

O tipo de backup a ser utilizado varia de acordo com a necessidade da organização, e depende de quantidade de informação a ser guardada e da frequência com que a informação é atualizada.

Existe basicamente três tipos de backups [1]:

  • Backup total;
  • Backup incremental;
  • Backup diferencial.

Backup total

Um backup total consiste em salvar todos os dados, incluindo todos os arquivos de todos os discos rígidos, onde haja informações a serem recuperadas.

A vantagem deste método é dispor de uma cópia total dos dados, facilitando sua recuperação caso seja necessário. Entretanto, caso haja grande quantidade de informações a serem guardadas, o backup total pode ser muito demorado e ainda ser necessário várias conjuntos de dispositivos para armazenar as informações.

Como os backup devem ser realizados regularmente, mantendo-se as informações de cada período considerado, o uso de backup total leva a manter dados redundantes, uma vez que toda a informação é copiada em cada backup.

Backup incremental

Um backup incremental somente salva os dados que foram alterados desde o último backup total ou incremental. No backup incremental deve-se manter uma base de dados com um backup total (não importa a quanto tempo tenha sido criada) e todos os backups incrementais realizados.

A vantagem do backup incremental é o uso eficiente do tempo e do espaço a ser utilizado pelos dados, já que o processo de cópia envolve somente a cópia dos dados que foram modificados desde o último backup.

A desvantagem é que as restaurações totais ou parciais são demoradas, já que pode-se ter que pesquisar em várias bases de dados para se localizar os dados necessários.

Backup diferencial

Um backup diferencial salva os dados que foram alterados desde o último backup total. É necessário uma base de dados com o backup total e da base de dados mais recente do backup diferencial para realizar uma recuperação completa do sistema.

O backup diferencial tem a vantagem de permitir uma recuperação rápida, mas a desvantagem de ser demorado caso tenha passado muito tempo desde o último backup total.

Armazenamento

Existem vários tipos de dispositivos de armazenamento que podem ser utilizados para guardar a cópia de segurança dos dados, como unidades de fita, discos rígidos e serviços em nuvem.

As unidades de fita ainda são utilizadas para backups [1], entretanto, exigem organização e cuidado para seu armazenamento para não comprometer os dados.

Os discos rígidos são uma ótima unidade de armazenamento em termos de custo e capacidade de armazenar informações. Unidades removíveis são práticas de serem substituídas e podem ser uma boa solução para empresas de pequeno porte.

Os serviços em nuvem são soluções modernas para o armazenamento de cópias de segurança.

Políticas de backup

Uma política de backup tem por objetivo formalizar os procedimentos técnicos para a realização da cópia de segurança dos dados. A definição da política deve levar em conta o tamanho da instituição, a quantidade de dados a serem guardados, a frequência em que as cópias devem ser realizadas e o tipo de equipamento que a organização dispõe.

Pontos a serem definidos em uma política de backup [1]:

  • Frequência em que a cópia de segurança deve ser realizada;
  • Quanto tempo demora a cópia;
  • Quanto tempo a recuperação dos dados pode levar;
  • Por quanto tempo será mantida a cópia de segurança.

Backup em Servidores Linux

Num servidor Linux os principais diretórios que precisam de cópias de segurança são [2]:

  • /var/www: É o diretórios onde ficam as páginas Web de um servidor Web.
  • /var/lib/mysql: É o diretório padrão das bases de dados MySQL e possui arquivos que são utilizados por servidores Web e outros aplicativos.
  • /home: É o diretório onde ficam os arquivos pessoais dos usuários.
  • /etc: É o diretório onde ficam os principais arquivos de configuração do sistema. É bom manter cópias dos mesmos para evitar reconfigurar totalmente o sistema após uma reinstalação.
  • /var/log: É o diretório onde ficam os arquivos de log do sistema, com o registro de todas as ações sobre a operação do sistema.

Também é importante registrar como estão montadas as partições fora da estrutura principal de diretórios do Linux, para reconfigurar o sistema caso seja necessário.

Utilitários para backup

Amanda
O Amanda é um sistema dedicado para realização de backup de maneira mais profissional, baseado em software livre e gratuito. É voltado para backup em unidades de fita, o que nem sempre é uma opção barata e fácil para pequenas empresas. Entretanto, também é possível utilizar este sistema para programar backup em disco rígido.
tar
O utilitário tar foi desenvolvido originalmente para a função de backup, gerando um único arquivo que depois poderia ser armazenado em fita, disco rígido ou outra unidade. Por ser um utilitário padrão no Linux e fácil utilizar em pequenas organizações, o tar é a opção que vamos em nosso servidor.
gzip
O utilitário gzip é utilizado para compactar arquivos, geralmente utilizado em conjunto com o tar. Os arquivos compactados com o gzip usam a extensão tar.gz.


Exemplo de comando para compactar o diretório /dados e criar um arquivo tar.gz [2]:

tar -zcvf arquivo.tar.gz dados/
  • onde a opção z indica para compactar com gzip, c para criar cópia dados, v para exibir informações e f para usar como destino um arquivo.

Para descompactar o arquivo posteriormente, troca-se a opção c por x para extrair os dados:

tar -zxvf arquivo.tar.gz
  • Como não foi indicada um diretório destino, este comando descompacta no diretório corrente.

Estes comandos são úteis para realizar cópias de segurança de um ou mais diretórios do sistema, gerando um arquivo compactado que poderia ser armazenado em um disco rígido externo ou gravado em DVD.

Scripts de backup

Tão importante quanto fazer as cópias de segurança e organizá-la e datá-las para facilitar a recuperação posterior dos dados.

Suponha que seja preciso fazer backups diários de um diretório de dados diariamente. As invés de renomear cada arquivo gerado pelo backup, um pequeno script poderia facilitar o processo [2]:

#!/bin/bash
DATA=`date +%Y%b%d`
cd /mnt/backup
tar -zcvf Backup-"$DATA".tar.gz dados/
  • No exemplo os arquivos de backup são armazenados no diretório /mnt/backup, que pode ser um diretório montado em um disco rígido exclusivo para as cópias de segurança.

Agendamento de backup

Para que script seja executado diariamente de forma automática, o mesmo pode ser incluído no agendamento de tarefas com a crontab global, por exemplo [2]:

30 6 * * * root /usr/local/bin/script-backup
  • onde 30 6 indica minuto e hora, root indica que o script será executado com permissão de administrdor e /usr/local/bin/ é o local onde está armazenado o script.

Backup em Servidor Remoto

Uma boa opção para realizar cópias de segurança é salvar os backups em um servidor remoto. Usar servidores em locais diferentes elimina a possibilidade de desastres e destruir o servidor principal e o servidor com o backup.

Para transferir dados entre os servidores pode-se utilizar a aplicação SSH e o comando de cópia remota scp.

Para que o backup seja feito de forma automática, é necessário utilizar chaves de autenticação para permitir que o script de backup transfira os arquivos sem necessidade de interferência do usuário [2].

Uso de Chaves de Autenticação
Veja como gerar chaves de autenticação em Servidor SSH.

Backup Incremental com rsync

O utilitário rsync permite sincronizar o conteúdo de dois diretórios, transferindo apenas as modificações. Ele não trabalha apenas comparando arquivo por arquivo, mas também comparando o conteúdo de cada um. Se apenas uma parte do arquivo foi modificada, o rsync transferirá apenas ela, sem copiar novamente todo o arquivo [2].

Com o rsync é possível programar backup incrementais de grandes quantidades de dados, mantendo-se cópias atualizadas em discos rígidos externos ou em servidores remotos.

Instalação do rsync
Utilizar o instalador de pacotes:
sudo apt-get install rsync

Backup local com rsync

Informar os diretórios de origem e de destino, para onde os arquivos serão copiados:

rsync -av /dados/ /mnt/backup/
  • No exemplo o diretório /dados/ será salvo dentro diretório /mnt/backup/.
  • A opção -a mantem as permissões dos arquivos e a opção v mostra o progresso da cópia na tela.
  • O parâmetro --delete pode ser acrescentado para que o rsync delete no destino arquivos que tenham sido deletados no diretório origem.

A primeira cópia é mais demorada, uma vez que são copiados todos os arquivos, mas, a partir da segunda cópia a operação será mais rápida, transferindo apenas as mudanças.

Para recuperar os dados, basta inverter a ordem do comando:

rsync -av /mnt/backup/dados/ /dados/

Backup remoto com rsync

O rsync também pode ser utilizado remotamente com a ajuda do SSH.

Para tal, caso o rsync seja executado por um script de backup, o servidor SSH que será utilizado para armazenar o backup deve ser acessível via uma chave pública de autenticação, como visto no caso do tar.

A utilização do rsync remotamente poderia ser realizada com um comando do tipo [2]:

sudo rsync -av --rsh "ssh -l bkuser" /dados/ bkuser@endereçoServidor:/backup/
  • O parâmetro --rsh "ssh -l bkuser" orienta o rsync a utilizar o SSH e o -l bkuser indica que o servidor remoto será acessado pelo usuário bkuser.
  • O parâmetro -av faz com que o rsync atualize os arquivos e grave novos arquivo no destino, sem remover arquivos que tenham sido deletados no diretório origem.
  • O parâmetro --delete pode ser acrescentado para que o rsync delete no destino arquivos que tenham sido deletados no diretório origem.
  • O parâmetro -z pode ser acrescentado para que o rsync faça compressão dos dados.

Para recuperar o backup basta inverter a ordem dos arquivos de origem e destino.

Backup incremental com rsync

O rsync também pode ser utilizado para realizar backups incrementais, guardando um histórico dos arquivos durante um período de tempo.

O script de backup incremental, apresentado por [2], combina o rsync com o comando cp -al:

cp -al
O comando cp é utilizado para copiar arquivos.
  • O parâmetro -a faz a cópia exata de um diretório, mantendo as permissões.
  • O parâmetro -l faz que com o cp gere um hard link, ao invés de copiar os arquivos.
hard links
Os hard links são atalhos para arquivos que apontam diretamente para o inode do arquivo dentro do sistema de arquivos e são vistos pelo sistema operacional exatamente como os arquivos reais. Funciona como se fossem dois arquivos compartilhando para a mesma área de memória.
  • Caso o arquivo seja modificado o hard link apontará para o arquivo modificado.
  • Caso o arquivo original seja apagado, o hard link continuará existindo, apontando para o inode do arquivo (que continuará existindo).
  • O arquivo somente será removido de fato quanto todos o hard link for removido.
soft links
Soft links, ou links simbólicos, são atalhos gerados com o comando ln -s.
  • Diferentemente do hard link, no soft link caso o arquivo seja removido o link ficará quebrado.

Script para backup incremental

Exemplo apresentado em [2]:

rm -rf backup-6
mv backup-5 backup-6
mv backup-4 backup-5
mv backup-3 backup-4
mv backup-2 backup-3
mv backup-1 backup-2
cp -al backup-0 backup-1
rsync -av --delete /dados/ backup-0

Se executado diariamente o script cria um conjunto com um histórico de 7 diretórios, numerados de 0 a 6, usados para armazenar os backups:

  • O diretório backup-0 tem o backup completo dos dados;
  • A cada execução do script os diretórios de backups são rotacionados e o backup completo é atualizado no backup-0;
  • Os diretórios de backup são na verdade hard links para os arquivos do backup-0, ocupando em disco o espaço que seria equivalente a um único backup.

O script funciona para aquivos que foram criados e deletados. Ao remover arquivos do diretório original não são removidos os hard links criados com o cp -al, assim, os backups anteriores mantem os arquivos deletados. Entretanto, caso o arquivo seja modificado, não há como recuperar ar versões anteriores do mesmo.

Tarefa

Backup total
Utilizar um servidor remoto, acessado via SSH, para ser utilizado para armazenar arquivos de backup total:
  1. Utilizar como servidor remoto o Ubuntu Server instalado no IFPR (192.168.71.201)
  2. O servidor remoto possui um grupo especial chamado backup e uma conta especial para ser acessada pelo script de backup, chamada bkuser (senha: 1234).
  3. O diretório home do usuário bkuser é um diretório especial para guardar os arquivos de backup, portanto, poderia ser montado em uma partição exclusiva para backup.
  4. Gerar a chave de autenticação pública no cliente (ssh-keygen) que vai rodar o script de backup e copiá-la para o servidor remoto (ssh-copy-id), que vai armazenar os backups .
  5. Criar na máquina cliente um script de backup que identifique o proprietário do backup, a identificação da data e salve diariamente os diretórios /home e /dados e que depois transfira os mesmos para o servidor remoto.
  6. Agendar a tarefa usando o agendamento de tarefas.


Avaliação da Tarefa
Montar arquivo TXT com os seguintes itens:
  • Script de backup;
  • ls -l dos diretórios que terão os dados copiados;
  • Impressão do verbose (saída do comando tar) realizado durante a execução do script.
  • Comando scp realizado para transferir o arquivo de backup para o servidor remoto (pode fazer parte do script);
  • ls -l do diretório do servidor remoto onde foi armazenado o arquivo de backup;
  • Mostrar o agendamento na tabela crontab.

Referências

  1. 1,0 1,1 1,2 1,3 VALLE, O. T. Adminstração de Redes com Linux: Fundamentos e práticas, IFSC, Florianópolis, 2010.
  2. 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 MORIMOTO, C. E. Seridores Linux: Guia prático, Sul Editores, Porto Alegre, 2013.

Evandro.cantu (discussão) 16h49min de 12 de abril de 2021 (-03)