Por que meu PC está congelando enquanto copio um arquivo para um pendrive?

51

Eu tenho uma situação muito estranha aqui. Meu PC funciona bem, pelo menos na maioria dos casos, mas há uma coisa com a qual não posso lidar. Quando eu tento copiar um arquivo do meu pendrive, tudo está ok - eu tenho 16-19M / s, funciona muito bem. Mas quando tento copiar algo para o mesmo pendrive, meu PC congela. O ponteiro do mouse para de se mover por um segundo ou dois, depois se move um pouco e para novamente. Quando algo está sendo reproduzido, por exemplo, no Amarok, o som funciona como uma metralhadora. A velocidade salta de 500K / s para 15M / s, em média 8M / s. Isso ocorre apenas quando estou copiando algo para um pendrive. Quando o processo de cópia é feito, tudo volta ao normal.

Eu tentei de tudo - outro pendrive, uma porta USB diferente no painel frontal ou essas portas de trás, eu até mudei os pinos USB na placa-mãe (painel frontal), mas não importa onde eu coloque meu pendrive, é sempre o mesmo. Eu tentei um sistema de arquivos diferente - fat32 , ext4 . Eu não tenho nenhum problema com o dispositivo no Windows, no meu laptop. Tem que ser meu PC ou algo no meu sistema. Eu não tenho ideia do que procurar. Estou usando o teste Debian com o Openbox independente. Meu PC é meio velho - Pentium D 3GHz, 1GiB de RAM, disco WDD de 1,5 TB. Se você tem algo que me ajudaria a resolver esse problema, ficaria feliz em saber disso.

Eu não sei o que mais informações devo fornecer, mas se você precisar de algo, é só pedir, atualizarei este post o mais rápido possível.

Eu tentei reproduzir esse problema no ubuntu 13.04 live cd. Montei minha partição criptografada + troca criptografada e conectei meu pendrive a uma porta usb. Em seguida, tentei iniciar alguns aplicativos e agora tenho ~ 820MiB em RAM e cerca de 400MiB em SWAP. Não há problema com cópia, sem congelamento, tudo é como deveria ser. Então, parece que é uma falha do sistema, mas onde exatamente? O que causaria um comportamento tão estranho?

    
por Mikhail Morfikov 03.01.2014 / 16:10

3 respostas

72

Você está usando uma versão de 64 bits do Linux com muita memória? Nesse caso, o problema poderia ser que o Linux pode bloquear por minutos em grandes gravações em dispositivos lentos como para exemplo cartões SD ou pendrives. É um bug conhecido que deve ser corrigido em novos kernels.

Veja link

Solução alternativa: como problema raiz:

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

Eu adicionei-o ao meu arquivo /etc/rc.local em minhas máquinas de 64 bits.

TANSTAAFL ; Essa alteração pode (e provavelmente irá) reduzir sua taxa de transferência para esses dispositivos - é um compromisso entre latência e velocidade. Para voltar ao comportamento anterior, você pode

echo 0 > /proc/sys/vm/dirty_background_bytes
echo 0 > /proc/sys/vm/dirty_bytes

... que são os valores padrão, o que significa que o comportamento de write-back será controlado pelos parâmetros dirty_ratio e dirty_background_ratio .

Nota para os não-tão-especialistas-com-linux: os arquivos em /proc são pseudofiles --- apenas canais de comunicação entre o kernel e o espaço do usuário. Nunca use um editor para mudar ou olhar para eles; Em vez disso, obtenha um prompt de shell - por exemplo, com sudo -i (tipos do Ubuntu) ou su root e use echo e cat ).

Atualização 2016/04/18 parece que, afinal, o problema ainda está aqui. Você pode olhar para isto em LWN.net , em isto artigo sobre filas de write-back .

    
por 03.01.2014 / 19:39
3

O motivo pode ser a amplificação de gravação, já que o sistema tenta escrever em blocos menores, do que o bloco de apagamento (leitura / mod / gravação) + desalinhamento de bloco.

Para verificar sua configuração atual, faça o seguinte:

cat /sys/block/sd**X**/device/max_sectors

Você pode ajustar as regras do salão para esses dispositivos:

Change value of USB "max_sectors" for an entire family of devices

Nesse caso, eu havia substituído max_sectors para todos os dispositivos, que usavam o padrão de 240 (armazenamento USB) para setores de 32K ou setores 2K.

No meu sistema (Mageia 4, 3.14.24 core i7) eu tive que fazer isso devido a velocidades de gravação terrivelmente baixas (2MB / seg) no Kingston DT101 G2 16GB:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules

e adicione:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="32678"

E a velocidade de gravação de dd aumentou 3 vezes. mc cp provavelmente 10-20x acima (depois de eu ter começado o primeiro setor da partição @ 8192'e reformatado com 64k clusters alinhados):

fdisk -u /dev/sdh # make DOS compat off if on
mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592*** and use *fsck.vfat -v /dev/sdh1

para verificar o alinhamento (verifique [data start sector] deve ser múltiplo de 128 (tamanho do cluster)). Ajuste o número dos setores reservados (-R), se necessário.

Os max_sectors padrão (240) parecem causar alta amplificação de gravação em algumas das novas unidades baratas. Mas tenha muito cuidado com essa configuração alta, o efeito similar é alcançado em 2048 setores (provavelmente 1M apaga blocos:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="2048"

Teste todos os seus dispositivos USB antigos, que eles ainda funcionam bem. Use atributos de fornecedor / modelo nos arquivos de regras para serem mais específicos.

    
por 27.05.2015 / 18:32
1

hardware vs. software

Eu me deparei com um problema estranho semelhante a este com pen drives USB, e na minha pesquisa quase sempre é um problema de driver ou o hardware específico dentro do PC / Motherboard.

Eu sei disso porque eu tenho vários sistemas que são hardware idênticos e, em um deles, posso fazer essa operação sem problemas, enquanto em outro o problema aparece.

O que fazer?

Suas opções são muito limitadas aqui. As únicas coisas que você pode fazer é ter o BIOS / firmware mais recente instalado em seu sistema e ter as versões mais recentes dos pacotes do seu disto.

Além disso, tudo que posso sugerir é garantir que você evite essa situação, não tentando copiar arquivos enquanto outra cópia estiver em andamento.

Se você tem o tipo de personalidade em que coisas como essa irritam você, você pode tentar outra distro ao vivo do Linux e repetir os passos que levam ao seu problema. Isso eliminaria apenas se é um problema específico da distribuição ou um problema de hardware, como descrevi acima. Seria um pequeno consolo, mas eu sempre gosto de saber coisas em vez de enterrar minha cabeça na areia, e não.

Mais alguma coisa?

Se você for realmente obsessivo, tente executar o aplicativo em que está fazendo a cópia com strace , na esperança de capturar o sistema em qualquer chamada de sistema que esteja congelando. Você deve ser capaz de fazer isso a partir da linha de comando também.

Exemplo

$ strace -o cp1.log cp -r /path/to/dir1 /path/to/usb/. 

Então, enquanto isso está começando, comece outro.

$ strace -o cp2.log cp -r /path/to/dir2 /path/to/usb/. 

O sistema esperará congelar durante esta operação e talvez você tenha sorte e encontre alguma fumaça em qualquer um desses arquivos de log.

    
por 03.01.2014 / 17:27