Linux: Sistema trava ao transferir arquivos via USB? Saiba como corrigir

78726992b Linux: Sistema trava ao transferir arquivos via USB? Saiba como corrigir Dicas

Nos últimos dois anos, experimentei um problema muito estranho ao tentar transferir arquivos grandes — acima de 2 Gb — para dispositivos USB usando o Ubuntu Linux. No meio da transferência, o sistema começava a dar sinais de lentidão e, ao poucos, ficar impossível de utilizar até que o arquivo fosse completamente movido.

Dando uma rápida olhada no Monitor do Sistema do Gnome, era possível notar que a memória RAM nunca passava dos 50% e o uso do CPU, 30-40%. Não poderia ser um problema de hardware, então, depois de muita dor de cabeça com este problema, resolvi pesquisar se mais alguém estava passando pelo mesmo.

De acordo com este bug report no Launchpad, o problema seria — e eu vou fazer um resumo bem porco aqui — o excesso de cache na memória RAM em blocos (“dirty pages”) criados para evitar que grandes arquivos sejam corrompidos durante o processo de transferência no Linux. Esse processo, que roda em background, copia pequenas partes do arquivo para a memória antes de realmente transferi-los para o pendrive ou disco rígido externo. É por isso que você não pode simplesmente remover o pendrive da entrada USB logo após uma transferência ser completada: o cache ainda está sendo escrito no dispositivo.

Resolver este problema é bem simples. Diminuir a taxa de dirty pages ajuda a memória a trabalhar melhor com a transferência de arquivos para dispositivos com velocidade de gravação muito lenta, mas você pode experimentar uma perda relativa de velocidade — nos meus testes, a diferença foi de ~12%, o que considero uma oscilação irrelevante.

O procedimento é o seguinte: Passo 1: Abra o Terminal e cole o código a seguir.

sudo gedit /etc/sysctl.conf

Passo 2: Uma janela do editor Gedit irá abrir com o arquivo sysctl.conf. Depois da última linha, acrescente o seguinte:

# Diminuir taxa de dirty pages
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Passo 3: Salve o arquivo e, de volta ao terminal, cole o código abaixo para recarregar as configurações do sysctl.

sudo sysctl -p

Você pode experimentar e modificar estes valores para números mais altos e analisar a diferença da performance no seu sistema, mas não recomendo diminuí-los ou deixá-los em zero — o que pode ocasionar travamentos em alguns aplicativos e até perda de dados.

Se tiver alguma dúvida ou sugestão sobre este bug ou algo que possa melhorar este texto, deixe um comentário abaixo e ajude outros usuários enfrentando o mesmo problema.

8 Respostas

  1. Poxa cara, achei que nunca ia resolser esse bug chato no elementary, já tinha procurado em vários fóruns, você me salvou!

  2. Eu que pensei que iria perder mais de 100 gb de arquivos que deixo salvo no linux, a maioria sao jogos. mas depois desse tutorial resouvi meu problema, muito obrigado Belenos 😀

  3. Minha unica alternativa foi apelar para o terminal, usando o comando mv, triste. mas é o que tem para hoje D:

  4. Poxa, no meu caso era um simples conflito com o cabo atheros, nao da nem pra acreditar, removi o cabo, e agoraa esta transferindo tranqulilamente, os arquivos de uma HD para outra.

  5. Parabéns, cara, pela sua pesquisa e descoberta !!
    Comigo funcionou direitinho, e ficou até mais inteligente a transferências de vários arquivos simultaneamente. Agora ele distribui mais equitativamente os dados por todos os arquivos, ou seja, no final acho que até ficou mais rápido a transferência geral.
    PARABÉNS, mais uma vez !!

  6. Meu amigo, você realmente me salvou de um mal que eu pensei não me livrar. Fiz conforme sua orientação, e a cópia de arquivos ficou muito rápido.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *