Gnome, nautilus copiar arquivos para USB pára em 100% ou perto

16

Eu tive problemas semelhantes antes, mas não lembro como resolvi isso.

Quando eu tento copiar algo para um stick USB, com o FAT, ele pára perto do fim, às vezes em 100%. E, claro, quando eu transfiro o cartão de memória para outro lugar, ele não contém o arquivo completo. (arquivo é um filme!)

Tentei montar o dispositivo com o mount -o flush, mas recebo o mesmo problema.

Além disso, eu formatei o pendrive com a nova partição FAT ...

Alguma ideia do frio que eu faço?

p.s. Eu acredito que não está relacionado ao sistema operacional, que é o Debian, e eu acredito que o enfrentamento da unidade SSD não o deixa preso.

    
por mariotanenbaum 24.01.2015 / 15:38

1 resposta

24

O motivo pelo qual isso acontece é que o programa diz "write this data" e o kernel do linux o copia para um buffer de memória que está na fila para ir ao disco e depois diz "ok, pronto". Então o programa acha que copiou tudo. Então o programa fecha o arquivo, mas de repente o kernel faz com que ele aguarde enquanto o buffer é enviado para o disco.

Então, infelizmente, o programa não pode dizer quanto tempo levará para liberar o buffer porque ele não sabe.

Se você quiser experimentar alguns truques de usuário avançado, poderá reduzir o tamanho do buffer que o Linux usa definindo o parâmetro de kernel vm.dirty_bytes para algo como 15000000 (15 MB). Isso significa que o aplicativo não pode ficar com mais de 15 MB à frente de seu progresso real. (Você pode alterar os parâmetros do kernel rapidamente com sudo sysctl vm.dirty_bytes=15000000 , mas fazê-los permanecer em uma reinicialização requer a alteração de um arquivo de configuração como /etc/sysctl.conf , que pode ser específico para sua distribuição.)

Um efeito colateral é que seu computador pode ter uma taxa de transferência de dados mais baixa com essa configuração, mas, no geral, acho útil ver que um programa está sendo executado por muito tempo enquanto ele grava muitos dados versus a confusão de ter um programa parece ser feito com o seu trabalho, mas o sistema está atrasado mal como o kernel faz o trabalho real. Definir dirty_bytes como um valor razoavelmente pequeno também pode ajudar a evitar que o seu sistema pare de responder quando você estiver com pouca memória livre e executar um programa que, de repente, grava muitos dados.

Mas não o defina muito pequeno! Eu uso 15MB como uma estimativa aproximada de que o kernel pode liberar o buffer para um disco rígido normal em 1/4 de segundo ou menos. Isso evita que meu sistema fique "lento".

    
por 27.01.2015 / 02:37