Como obtenho melhores velocidades de transferência USB no (X) ubuntu?

14

Quando conecto minha unidade USB 2.0 ao Xubuntu e tento transferir arquivos grandes, as velocidades de transferência são boas no início, mas caem após alguns segundos para 1-2 Mib / s. Pelo que li, a transferência rápida no início é apenas até que o cache esteja cheio e a velocidade de transferência USB real é usada.

No Windows, a velocidade é constante em cerca de 25 Mb / s, mesmo stick, conectado à mesma porta.

Esta é a saída do dmesg ao conectar o stick:

[ 5237.580084] usb 1-4: new high speed USB device using ehci_hcd and address 6
[ 5237.714318] scsi4 : usb-storage 1-4:1.0
[ 5238.713909] scsi 4:0:0:0: Direct-Access     SanDisk  Cruzer           8.02 PQ: 0 ANSI: 0 CCS
[ 5238.715264] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 5238.727225] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[ 5242.308981] sd 4:0:0:0: [sdb] 31301631 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 5242.309589] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311228] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311238]  sdb: sdb1

O stick é montado automaticamente, aqui está a saída de "mount":

/dev/sdb1 on /media/B82C-6B07 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush)

Eu tenho que usar vfat porque quero transferir arquivos para o meu sistema Playstation3. Embora o teste abaixo mostre que essa não é a causa principal.

Parece que este é um problema comum no (X) ubuntu. Ainda não encontrei uma solução clara. Parece que o stick precisa ser montado como assíncrono em vez de nivelado, mas não sei exatamente como conseguir isso. Não me importo se tiver que desmontar o manche cada vez antes de desconectá-lo, desde que as velocidades de transferência sejam melhores.

Alguma ideia?

2 de novembro: Este relatório de bug parece estar relacionado: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/182931 . O que me preocupa é que o problema parece ter mais de 2 anos e ainda não foi resolvido.

10 de novembro: iniciei um teste de leitura com palimpstest (do projeto gnome-disk-utility). Isso me dá uma taxa de transferência mínima de 23 MBit / s. Também tentei no krusader agora, a velocidade de leitura é constantemente> 20 MBit / s. Então, o problema realmente é apenas escrever no stick!

Aqui está uma imagem de um teste de leitura e gravação no mesmo programa:

insira a descrição da imagem aqui

Eu tive que excluir o sistema de arquivos completamente antes do teste, o que mostra que vfat não é a principal causa, como mencionado acima.

Outra dica: se eu transferir um arquivo de 100 MB, quando estiver em 100%, levará um tempo incomum para concluir a transferência. Mais uma vez, parece-me que o arquivo está realmente em um cache, mas a gravação no dispositivo USB é muito lenta.

12 de novembro: "Boas notícias". Os problemas parecem ser o próprio cartão de memória. Experimentar um disco rígido externo (My Book Elite 1TB) fornece uma velocidade de gravação constante de cerca de 20 MiB / s. Tentei reformatar meu cartão de memória para poder comparar os dois (os sistemas de arquivos eram diferentes). Após a reformatação, as duas unidades são montadas exatamente da mesma maneira:

/dev/sdb1 on /media/My Book type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdc1 on /media/cruzer_ type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

O Cruzer é a alavanca (a velocidade continua caindo após alguns segundos), o My Book é o disco rígido externo com uma velocidade de gravação constante de 20 MiB / s.

Difícil dizer qual é realmente o problema então. Como eu disse, no Windows, também recebo velocidades de gravação igualmente rápidas com o SanCruzer.

Editar no final da recompensa: Infelizmente, o problema com o stick ainda não foi resolvido. No entanto, após 7 dias, quero conceder a recompensa, é claro. O comentário de aking1012 foi realmente útil, pois lançou uma nova luz sobre o assunto. No entanto, sinto que tenho que dar a recompensa ao harrymc, pois ele mostrou o maior esforço possível para resolver o problema. Obrigado a todos.

pgruetter
fonte
1
há uma diferença entre a velocidade de gravação para flash drives e HDs externos verdadeiros ... apenas uma pergunta
RobotHumans
Excelente ideia! Muito obrigado pela dica, veja o resultado na minha atualização (12 de novembro). O problema ainda não está resolvido, mas isso realmente o restringe!
Pgruetter
FWIW, flushé improvável que a opção na sua saída de montagem ajude. Eu acho que é ainda pior do que isso sync.
22414 beldaz

Respostas:

11

O artigo Taxa de transferência lenta de estaragem em massa USB 2.0 sugere que isso pode ser um problema do dispositivo ser montado por padrão com a opção de sincronização:

Você tem um ícone "Dispositivos" na área de trabalho?
Nesse caso, abra-o. Caso contrário, tente abrir a mídia: / no konqueror.

Selecione o dispositivo e depois -> Propriedades -> Montagem (etiqueta) e desmarque a caixa Síncrona. (Isso é lembrado, portanto, você só precisa fazer isso uma vez por dispositivo).


Mais algumas idéias vêm do relatório de erros. Escreva no disco rígido externo, tornando a escrita muito lenta.

  • você muda para async em tempo de execução por 'sudo mount -o remount, async / dev / sda1' (ou qualquer que seja a partição montada)
  • você cria uma entrada fstab para sda que a monta de forma assíncrona (isso requer que o dispositivo esteja sempre conectado na inicialização)
  • você altera 'sync' para 'async' na fonte pmount e reconstrói o pacote

Consulte também a discussão no artigo sobre pmount, se isso se aplicar ao seu sistema.


Outra solução mágica vem da gravação lenta USB 2.0, mas rápida leitura, solução ainda? e envolve remontar:

Quando monto uma unidade USB em / dev / sdc1 com a seguinte linha

/dev/sdc1       /mnt/sdc1     auto    sync,noauto,user,exec     0       0

em / etc / fstab e tente copiar um arquivo de 5,2 MB para a unidade do disco rígido local e depois de um minuto inteiro, 244 KB foram transferidos. Copiar um arquivo de 29 MB da unidade externa para a unidade local leva cerca de 10 segundos.

Então, se eu desmontá-lo, altere a linha em / etc / fstab para

/dev/sdc1       /mnt/sdc1     auto    noauto,user,exec     0       0

a cópia do arquivo de 29 MB no disco externo leva uma fração imperceptível de segundo. O mesmo acontece com a cópia para o disco local do disco externo.


Consulte este artigo e a referência a "usbtree". Diz como verificar se o usb está funcionando como 1.1 ou 2.0:

Linux e USB 2.0 .

harrymc
fonte
Parece que isso é específico para o KDE. Estou usando o XFCE4 (Xubuntu). De qualquer forma, tentei a sugestão, pois o Konquerer está instalado. mídia de abertura: / me dá a exceção "Protocolo não suportado". Alguma outra maneira de descobrir se está montado "assíncrono" ou "sincronizado"?
Pgruetter
Eu adicionei mais um artigo útil.
harrymc
remontar não faz nada. A saída de "mount" ainda é a mesma. Veja minha mensagem inicial para isso. Também tentei montá-lo com pmount agora, obrigado pela sugestão. A ajuda dos estados pmount, que montam async por padrão. Ainda assim, as velocidades de transferência são muito rápidas primeiro e caem após alguns segundos. Estou começando a acreditar que o stick está realmente montado de forma assíncrona, mas o problema está em outro lugar !?
Pgruetter
Adicionada mais uma tentativa.
harrymc
Obrigado harrymc, realmente aprecio seu esforço contínuo. Infelizmente, ainda não há chance. Eu tentei com as configurações mencionadas no / etc / fstab e montando-o. Se eu tentar a opção com sincronização, é ainda pior. Eu ganho apenas cerca de 100-200 Kib / s. Sem a opção de sincronização, ainda é a mesma: rápido no início, caindo para 1-2 MiB / s.
Pgruetter
2

O acesso à unidade geralmente é armazenado em buffer no modo assíncrono. A explosão rápida inicial provavelmente armazenará em cache a memória. A velocidade lenta é a velocidade de gravação real.

Se você tiver um pendrive que pisca durante a transferência, tente alguns testes. Descobri que as gravações podem continuar por um bom tempo após a cópia ser concluída.

A montagem no modo assíncrono, em vez do modo de sincronização, permite que a cópia pareça prosseguir mais rapidamente, mas não oferece a mesma segurança que os dados copiados são realmente transferidos.

Verifique as opções em man mount. Alguns formatos permitem que as atualizações de metadados (diretório, tabela de alocação de arquivos etc.) sejam adiadas. Isso reduzirá a quantidade de dados que precisam ser copiados. Isso aumenta um pouco o risco de perda de dados.

BillThor
fonte
Obrigado pela informação, isso realmente confirma minhas suposições. A unidade pisca constantemente durante a transferência; no entanto, não pisca muito depois da transferência. Eu suspeito que isso seja apenas porque o gerenciador de arquivos ainda está acessando o stick. A segurança não seria um grande problema, estou realmente interessado apenas na velocidade. Interessante sobre os metadados, vou verificar isso. No entanto, você acha que isso vai mudar alguma coisa ao transferir arquivos grandes (500 MiB)?
Pgruetter
Além disso, o que ainda me intriga, por que é muito rápido com o disco rígido externo, mas não com o stick? As opções de montagem são exatamente as mesmas, transferi exatamente o mesmo arquivo de teste.
Pgruetter
1
Uma gravação de 4 KiB em um disco rígido normalmente é uma gravação de 4 KiB, implementada pelo controlador do disco rígido. Uma gravação de 4 KiB na memória Flash normalmente é uma leitura de 128 KiB para algum armazenamento temporário, uma substituição de 4 KiB no deslocamento correto do referido armazenamento temporário, uma operação de apagamento de 128 KiB e uma gravação de 128 KiB, todas as opções acima implementadas pelo Controlador de memória flash. Mais ou menos :)
tzot
1

Então, eu vim para esta página através de uma pesquisa no google sobre o mesmo problema ("o ubuntu 15 acelera a transferência usb") porque minhas transferências estavam rodando a 75kb / s.

Esta foi provavelmente apenas a solução para a minha configuração, mas minha unidade USB 3 de 16 GB foi formatada para GPT fat32, excluí todas as partições, inicializei no MBR, fiz uma única partição NTFS, liguei novamente no meu PC Ubuntu e agora estou transferindo um arquivo de 10 GB acima de 50MB / s. Para mim, problema resolvido.

Servidores Orb
fonte
Confirmou que para o Mint 18.3 (Ubuntu 16.04) a mudança de fat32 para ntfs foi uma grande melhoria.
Raven
0

Precisamos garantir que o sistema tente escrever em programar / apagar blocos de blocos. Com a memória flash moderna, elas geralmente têm 1M a 4M de tamanho. Para fazer isso, você quer ter certeza de que o seu FS está alinhado para apagar blocos, e essa interface permite a transferência de blocos inteira de uma só vez (para varas baratas). Caso contrário, obteríamos amplificação de gravação, pois o sistema tenta escrever em blocos menores do que apagar o bloco (executando leitura / modificação / gravação) + desalinhamento do bloco.

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

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

Você pode ajustar as regras do salão para esses dispositivos. Consulte /unix/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices .

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

(use == para verificar e = para atribuir):

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

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules e adicione:

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

E a velocidade de gravação do dd aumentou 3x vezes :-) mc cp provavelmente 10-20x (após iniciar a primeira partição no setor 8192'th e reformatar com clusters alinhados de 64k):

fdisk -u /dev/sdh (desative o compat DOS se estiver ligado),

mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592**e use fsck.vfat -v /dev/sdh1para verificar o alinhamento (marque [setor de início de dados] deve ser múltiplo de 128 (tamanho do cluster)). Ajuste o número de setores reservados (-R), se necessário.

O max_sectors padrão (240) parece causar alta amplificação de gravação em algumas das novas unidades baratas. Mas tenha muito cuidado com essa configuração alta, o efeito semelhante é alcançado em 2048 setores (provavelmente 1 milhão de blocos de apagamento:

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

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

PS: Se estiver usando ext3 / 4:

Desative o registro no diário e defina stride / stripe_width para mkfs.ext3:

mkfs.ext3 -O ^ has_journal -E stride = [ler blocos fs da página] -E stripe-width = [apagar blocos fs do bloco]

Marca
fonte
0

Eu tive alguns problemas também com a taxa de transferência em um disco externo WD, depois de abri-lo no Windows SO, eu sempre usei o LINUX, depois a taxa de transferência era de 1,5mb / s do que desmontava o disco rígido externo, executei o dmesg lá estava dizendo que o sdb1 estava desmontado, executava um fsck, fazia alguns reparos e, depois disso, 20mb / s de taxa de transferência novamente ao copiar do sda para o disco externo.
"fsck é sempre um risco se você tiver dados, mas funcionou para mim, sem perda de dados"

anymamundy
fonte
0

Verifique, realmente , se o seu dispositivo está conectado a uma porta USB compatível com velocidade máxima.

Embora isso possa parecer bobagem, às vezes as coisas se confundem. Algumas placas-mãe possuem portas de alta e baixa velocidade. Use uma ferramenta como usbview (observe para executá-lo com direitos de superusuário sudo usbview) para verificar se o seu dispositivo está operando a 480 Mb / s (USB 2.0) ou mais.

Por exemplo, quando você normalmente conecta seu dispositivo através de algum cabo de extensão, um hub no monitor etc., pode acontecer - após reconectar os cabos no computador da mesa ou mais - que você acidentalmente conecta o hub a uma velocidade baixa Porta (USB 1.). Em seguida, todos os dispositivos conectados ao hub operam em baixa velocidade, enquanto outros, conectados em outro lugar, operam em alta velocidade. Pode ser muito confuso - e é uma coisa simples de hardware ... Aconteceu comigo uma vez e não está relacionado a nenhum módulo do kernel USB, opções de montagem ou mais.

isync
fonte