Backups Rsync no btrfs muito lentos

5

Meu ambiente é o Ubuntu 15.04 com o kernel 3.19.0-28-generic e o Btrfs v3.17.

Eu tenho dois discos rígidos externos USB idênticos que uso com meu script de backup. Um deles é formatado com btrfs e o outro com ext4 . O sistema de arquivos de origem é sempre ext4 . O comando rsync tem esta aparência:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

Acabei de perceber que o backup realizado em btrfs leva um tempo extremamente longo: pouco mais de uma hora, em comparação com os 4 minutos necessários para realizar a mesma cópia em ext4 .

Para descartar o mau funcionamento do disco, realizei alguns benchmarks, com dd e o “utilitário de disco” fornecidos com o Ubuntu, mas obtive o mesmo desempenho em ambos os discos. A parte lenta parece estar causando problemas com o backup anterior. Mesmo depois de uma desfragmentação e depuração, o seguinte comando leva cerca de 53 minutos em btrfs , mas apenas 1 minuto em ext4 :

cp -arl "$previousBackup" "$destDir"

Pesquisando na Internet, encontrei indícios de que o desempenho de btrfs sofre com hardlinks, mas não esperaria essa diferença enorme . Descobri que esse comando é mais rápido, mas ainda demora 30 minutos para ser concluído:

cp -ar --reflink "$previousBackup" "$destDir"

Alguém tem experiência com esse comportamento e pode confirmá-lo? Existe alguma maneira simples de corrigi-lo (por exemplo, diferentes opções de montagem) ou devo tentar excluir tantos hardlinks quanto possível e apenas usar reflinks?

EDITAR

Acabei de descobrir que até mesmo excluir um diretório de btrfs requer mais de uma hora. A mesma operação é instantânea no disco "twin" ext4 . Obviamente, há um problema com os metadados aqui.

    
por matpen 16.09.2015 / 17:57

1 resposta

1

Você diz que está copiando links rígidos com seu comando rsync , mas onde está o sinal -H ? Eu não vejo isso em seu comando:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

A maneira como eu entendo como rsync funciona - no que diz respeito a hardlinks - é que sem o -H flag, os dados reais são copiados em vez do hardlink, conforme explicado no página% man_de% man :

-H, --hard-links

This tells rsync to look for hard-linked files in the transfer and link together the corresponding files on the receiving side. Without this option, hard-linked files in the transfer are treated as though they were separate files.

Eu posso imaginar um procedimento como esse, em que muitos arquivos similares são copiados várias vezes, em vez de estarem com hardlink, o que resultaria em um tempo de transferência mais lento.

Além disso, considere também usar o sinalizador rsync ( -z ):

-z, --compress

With this option, rsync compresses the file data as it is sent to the destination machine, which reduces the amount of data being transmitted -- something that is useful over a slow connection.

Sim, é uma transferência USB para USB no mesmo sistema, por isso a velocidade já está otimizada, mas não atrapalhar ver --compress talvez ajude a superar os gargalos naturais de transferência de dados USB.

Um tutorial simples e simples que explica esses sinalizadores - assim como outros - pode ser encontrado aqui .

    
por 16.09.2015 / 18:29