Como restaurar dados atomicamente em um servidor remoto?

3

Eu quero fazer backup e restaurar meu diretório pessoal de uma conta remota.

O comando que eu uso é:

Backup

ssh [email protected] "tar jcf - ." > backup.tar.bz2

Restaurar

cat backup.tar.bz2 | ssh [email protected] "tar jxf - ."

Gostaria de ter certeza de que todos os arquivos foram restaurados ou nenhum, mesmo que o servidor seja reinicializado no meio de uma restauração.

Qualquer maneira de conseguir o que eu quero? Gostaria de manter os comandos mostrados acima como base, mas outras ideias também são apreciadas.

    
por Paolo 15.11.2012 / 16:18

4 respostas

6

Para obter a verdadeira atomicidade, você precisa usar recursos em nível de sistema de arquivos, como snapshots do btrfs .

    
por 15.11.2012 / 19:27
4

Você pode usar algum arquivo de marcador, quando a restauração estiver concluída. Quando a restauração está incompleta e o arquivo do marcador está faltando, você sabe que deve remover a restauração incompleta.

    
por 15.11.2012 / 16:25
4

Sugiro que você use rsync em vez de fazer backup de seus arquivos manualmente. Com essa ferramenta, você pode fazer exatamente o que está fazendo com alguns recursos extras. Por exemplo, você pode passar o argumento --progress para saber o último arquivo copiado.

Outra característica é que você pode copiar apenas os novos arquivos ou os modificados, o que reduzirá a quantidade de dados transmitidos através da rede. Se você definir o argumento --delete , ele excluirá os arquivos que você removeu na sua pasta source . Finalmente, o argumento -z ativa a compactação.

O comando tem a seguinte estrutura:

$ rsync options source destination

Exemplo

rsync --progress -azv -e ssh --delete /home/guandalino/ \
                [email protected]:/home/guandalino/backup/guandalino/

onde

  • --progress exibe o progresso detalhado da execução do rsync
  • -z ativa a compactação
  • -v significa verboso
  • -a indica recursiva. Além disso, preserva permissões, proprietário, grupo, etc.
  • --delete exclui arquivos que não estão lá no diretório de origem.

Veja os exemplos .

Backup agendado

Esta parte é extra. É assim que eu uso para fazer backup da minha pasta pessoal para o meu servidor automaticamente. Eu coloquei o exemplo acima em um arquivo de script de shell e habilitei cron para executá-lo todos os dias, às 00:00.

00  00 *   *   *     /home/guandalino/backup_home_folder.sh 2>&1 >> /var/log/backup_home_folder.log

Eu redireciono a saída do script para um arquivo para manter um log da transmissão. Você terá que gerar uma chave pública com ssh-keygen -t rsa se ainda não tiver uma, para que seu cliente possa se conectar ao servidor sem digitar sua senha.

    
por 15.11.2012 / 17:14
3

Não diretamente, não. O melhor que você pode fazer é restaurar e verificar em um diretório temporário e renomear. A renomeação moverá os arquivos para sua posição correta atomicamente.

    
por 15.11.2012 / 17:41