Arquivos copiados para pendrive corrompendo no Linux


Um dos grandes problemas no GNU/Linux é transferir arquivos, devido existir um desentendimento entre os ambientes gráficos e o kernel, os usuários acabam retirando o pendrive antes do tempo e consequentemente corrompe os arquivos.

Arquivos copiados para pendrive corrompendo no Linux

O que causa corromper arquivos copiados para um pendrive é remover o dispositivo antes que de fato a transferência tenha acabado.
Nessa matéria explico como funciona a transferência de arquivos no Linux e como você aprender a identificar quando de fato uma transferência foi encerrada e o seu dispositivo pode ser removido.

Lentidão para transferir arquivos

De uma forma bem abreviada, a lentidão é causada devido ao armazenamento dos dados em cache de memória ram.

Os valores que iremos alterar aqui são os de.

vm.dirty_background_ratio é a porcentagem de memória do sistema que pode ser usada para o cache.

vm.dirty_ratio é a quantidade máxima absoluta de memória do sistema que pode ser usada para o cache.

Mais detalhes nessa documentação.

Experimento 1


Nesse experimento o sistema está sem nenhuma modificação, podemos ver que a taxa de Dirty começa a cair assim que todo o arquivo é copiado, mas ainda permanece em cache, a cópia só termina quando a taxa de Dirty zera, isso pode não ser mostrado em algumas interfaces gráficas, o que leva o usuário a remover o pendrive antes que a cópia de fato tenha terminado.





Experimento 2 (Recomendado)


Nesse experimento diminui os padrões da taxa de dirty para os valores abaixo.

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Aqui podemos notar que o dirty é inalterado, mas temos uma leitura e escrita no pendrive de forma uniforme, assim que a leitura em disco cai perto dos 3:20 minutos o dirty automaticamente começa a cair permanecendo apenas a escrita no pendrive. O ganho de tempo total da transferência é insignificante.

Aplicação


Pra aplicar a configuração abra o terminal e de os comandos na sequencia.

sudo nano /etc/sysctl.conf

Adicione as duas linhas abaixo no final do arquivo aberto.

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Salve teclando Ctrl + x tecle s e tecle Enter para fechar.

Carregue as novas configurações com o comando.

sudo sysctl -p







Experimento 3 


Nesse experimento diminui os padrões da taxa de dirty para os valores abaixo.

vm.dirty_background_ratio = 2
vm.dirty_ratio = 5


Podemos notar uma diminuição drástica da taxa de dirty, que nos deu um ganho significativo de 1 minuto a menos no tempo total da transferência.


Aplicação


Pra aplicar a configuração abra o terminal e de os comandos na sequencia.

sudo nano /etc/sysctl.conf

Adicione as duas linhas abaixo no final do arquivo aberto.

vm.dirty_background_ratio = 2
vm.dirty_ratio = 5

Salve teclando Ctrl + x tecle s e tecle Enter para fechar.

Carregue as novas configurações com o comando.

sudo sysctl -p





OBS: Só use um dos experimentos 2 ou 3, não use os dois ao mesmo tempo. E para desfazer a alteração apague as linhas que adicionamos ao /etc/sysctl.conf
 
Vale lembrar que valores muito baixos para o dirty pode causar instabilidade no sistema e corromper os arquivos copiados. Nesse caso a .iso foi copiada sem problema algum, test de MD5 OK.




Testes feitos com os componentes abaixo.

Sistema operacional Debian Testing

Ambiente gráfico KDE Plasma

Pendrive SanDisk - Cruzer Blade

Opinião


No meu caso em particular, eu não vejo motivos para eu fazer alterações no sistema para  melhorar a transferência. Mas cada caso é um caso, portanto se para você é necessário, faça, mas realize testes ara confirmar se os dados não estão corrompendo e não baixe de mais os valores dirty, zero pode comprometer o sistema, leia a documentação postada acima.


Comentários

  1. Também não vejo motivos para alterar o comportamento do sistema. Para saber se o arquivo foi totalmente transferido para o pendrive, costumo usar o comando sync.

    ResponderExcluir
  2. Fiz um teste prático com as recomendações da página e comparei com os que eu usava:

    Cópia de arquivo (mkv) de 2GB para cartão SD:

    vm.dirty_background_ratio = 2
    vm.dirty_ratio = 5

    TEMPO DE CÓPIA: 3m53 (a impressão é que a cópia terminou 1h30 antes, pq apareceu a miniatura do vídeo, mas disso até a barra de progresso sumir se passou mais de 1 minuto).


    vm.dirty_background_bytes = 16777216
    vm.dirty_bytes = 50331648

    TEMPO DE CÓPIA: 3m50. A barra de progresso sumiu assim que a cópia terminou.

    Config da máquina:
    Sistema operacional: Linux Mint
    Ambiente gráfico Cinnamon
    Cartão micro SDHC SanDisk Ultra Class 10 32GB

    ResponderExcluir

Postar um comentário

olá, seja bem vindo ao Linux Dicas e suporte !!

Você precisa ver isso

Todos os arquivos do blog

Mostrar mais