Qual é a maneira mais rápida de fazer backups diários de mais de 500 mil arquivos?

Qual é a maneira mais rápida de fazer backups diários de mais de 500 mil arquivos?

Temos um aplicativo que gerou até agora mais de 540 mil imagens. As imagens são mantidas em uma estrutura de árvore que utiliza 5 milhões de Inodes até o momento.

Gostaríamos de fazer backup dos dados diariamente em um servidor remoto externo. Pensamos em usar o rsync, mas não temos certeza se será o caminho mais rápido.

Vocês têm alguma recomendação para uma estratégia de backup eficiente?

Responder1

Cara, leva muito tempo para verificar 5.000.000 de inodes todos os dias para encontrar arquivos que foram alterados!

E se houvesse uma maneira de fazer backup apenas das alterações desde o último backup?

Bem, você pode… cominstantâneos!

O maior obstáculo para os snapshots é mudar para um sistema de arquivos que os suporte.

No Linux, dois sistemas de arquivos de instantâneo bem conhecidos são:

  • Btrfs– Projetado para Linux, menos testado em batalha
  • ZFS– Portado para Linux, já existe há mais tempo

Ambos sãosistemas de arquivos copy-on-write. O que isso significa praticamente para você é que eles acompanham as alterações desde o último instantâneo, de modo que, quando você enviar o instantâneo mais recente para o servidor de backup, apenas as alterações sejam enviadas, mas você ainda tenha uma cópia completa de todos os backups diários que decidir. manter.

Isso significa que, como bônus, você tem o potencial de manter mais de um dia de backups sem muito espaço extra (apenas o espaço em disco usado pelas alterações a cada dia) e pode excluir os backups de maneira flexível, mantendo-os semanalmente, mensalmente, ou backups anuais conforme desejar.

Backups incrementais Btrfs

Este é um exemplo de comandos que você pode executar para fazer backups incrementais e enviá-los ao seu servidor de backup:

# Make a snapshot
btrfs subvolume snapshot -r /app/data /backup/app-data-$(date "+%Y%m%dT%H%M%S%Z")

# Ensure the snapshot is saved
sync

# Find your latest snapshot, referred to as `/backup/app-data-THIS_BACKUP_TIMESTAMP` below
ls -lhtr /backup/

# Send the snapshot since the previous snapshot to the backup server
btrfs send -p /backup/app-data-LAST_BACKUP_TIMESTAMP /backup/app-data-THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "btrfs receive /backup/app-data"

Observação:Exclua -p /backup/app-data-LAST_BACKUP_TIMESTAMPdo último comando se este for o primeiro backup.

Backups incrementais do ZFS

Este é um exemplo de comandos que você pode executar para fazer backups incrementais e enviá-los ao seu servidor de backup:

# Create a snapshot of the "data" dataset in your "app-pool" zpool
zfs snapshot app-pool/data@$(date "+%Y%m%dT%H%M%S%Z")

# Find your latest snapshot, referred to as `app-pool/data@THIS_BACKUP_TIMESTAMP` below
zfs list -rt snapshot app-pool/data

# Send the snapshot since the previous snapshot to the backup server
zfs send -i app-pool/data@LAST_BACKUP_TIMESTAMP app-pool/data@THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "zfs receive backup-pool/app-data"

Observação:Exclua -i app-pool/data@LAST_BACKUP_TIMESTAMPdo último comando se este for o primeiro backup.

informação relacionada