Meu ambiente é Ubuntu 15.04 com kernel 3.19.0-28-generic e Btrfs v3.17.
Tenho dois discos rígidos USB externos idênticos que uso com meu script de backup. Um deles está formatado com btrfs
e o outro com ext4
. O sistema de arquivos de origem é sempre ext4
. O rsync
comando fica assim:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
Acabei de perceber que o backup realizado btrfs
leva um tempoextremamentemuito tempo: pouco mais de uma hora, em comparação com os 4 minutos que leva para realizar a mesma cópia para ext4
.
Para descartar o mau funcionamento do disco, realizei alguns benchmarks, com dd
o “utilitário de disco” fornecido com o Ubuntu, mas obtive o mesmo desempenho em ambos os discos. A parte lenta parece estar vinculada ao backup anterior. Mesmo depois de desfragmentar e limpar, o comando a seguir leva cerca de 53 minutos btrfs
, mas apenas 1 minuto ext4
:
cp -arl "$previousBackup" "$destDir"
Pesquisando na Internet, encontrei indícios de que o desempenho do btrfs
hardlinks sofre, mas não esperaria issoenormediferença. Descobri que este comando é mais rápido, mas ainda leva mais de 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 o maior número possível de hardlinks e usar apenas reflinks?
EDITAR
Acabei de descobrir que mesmoexcluindoum diretório btrfs
requer mais de uma hora. A mesma operação é instantânea no ext4
disco “gêmeo”. Obviamente há um problema com metadados aqui.
Responder1
Você diz que está copiando hardlinks com o seursync
comando, mas onde está a -H
bandeira? Não vejo isso no seu comando:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
A maneira como entendo como rsync
funciona - com relação aos hardlinks - é que sem o -H
sinalizador os dados reais são copiados em vez do hardlink, conforme explicado norsync
página de manual:
-H, --links físicos
Isso diz ao rsync para procurar arquivos com link físico na transferência e vincular os arquivos correspondentes no lado receptor. Sem esta opção, os arquivos com link físico na transferência são tratados como se fossem arquivos separados.
Posso imaginar que um procedimento em que muitos arquivos semelhantes sejam copiados repetidamente, em vez de serem vinculados, resultaria em um tempo de transferência mais lento.
Além disso, considere usar o sinalizador -z
( --compress
):
-z, --comprimir
Com esta opção, o rsync compacta os dados do arquivo à medida que são enviados para a máquina de destino, o que reduz a quantidade de dados transmitidos – algo que é útil em uma conexão lenta.
Sim, esta é uma transferência de USB para USB no mesmo sistema, então é provável que a velocidade já esteja otimizada, mas não faz mal ver que -z
talvez o ajude a superar gargalos naturais na transferência de dados USB.
Um tutorial simples e agradável que explica esses sinalizadores - assim como outros -pode ser encontrado aqui.