Como posso diminuir o rsync?

33

Estou tentando copiar o conteúdo de um pen drive USB com falha. Se eu ler os dados muito rápido, o chip do controlador superaquece e a unidade desaparece do sistema. Quando isso acontecer, preciso desconectar a unidade, esperar um minuto para que ela esfrie, conecte-a novamente e reinicie a cópia.

Eu tenho um backup antigo do conteúdo da unidade, portanto, a maneira óbvia de obter o restante dos dados é usar rsync para atualizar o backup, mas isso é executado em toda a "leitura" muito rápido, a unidade desaparece, e eu preciso recomeçar "problema". Existe uma maneira de informar rsync para ler apenas X megabytes de dados por minuto? Alternativamente, é possível dizer a ele para suspender as operações quando a unidade desaparecer e retomar quando ela for conectada novamente?

    
por Mark 28.12.2016 / 00:15

4 respostas

42

Ao contrário da experiência do DopeGhoti, o --bwlimit flag limita a transferência de dados, com o meu rsync (v3.1.2).

teste:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(nota: minha saída time parece diferente da maioria das invocações time ( zsh feature), esses tempos não foram editados por mim)

Mais, talvez algo na linha de um duplo -exec em find . Acredito que rsync -R deve criar & copie as pastas pai, mas se isso não acontecer, então cp --parents deve.

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

Nota : verifique também ddrescue , pode estar certo o que procura para:)

    
por 28.12.2016 / 03:04
25

Um pouco de uma solução MacGyver, mas tive sucesso com ela no passado:
Coloque um antigo hub USB 1 entre o stick e o computador. De jeito nenhum vai copiar rápido desse jeito: -)

Outra possibilidade: Se você tiver outro stick disponível, coloque-o em outra porta USB conectada ao mesmo hub raiz (para que ele compartilhe a largura de banda com o problema). Agora inicie uma grande operação de gravação no bastão extra para que ambos os bastões estejam competindo pela largura de banda. Para maior controle, você pode usar ionice para diminuir ainda mais a prioridade no stick de problemas.

    
por 28.12.2016 / 15:25
13

Você pode usar rsync --bwlimit=RATE para acelerar a velocidade de transferência de arquivos que, com base nos comentários abaixo, parece funcionar especificamente ao limitar a velocidade de leitura dos dados, que é precisamente o que você está procurando.

    
por 28.12.2016 / 00:17
8

Mais soluções, além do rsync --bwlimit=100 , para 100KiB / s.

  1. Use ddrescue com a opção --max-read-rate para uma cópia completa do disco. Isso também permitirá que você reinicie uma cópia completa do disco de onde parou após um erro.

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescue também tem muitas outras opções relevantes para a recuperação de dados, consulte o manual aqui .

  1. Use pv ("visualizador de tubos") com a opção --rate-limit ou a ferramenta throttle para classificar os tubos de limite. pv também pode mostrar progresso. Você pode fazer este trabalho para qualquer ferramenta que use um tubo ou pode usar um tubo:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    ou

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    Dê uma olhada na página de manual pv para mais configurações e exemplos. Para throttle , você pode querer também experimentar a opção -w , que determina como a velocidade é calculada, veja o acelerador manpage .

por 29.12.2016 / 11:37

Tags