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 da unidade superaquecerá e a unidade desaparecerá do sistema. Quando isso acontece, preciso desconectar a unidade, aguardar mais ou menos um minuto para que ela esfrie, reconectá-la e reiniciar a cópia.
Eu tenho um backup antigo do conteúdo da unidade, então a maneira óbvia de obter o restante dos dados é usar rsync
para atualizar o backup, mas isso ocorre em toda a leitura "muito rápido, a unidade desaparece e preciso começar de novo ". Existe uma maneira de dizer rsync
para ler apenas X megabytes de dados por minuto? Como alternativa, é possível pedir para suspender as operações quando a unidade desaparecer e continuar quando for reconectada?
Respostas:
Diferentemente da experiência do DopeGhoti, a
--bwlimit
flag limita a transferência de dados, com o meu rsync (v3.1.2).teste:
(nota: minha
time
saída parece diferente da maioria dastime
chamadas (zsh
recurso), esses horários não foram editados por mim)Else, talvez algo ao longo das linhas de um duplo
-exec
nofind
. Eu acredito quersync -R
deve criar e copiar as pastas pai, mas se não, entãocp --parents
deve.Nota : verifique também ddrescue , pode estar certo o que você está procurando :)
fonte
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
nenhuma menção à rede. A navegação casual do código limita a velocidade de leitura , independentemente do destino. Além disso, anedota: uso esta opção há anos para limitar a velocidade de gravação local para local. linux.die.net/man/1/rsyncio.c
, linhas 832-3:if (bwlimit_writemax) sleep_for_bwlimit(n);
De qualquer forma, isso provavelmente funcionaria como pretendido, lendo em pequenas rajadas e dormindo no meio. Eu recomendaria começar com um valor baixo e aumentar cuidadosamente, ou apenas deixar a lenta transferência passar da noite para o dia.Um pouco de uma solução MacGyver, mas tive um bom sucesso com ela no passado:
coloque um hub USB 1 antigo entre o stick e o computador. De jeito nenhum ele vai copiar rápido dessa maneira :-)
Outra possibilidade: se você tiver outro stick disponível, coloque-o em outra porta USB conectada ao mesmo hub raiz (para compartilhar a largura de banda com o stick com problema).
Agora inicie uma grande operação de gravação no stick extra, para que ambos estejam competindo pela largura de banda. Para maior controle, você pode usar o ionice para diminuir ainda mais a prioridade no stick do problema.
fonte
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 é exatamente o que você está procurando.fonte
ionice
? linux.die.net/man/1/ionice--bwlimit
define o limite de E / S, não necessariamente um limite de rede . Testado várias vezes em vários cenários: essa opção faz com que o rsync se limite à leitura , independentemente do destino. (Descobri isso em um cenário semelhante, onde as gravações rápidas para um dispositivo local lento fez falhar)Além de soluções, além
rsync --bwlimit=100
de 100KiB / s.Use
ddrescue
com a--max-read-rate
opção para uma cópia completa do disco. Isso também permitirá que você reinicie uma cópia completa do disco, onde parou após um erro.ddrescue
também possui muitas outras opções relevantes para a recuperação de dados, consulte o manual aqui .Use
pv
("visualizador de tubos") com a--rate-limit
opção ou athrottle
ferramenta para classificar tubos limite.pv
também pode mostrar progresso. Você pode fazer isso funcionar para qualquer ferramenta que use um tubo ou um tubo:ou
Dê uma olhada na página de manual pv para mais configurações e exemplos. Para
throttle
, você também pode experimentar a-w
opção, que determina como a velocidade é calculada, consulte a página de manual do acelerador .fonte
pv
manpage tem ainda mais exemplos de vários usos.pv
repetidamente desde que descobri nos dias de gravação de fitas. Voltar quando o tar gravou em unidades de fita. :)