rsnapshot muito lento

1

Para fazer o backup de dados no meu escritório, eu uso um Raspberry Pi modelo B (eu tinha um sobressalente) rodando o rsnapshot. Basicamente, toda noite copia dados de um monte de pastas montadas no SMB para um par de discos rígidos externos (fuseblk).

Eu gradualmente adicionei dados para backup e, recentemente, todo o processo ficou muito lento: são necessárias 15 horas para executar toda a operação.

Este é o log de uma cópia (somente em um disco):

[07/Nov/2018:21:16:05] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: started
[07/Nov/2018:21:16:05] echo 28378 > /var/run/rsnapshot.pid
[07/Nov/2018:21:16:08] /bin/rm -rf /mnt/Disk1/Backup/Daily.4/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.3/ /mnt/Disk1/Backup/Daily.4/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.2/ /mnt/Disk1/Backup/Daily.3/
[07/Nov/2018:23:31:33] mv /mnt/Disk1/Backup/Daily.1/ /mnt/Disk1/Backup/Daily.2/
[07/Nov/2018:23:31:33] /bin/cp -al /mnt/Disk1/Backup/Daily.0 /mnt/Disk1/Backup/Daily.1
[08/Nov/2018:02:17:45] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld01 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:43:28] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld02 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:46:29] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld03 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:05] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld04 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:48] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld05 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:49] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld06 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:02:54:49] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld07 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:00:10] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld08 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:25:57] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld09 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:25:57] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld10 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:28:42] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld11 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:53:39] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld12 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:03:58:05] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld13 /mnt/Disk1/Backup/Daily.0/./
[08/Nov/2018:04:00:24] touch /mnt/Disk1/Backup/Daily.0/
[08/Nov/2018:04:00:24] rm -f /var/run/rsnapshot.pid
[08/Nov/2018:04:00:24] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: completed successfully

Agora, sei que o RPi não é rápido, nem os drives externos. Ainda assim, os problemas parecem estar aqui

[07/Nov/2018:21:16:08] /bin/rm -rf /mnt/Disk1/Backup/Dayly.4/

e especialmente aqui

[07/Nov/2018:23:31:33] /bin/cp -al /mnt/Disk1/Backup/Dayly.0 /mnt/Disk1/Backup/Daily.1

Tenha em mente que eu tenho provavelmente dezenas de milhares de arquivos (estou contando enquanto escrevo, mas não sei quanto tempo levará). (EDIT: existem 250k arquivos em ~ 30 GB de espaço)

Alguma ideia do que poderia ser o problema e se / como eu poderia resolvê-lo?

Enquanto estou aqui, não faço idéia da opção --relative [...] --no-relative no comando rsync . Eu sinceramente não me lembro como cheguei a isso, faz algum tempo desde que eu configurei. Como preciso salvar a árvore, devo usar apenas relative ? Ou está tudo bem assim, já que funciona?

- = * UPDATE * = -

Eu fiz como eu fui sugerido e formatado como ext4 os drives usb. Este é o log após a operação:

[16/Nov/2018:21:16:04] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: started
[16/Nov/2018:21:16:04] echo 19966 > /var/run/rsnapshot.pid
[16/Nov/2018:21:16:04] /bin/rm -rf /mnt/Disk1/Backup/Daily.4/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.3/ /mnt/Disk1/Backup/Daily.4/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.2/ /mnt/Disk1/Backup/Daily.3/
[16/Nov/2018:21:18:52] mv /mnt/Disk1/Backup/Daily.1/ /mnt/Disk1/Backup/Daily.2/
[16/Nov/2018:21:18:52] /bin/cp -al /mnt/Disk1/Backup/Daily.0 /mnt/Disk1/Backup/Daily.1
[16/Nov/2018:21:22:25] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld01 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:19] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld02 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:27] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld03 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:41] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld04 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:44] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld05 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:44] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld06 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:24:45] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld07 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:25:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld08 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld09 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:04] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld10 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:20] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld11 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:26:58] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld12 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:28:54] /usr/bin/rsync -a --stats --relative --delete --no-relative /mnt/Backup/Fld13 /mnt/Disk1/Backup/Daily.0/./
[16/Nov/2018:21:30:03] touch /mnt/Disk1/Backup/Daily.0/
[16/Nov/2018:21:30:03] rm -f /var/run/rsnapshot.pid
[16/Nov/2018:21:30:03] /usr/bin/rsnapshot -c /etc/rsnapshot.conf Daily: completed successfully

Como você pode ver, o tempo total foi drasticamente reduzido: 15 minutos vs. ~ 7 horas.

Obrigado a todos, sinceramente, estou impressionado.

A única dúvida que me resta é sobre o que foi discutido nos comentários: Acredito que o rsync faz uma cópia incremental, mesmo que veja as pastas de origem do smb como locais. Algumas dessas pastas contêm 10k + arquivos (provavelmente ainda mais, não posso checar neste exato momento) e simplesmente não há como todos serem copiados em, digamos, 2 minutos.

    
por pecheronza 08.11.2018 / 15:31

1 resposta

0

Há alguns problemas aqui reduzindo a solução de backup.

  1. Você está usando rsync para copiar entre dois sistemas de arquivos "locais".

    Só porque um deles é SMB é irrelevante para rsync . Se o sistema de arquivos estiver montado como parte do sistema local, rsync terá que tratá-lo como local. Isso significa que qualquer arquivo alterado deve ser copiado do compartilhamento de rede SMB inteiramente, não apenas as partes alteradas.

    Se o seu servidor de arquivos puder executar rsync diretamente, modifique o processo de backup para que ele possa iniciar um processo rsync remoto e obter o benefício de cópias incrementais.

  2. Você está gravando em seus discos de backup via fuseblk.

    Suponho que isso ocorra porque os discos possuem sistemas de arquivos NTFS. Se você puder reformatá-los para usar um sistema de arquivos nativo do Linux, como ext4 , você verá um aumento significativo na velocidade do IO do arquivo. Incluindo o rm -rf que está demorando tanto.

    Se você está escrevendo para o VFAT, então você também tem o problema de timestamps de qualidade reduzida e você precisará avisar rsync de acordo para que ele não tente continuar copiando arquivos de outra forma idênticos para o seu backup mídia.

    Eu entendo pelos comentários que você está realmente usando o NTFS e deseja continuar usando isso para que os discos possam ser lidos no Windows. Uma alternativa é instalar um driver de disco ext4 no Windows. Eu uso ext2fs , que eu acho bastante sólido.

por 09.11.2018 / 17:08

Tags