Script de backup avançado

1

Atualmente, estou escrevendo um script inicial avançado para o meu servidor de minecraft. Tudo funciona como eu quero também. Mas o problema é os backups. Eu criei uma função para isso. Ele também funciona muito bem e faz exatamente o que eu quero fazer. Mas como o servidor tem que estar inativo durante o backup e o próprio backup demora (quero dizer horas), preciso acelerar o backup!

Meu backup atual funciona assim:

tar -cjvf $BACKUP_PATH/$filename $MINECRAFT_PATH

Como eu disse, isso leva séculos!

Então, tive a idéia de criar um arquivo tar sem compactar, depois iniciar o servidor e compactar o arquivo.

tar -cvf $BACKUP_PATH/$filename $MINECRAFT_PATH
START_SERVER
bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Isso deve funcionar mais rápido. Mas então eu tive uma ideia. E esse é o ponto em que eu preciso de você.

Primeiro, eu quis modificar o backup de uma forma que mostre quanto já foi feito backup e uma estimativa de quanto tempo ele levará aproximadamente para terminar. Assim, a saída do alcatrão seria suprimida, o comando seria executado em segundo plano e um loop (while) (que aguardava o comando terminar) calcularia a porcentagem calculada e também calcularia uma estimativa do tempo restante.

Para isso, primeiro faço uma chamada para du para obter o tamanho de todos os arquivos que estão sendo compactados. Isso seria salvo em uma variável. o i receberia o timestamp atual. Também salvo em uma variável. Neste ponto, o loop seria iniciado. Então, no loop, a porcentagem e o tempo restante seriam calculados (simples ...) e isso seria impresso em duas linhas que sempre são atualizadas. E esse é o meu maior problema. Eu ficaria muito feliz se alguém pudesse me ajudar com o loop!

Algum código básico:

tar -cf $BACKUP_PATH/$filename $MINECRAFT_PATH &

backupsize=$(du -bs $MINECRAFT_PATH)
starttimestamp=$(date +%s)

# Here is the loop (how do I stay here while the tar command is still running?
# And how do i update the two lines with the newly created numbers?

START_SERVER

bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Se você estiver no clima de ajuda, pode me ajudar a conseguir esse tipo de coisa e também trabalhar com o comando bzip . Se não for possível, vou deixar! ( bzip aceita os mesmos sinalizadores que zip )

    
por BrainStone 24.08.2013 / 18:07

2 respostas

3

Você pode usar rsync para criar uma cópia de backup do seu $MINECRAFT_PATH . Isto irá apenas copiar as partes dos arquivos que foram alterados desde a última execução, por isso deve ser relativamente rápido. (exceto pela primeira vez, porque então tem que copiar tudo) Quando o rsync estiver pronto, você pode reiniciar o servidor. Então você usa tar para fazer um tarball da cópia de backup de $MINECRAFT_PATH .

Ter uma cópia de backup diretamente na máquina também é bom caso algo dê errado.

Com relação à compactação, recomendamos o uso da compactação gzip padrão em vez de bzip2 . Quando eu fiz um teste compactando dumps do sistema operacional, gzip tamanhos de arquivo eram cerca de 40% do arquivo descompactado. A velocidade de compressão foi de 11,5 a 17,7 MB / s. Quando usei bzip2 , os tamanhos de arquivo compactados foram de 32 a 38% do arquivo descompactado, mas a velocidade de compactação caiu para 5,7 a 7,3 MB / s. Se você tiver uma máquina com vários núcleos, tente o pbzip2 , que usa vários processadores para acelerar as coisas. Mas provavelmente ainda será mais lento que gzip . Além disso, usar um programa de descompactação externa complica a restauração de backups.

    
por 24.08.2013 / 18:52
1
  1. manipula a variável exportada BZIP2. Por padrão, o bzip2 usa taxa de compressão de -3 ou -4. definindo a variável export BZIP2, você pode dizer ao bzip2 iniciado a partir do tar (tar -j) sobre a taxa de compressão. consulte a página link
  2. experimente proporções diferentes para otimizar a velocidade. nenhuma compactação não é a melhor velocidade porque você tem limitação de velocidade de hardware. a melhor compactação é lenta porque utiliza CPU. é por isso que a razão -3 ou -4 é o padrão, mas você deve fazer uma experiência. Após o backup, você pode reembalar o arquivo:

    bzip2 -d archive_after_repack.bz2 mas melhor (e no tempo mais lento) compressa taxa que você usa usando xz archiver.

  3. usar o rsync não é a melhor ideia, porque você deve ter a segunda cópia de dados completa.

  4. experimente backups diferenciais e completos de mix. você pode usar a opção --newer = DATE-OR-FILE (man tar)
  5. use tar com --checkpoint ou --checkpoint-action, isso ajuda você a obter progresso. você pode calcular isso e obter estimativas.
  6. se for possível usar o instantâneo do sistema de arquivos. você pode combinar isso usando lvm com ext3, ext4, jfs ou xfs. Se você puder, pode usar o suporte do zfs, mas isso não é oficialmente suportado. A criação de instantâneos é muito rápida. Você não pode parar os serviços. Após o snapshot você tem congelado sistema de arquivos compacto, cuja você pode fazer backup, desde que seja necessário. após o backup, você remove a captura instantânea.
por 05.09.2013 / 16:17