Por que meu rsync diminui com o tempo?

2

Estou tentando fazer backup de alguns arquivos do meu PC para um disco rígido externo usando o rsync. A cópia funciona bem, mas leva muito tempo até mesmo para o padrão USB 2.0. Para um USB 2.0 a velocidade real de transferência deve ser de 30MB / s, no meu teste a velocidade chega às vezes 2MB / s. O pen-drive que estou usando é um bom 32GB USB3.0 com FAT32 fs.

Nota: antes de cada teste eu apaguei todo o conteúdo do pen-drive e também tentei em uma porta USB diferente.

Parte do script que estou usando é a seguinte:

mkdir /media/eusbd0
mount -t vfat -o shortname=mixed,iocharset=utf8 /dev/sdb1 /media/eusbd0 

# copy only data between date1 to date2
for dir in $(find /home/records -type d -newermt "2016-08-04" ! -newermt "2016-08-18" 2>&1); do
    if [ "/home/records" != "$dir" ]; then # skip parent dir
        rsync -ravP --inplace --modify-window=2 --log-file=/var/log/download_records "$dir" /media/eusbd0 > /var/log/rsync_report.txt
    fi     
done
#sync   
umount -l /media/eusbd0

Aqui faz parte da saída do rsync:

    sending incremental file list 2016-08-11/ 2016-08-11/gps_00000

     44,179 100%   10.88MB/s    0:00:00 (xfr#1, to-chk=34/36) 2016-08-11/log

    106,792 100%  101.84MB/s    0:00:00 (xfr#2, to-chk=33/36) 2016-08-11/log_cam0

      5,532 100%    5.28MB/s    0:00:00 (xfr#3, to-chk=32/36) 2016-08-11/rec_2016-08-11.13_57_22.mov

  3,513,782 100%  108.10MB/s    0:00:00 (xfr#4, to-chk=31/36) 2016-08-11/rec_2016-08-11.13_59_00.mov

  4,281,177 100%   63.79MB/s    0:00:00 (xfr#5, to-chk=30/36) 2016-08-11/rec_2016-08-11.14_02_09.mov

  3,359,207 100%   36.82MB/s    0:00:00 (xfr#6, to-chk=29/36) 2016-08-11/rec_2016-08-11.14_04_16.mov

  1,877,863 100%   17.91MB/s    0:00:00 (xfr#7, to-chk=28/36) 2016-08-11/rec_2016-08-11.14_05_42.mov


........

 50,482,791 100%  114.90MB/s    0:00:00 (xfr#20, to-chk=15/36) 2016-08-11/rec_2016-08-11.15_14_53.mov

 19,291,527 100%   34.52MB/s    0:00:00 (xfr#21, to-chk=14/36) 2016-08-11/rec_2016-08-11.15_18_42.mov

 50,700,461 100%   58.68MB/s    0:00:00 (xfr#22, to-chk=13/36) 2016-08-11/rec_2016-08-11.15_20_20.mov

.......

sent 802,030,914 bytes  received 685 bytes  94,356,658.71 bytes/sec

total size is 801,832,718  speedup is 1.00 tail:

/var/log/rsync_report.txt: file truncated sending incremental file

list 2016-08-16/ 2016-08-16/log

     41,966 100%    8.77MB/s    0:00:00 (xfr#1, to-chk=16/18) 2016-08-16/obd_00000

     46,798 100%   44.63MB/s    0:00:00 (xfr#2, to-chk=15/18) 2016-08-16/rec_2016-08-16.16_24_12.mov

 50,649,317 100%   18.64MB/s    0:00:02 (xfr#3, to-chk=14/18) 2016-08-16/rec_2016-08-16.16_25_50.mov

 25,602,242 100%    7.78MB/s    0:00:03 (xfr#4, to-chk=13/18) 2016-08-16/rec_2016-08-16.16_57_42.mov

 50,496,580 100%   15.18MB/s    0:00:03 (xfr#5, to-chk=12/18) 2016-08-16/rec_2016-08-16.16_59_20.mov

 50,617,906 100%   13.29MB/s    0:00:03 (xfr#6, to-chk=11/18) 2016-08-16/rec_2016-08-16.17_00_58.mov

 50,759,115 100%   10.16MB/s    0:00:04 (xfr#7, to-chk=10/18) 2016-08-16/rec_2016-08-16.17_02_36.mov

 50,883,325 100%    6.81MB/s    0:00:07 (xfr#8, to-chk=9/18) 2016-08-16/rec_2016-08-16.17_04_14.mov

 47,995,074 100%    4.41MB/s    0:00:10 (xfr#9, to-chk=8/18) 2016-08-16/rec_2016-08-16.17_09_44.mov

 50,813,636 100%    2.35MB/s    0:00:20 (xfr#10, to-chk=7/18) 2016-08-16/rec_2016-08-16.17_11_22.mov

 50,953,015 100%    2.52MB/s    0:00:19 (xfr#11, to-chk=6/18) 2016-08-16/rec_2016-08-16.17_13_00.mov

 50,221,069 100%    2.93MB/s    0:00:16 (xfr#12, to-chk=5/18) 2016-08-16/rec_2016-08-16.17_14_38.mov

 50,445,757 100%    2.87MB/s    0:00:16 (xfr#13, to-chk=4/18) 2016-08-16/rec_2016-08-16.17_16_16.mov

 51,036,959 100%    3.16MB/s    0:00:15 (xfr#14, to-chk=3/18) 2016-08-16/rec_2016-08-16.17_17_54.mov

 51,056,196 100%    3.19MB/s    0:00:15 (xfr#15, to-chk=2/18) 2016-08-16/rec_2016-08-16.17_19_32.mov

 50,434,922 100%    3.12MB/s    0:00:15 (xfr#16, to-chk=1/18) 2016-08-16/rec_2016-08-16.17_21_10.mov

 19,456,000 100%    2.71MB/s    0:00:06 (xfr#17, to-chk=0/18)

sent 701,682,372 bytes  received 343 bytes  4,512,429.04 bytes/sec

total size is 701,509,877  speedup is 1.00

O que pode ser notado na saída é que, no começo, a velocidade é alta, enquanto no final fica mais lenta e lenta. Por que isso está acontecendo?

O arquivo que estou copiando é praticamente o mesmo (exceto o tamanho que pode variar um pouco) e a quantidade deles é baixa, menos de 100 arquivos. Eu também tentei com outros pen-drives, mas eu tenho o mesmo resultado.

Obrigado!

NOVA EXPERIÊNCIA:

Eu tentei o cpio em vez do rsync para copiar os mesmos arquivos. O script modificado:

mkdir /media/eusbd0
mount -t vfat -o shortname=mixed,iocharset=utf8 /dev/sdb1 /media/eusbd0 

# copy only data between date1 to date2
for dir in $(find /home/records -type d -newermt "2016-08-04" ! -newermt "2016-08-18" 2>&1); do
    if [ "/home/records" != "$dir" ]; then # skip parent dir
        find "$dir" -print | cpio -pdm /media/eusbd0 > /var/log/rsync_report.txt
    fi     
done
#sync   
umount -l /media/eusbd0

A quantidade de dados para copiar é de cerca de 3 GB e o tempo necessário para o cpio é de 900 segundos, o que se traduz em uma velocidade média de transferência de 3-4 MB / s. Parece que o problema diz respeito ao hardware ou às unidades, uma vez que também a velocidade do rsync está próxima desse valor.

UPDATE Eu tentei com outros 3 pen-drive formatados em FAT32, mas eu tenho o mesmo comportamento. Então eu tentei o NTFS fs e obtive um bom resultado de > 30MB / s, mas infelizmente apenas em um dos 4 pen drives USB que tenho. Outros experimentos com HDD e SSD externos mostraram também alguns resultados razoavelmente bons > 20MB / s.

Para resumir, minha placa-mãe (ou drivers) provavelmente não gosta de pen drives ou FAT32 fs. Discos rígidos externos (alimentados ou não) funcionam como esperado pelo menos em NTFS. E eu não tenho ideia de por que isso aconteceu.

    
por lcit 17.08.2016 / 13:45

2 respostas

1

rsync não é a melhor solução para cópia. É a melhor solução para sincronizar arquivos. A velocidade para a maioria dos dados de gravação / leitura depende de um buffer. No caso de escrever arquivos, os buffers são preenchidos e você vê uma velocidade maior para isso. Assim que o buffer for gravado no dispositivo (buffer flush), a velocidade será reduzida. Velocidade de gravação para o dispositivo não depende apenas da especificação (USB 2.0 ou 3.0 ...), também no protocolo (implementação), driver, tamanhos de bloco. Às vezes, é melhor copiar o arquivo inteiro em vez de permitir que os programas de sincronização verifiquem primeiro as alterações. Isso gera sobrecarga e diminui a velocidade no caso de dispositivos conectados localmente. Se você fizer isso via rede, a história pode ser diferente.

    
por 17.08.2016 / 13:57
-1

30 MB / s é uma velocidade muito rápida leitura para uma unidade flash USB3. Escrever é muito mais lento. ( Aqui são alguns exemplos de referência.) O fator limitante não é a conexão USB, mas a física da unidade. E escrever arquivos separados é mais lento que a velocidade de gravação bruta que você vê nos comparativos de mercado: também leva tempo para escrever os metadados.

As velocidades rápidas que você está vendo no começo estão escrevendo para um buffer de gravação em algum lugar. Em algum momento, o buffer fica cheio e, em seguida, a velocidade real de gravação do disco é importante.

Você também pode ver outros efeitos de lentidão, embora, como você está preenchendo apenas 1/4 de uma unidade recém-formatada, não acho que você esteja chegando ao ponto de começar. Se o sistema de arquivos ficar cheio e tiver muitos arquivos deletados, ele pode começar a ficar fragmentado, então demora mais para encontrar um pouco de espaço aqui e ali para os arquivos (isso é um problema com a mídia rotativa, onde ajuda muito ser capaz de armazenar arquivos em grandes blocos consecutivos). Na mídia flash, quando uma fração significativa é usada e foi excluída, os dados são distribuídos entre as células; cada célula precisa ser apagada como um todo, portanto, se muitas células forem parcialmente afetadas por uma gravação, isso é um monte de células para apagar e parcialmente reescrever. Além disso, em mídia rotativa, as velocidades de acesso de dados dependem de quão longe os dados estão do centro, mas em um flash drive eles são os mesmos em todos os lugares.

    
por 18.08.2016 / 02:59