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.
Pra aplicar a configuração abra o terminal e de os comandos na sequencia.
Adicione as duas linhas abaixo no final do arquivo aberto.
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
Nesse experimento diminui os padrões da taxa de dirty para os valores abaixo.
vm.dirty_background_ratio = 2
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.
Pra aplicar a configuração abra o terminal e de os comandos na sequencia.
Adicione as duas linhas abaixo no final do arquivo aberto.
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
vm.dirty_ratio = 10
Salve teclando Ctrl + x tecle s e tecle Enter para fechar.
Carregue as novas configurações com o comando.
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.
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
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.
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.
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.
ResponderExcluirFiz um teste prático com as recomendações da página e comparei com os que eu usava:
ResponderExcluirCó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