Para obter a verdadeira atomicidade, você precisa usar recursos em nível de sistema de arquivos, como snapshots do btrfs .
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.
Para obter a verdadeira atomicidade, você precisa usar recursos em nível de sistema de arquivos, como snapshots do btrfs .
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.
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. 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.
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.