¿Cómo obtengo mejores velocidades de transferencia USB en (X) ubuntu?

14

Cuando conecto mi unidad USB 2.0 a Xubuntu e intento transferir archivos grandes, las velocidades de transferencia son buenas al principio, pero caen después de unos segundos a 1-2 Mib / s. Por lo que leí, la transferencia rápida al principio es solo hasta que el caché esté lleno, luego se usa la velocidad de transferencia USB real.

En Windows, la velocidad es constante a aproximadamente 25Mib / s, el mismo dispositivo, conectado al mismo puerto.

Esta es la salida de dmesg al conectar el dispositivo:

[ 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

El stick está montado automáticamente, aquí está la salida 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)

Tengo que usar vfat porque quiero transferir archivos a mi sistema Playstation3. Aunque la prueba a continuación muestra que esta no es la causa principal.

Parece que este es un problema común en (X) ubuntu. Todavía no he encontrado una solución clara. Parece que el dispositivo debe montarse como asíncrono en lugar de al ras, pero no estoy exactamente seguro de cómo lograrlo. No me importa si tengo que desmontar el stick cada vez antes de desconectarlo siempre que las velocidades de transferencia sean mejores.

¿Algunas ideas?

2 de noviembre: este informe de error parece estar relacionado: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/182931 . Lo que me preocupa es que el problema parece tener más de 2 años y aún no está resuelto.

10 de noviembre: comencé una prueba de lectura con palimpstest (del proyecto gnome-disk-utility). Esto me da una tasa de transferencia mínima de 23 MBit / s. También lo probé en krusader ahora, la velocidad de lectura es constantemente> 20 MBit / s. ¡Entonces el problema realmente es solo escribir en el palo!

Aquí hay una imagen de una prueba de lectura y escritura en el mismo programa:

ingrese la descripción de la imagen aquí

Tuve que eliminar el sistema de archivos por completo antes de la prueba que muestra que vfat no es la causa principal como se mencionó anteriormente.

Otra pista: si transfiero un archivo de 100 MB, una vez que esté al 100%, se tarda mucho tiempo en terminar la transferencia. Esto nuevamente me parece que el archivo está en una memoria caché, pero escribir en el dispositivo usb es muy lento.

12 de noviembre: "Buenas noticias". Los problemas parecen ser la memoria en sí. Probar un disco duro externo (My Book Elite 1TB) me da una velocidad de escritura constante de aproximadamente 20 MiB / s. Primero traté de formatear mi tarjeta de memoria para poder realmente comparar los dos (los sistemas de archivos eran diferentes). Después de formatear, ambas unidades se montan exactamente de la misma manera:

/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)

Cruzer es el stick (la velocidad sigue bajando después de unos segundos), My Book es el disco duro externo con una velocidad de escritura constante de 20 MiB / s.

Es difícil decir cuál es realmente el problema entonces. Como dije, en Windows también obtengo velocidades de escritura igualmente rápidas con el SanCruzer.

Editar al final de la recompensa: desafortunadamente, el problema con el palo todavía no está resuelto. Sin embargo, después de 7 días, quiero otorgar la recompensa, por supuesto. El comentario de aking1012 fue realmente útil, ya que arrojó una nueva luz sobre el asunto. Sin embargo, siento que tengo que darle la recompensa a harrymc, ya que demostró el mayor esfuerzo para resolver el problema. Gracias a todos.

pgruetter
fuente
1
¿hay alguna diferencia entre la velocidad de escritura para unidades flash y los discos duros externos verdaderos ... solo una pregunta
RobotHumans
¡Excelente idea! Muchas gracias por el consejo, vea el resultado en mi actualización (12 de noviembre). El problema aún no está resuelto, ¡pero esto realmente lo reduce!
pgruetter
FWIW, la flushopción en su salida de montaje es poco probable que ayude. Creo que eso es aún peor que sync.
beldaz

Respuestas:

11

El artículo La velocidad de transferencia de almacenamiento masivo lento USB 2.0 sugiere que esto podría ser un problema de que el dispositivo se monte de forma predeterminada con la opción de sincronización:

¿Tiene un icono de "Dispositivos" en su escritorio?
Si es así, ábralo. Si no, intente abrir los medios: / en konqueror.

Seleccione el dispositivo y luego -> Propiedades -> Montaje (etiqueta) y desactive la casilla Síncrono. (Esto se recuerda, por lo que solo debe hacerlo una vez por dispositivo).


Algunas ideas más provienen del informe de errores Escritura en un disco duro externo que hace que la escritura sea muy lenta

  • cambia a asíncrono en tiempo de ejecución mediante 'sudo mount -o remount, async / dev / sda1' (o lo que sea que sus particiones montadas sean / son)
  • crea una entrada fstab para sda que lo monta de forma asíncrona (esto requiere que el dispositivo esté siempre conectado en el momento del arranque)
  • cambia 'sync' a 'async' en la fuente pmount y reconstruye el paquete

Consulte también la discusión en el artículo sobre pmount, si esto se aplica a su sistema.


Otra solución mágica proviene de USB 2.0 de escritura lenta pero lectura rápida, ¿solución todavía? e implica volver a montar:

Cuando monte una unidad USB en / dev / sdc1 con la siguiente línea

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

en / etc / fstab e intente copiar un archivo de 5.2 MB a la unidad desde el disco duro local, luego de un minuto entero, se han transferido 244 KB. La copia de un archivo de 29 MB desde la unidad externa a la unidad local lleva unos 10 segundos.

Luego, si lo desmonto, cambie la línea en / etc / fstab a

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

luego, copiar el archivo de 29 MB en el disco externo toma una fracción imperceptible de un segundo. Lo mismo con copiar en el disco local desde el disco externo.


Consulte este artículo y la referencia a "usbtree". Indica cómo verificar si el usb funciona como 1.1 o 2.0:

Linux y USB 2.0 .

harrymc
fuente
Parece que esto es específico para KDE. Estoy usando XFCE4 (Xubuntu). Intenté la sugerencia de todos modos, ya que Konquerer está instalado. medios de apertura: / me da la excepción "Protocolo no compatible". ¿De alguna otra manera puedo averiguar si está montado "async" o "sync"?
pgruetter
Agregué un artículo más útil.
harrymc
remontar no hace nada. La salida de "mount" sigue siendo la misma. Vea mi mensaje inicial para ello. También intenté montarlo con pmount ahora, gracias por la sugerencia. La ayuda de pmount afirma que monta asíncrono de forma predeterminada. Aún así, las velocidades de transferencia son muy rápidas primero y caen después de unos segundos. Estoy empezando a creer que el dispositivo está realmente montado de forma asíncrona, pero el problema está en otro lado.
pgruetter
Se agregó un intento más.
harrymc
Gracias harrymc, realmente aprecio tu esfuerzo continuo. Lamentablemente, todavía no es una oportunidad. Lo probé con la configuración mencionada en / etc / fstab y lo monté. Si pruebo la opción con sincronización, es aún peor. Solo obtengo alrededor de 100-200 Kib / s. Sin la opción de sincronización, sigue siendo la misma: rápido al principio, bajando a 1-2 MiB / s.
pgruetter
2

El acceso a la unidad generalmente se almacena en modo asíncrono. Es probable que la ráfaga rápida inicial llegue a la memoria caché. La velocidad lenta es la velocidad de escritura real.

Si tiene una memoria USB que parpadea durante la transferencia, pruebe algunas pruebas. Descubrí que las escrituras pueden continuar durante bastante tiempo después de que se complete la copia.

El montaje en modo asíncrono en lugar del modo de sincronización permite que la copia parezca avanzar más rápido, pero no le brinda la misma seguridad de que los datos copiados realmente se transfieren.

Verifique las opciones en man mount. Algunos formatos permiten diferir las actualizaciones de metadatos (directorio, tabla de asignación de archivos, etc.). Esto reducirá la cantidad de datos que deben copiarse. Esto aumenta ligeramente el riesgo de pérdida de datos.

BillThor
fuente
Gracias por la información, esto realmente confirma mis suposiciones. La unidad parpadea constantemente durante la transferencia, sin embargo, no parpadea mucho después de la transferencia. Sospecho que esto solo se debe a que el administrador de archivos todavía está accediendo al dispositivo. La seguridad no sería un gran problema, solo estoy interesado en la velocidad. Interesante sobre los metadatos, lo comprobaré. Sin embargo, ¿crees que esto cambiará algo al transferir archivos grandes (500 MiB)?
pgruetter
Además, lo que aún me desconcierta, ¿por qué es muy rápido con el disco duro externo pero no con el dispositivo? Las opciones de montaje son exactamente las mismas, transferí exactamente el mismo archivo de prueba.
pgruetter
1
Una escritura de 4 KiB en un disco duro suele ser una escritura de 4 KiB, implementada por el controlador del disco duro. Una escritura de 4 KiB en una memoria Flash es típicamente una lectura de 128 KiB en algún almacenamiento temporal, una sobrescritura de 4 KiB en el desplazamiento correcto de dicho almacenamiento temporal, una operación de borrado de 128 KiB y una escritura de 128 KiB, todo lo anterior implementado por el Controlador de memoria flash. Más o menos :)
tzot
1

Así que llegué a esta página a través de una búsqueda en Google del mismo problema ("ubuntu 15 acelerar la transferencia usb") porque mis transferencias se estaban ejecutando a 75kb / s.

Esta fue probablemente solo la solución para mi configuración, pero mi unidad USB 3 de 16 GB fue formateada a GPT fat32, eliminé todas las particiones, las inicialicé en MBR, hice una única partición NTFS, la volví a conectar a mi PC Ubuntu y ahora está transfiriendo un archivo de 10 GB a más de 50 MB / s. Para mí, problema resuelto.

Servidores de orbes
fuente
Confirmó que para Mint 18.3 (Ubuntu 16.04) cambiar de fat32 a ntfs fue una mejora masiva.
Cuervo
0

Necesitamos asegurarnos de que el sistema intente escribir en el programa / borrar bloques de bloques. Con memoria flash moderna, generalmente tienen un tamaño de 1M-4M. Para hacer esto, debe asegurarse de que su FS esté alineado para borrar bloques, y esa interfaz permite la transferencia completa de bloques de una sola vez (para palos baratos). De lo contrario, obtendríamos amplificación de escritura, ya que el sistema intenta escribir en fragmentos que son más pequeños, que borrar bloque (haciendo lectura / mod / escritura) + desalineación de bloque.

Para verificar su configuración actual, haga lo siguiente:

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

Puede ajustar las reglas del pasillo para esos dispositivos. Ver /unix/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices .

En este caso, reemplacé max_sectors para todos los dispositivos, que usaban el valor predeterminado de 240 (almacenamiento USB) a 32K sectores o 2K sectores:

(use == para verificar y = para asignar):

En mi sistema (Mageia 4, 3.14.24 core i7) tuve que hacer esto debido a velocidades de escritura terriblemente lentas (2MB / seg) en Kingston DT101 G2 16GB:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules y añadir:

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

Y la velocidad de escritura de dd aumentó 3 veces :-) mc cp probablemente 10-20x (después de que comencé la primera partición en el sector 8192 y reformateé con clústeres alineados de 64k):

fdisk -u /dev/sdh (haga que DOS sea compatible si está activado),

mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592**y se usa fsck.vfat -v /dev/sdh1para verificar la alineación (la verificación [sector de inicio de datos] debe ser múltiplo de 128 (tamaño del clúster)). Ajuste el número de sectores reservados (-R) si es necesario.

Los max_sectors predeterminados (240) parecen causar una gran amplificación de escritura en algunas de las nuevas unidades baratas. Pero tenga mucho cuidado con una configuración tan alta, el efecto similar se logra en 2048 sectores (probablemente bloques de borrado de 1M:

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

Pruebe todos sus dispositivos USB antiguos, que todavía funcionan bien. Utilice los atributos de proveedor / modelo en los archivos de reglas para ser más específico.

PD: si usa ext3 / 4:

Deshabilite el registro en diario y establezca stride / stripe_width para mkfs.ext3:

mkfs.ext3 -O ^ has_journal -E stride = [leer página fs blocks] -E stripe-width = [borrar bloques fs block]

marca
fuente
0

Tuve algunos problemas también con la velocidad de transferencia en un disco externo WD, después de abrirlo en Windows SO, siempre usé LINUX, después de eso la velocidad de transferencia fue de 1.5mb / s que desmonte el disco duro externo, ejecuté dmesg allí estaba diciendo que sdb1 estaba desmontado de forma inadecuada, ejecutó un fsck, que realizó algunas reparaciones y después de eso 20mb / s de velocidad de transferencia nuevamente cuando se copian de sda ​​a disco externo.
"fsck siempre es un riesgo si tienes datos, pero funcionó para mí, sin pérdida de datos"

anymamundy
fuente
0

Verifique, realmente verifique , que su dispositivo esté conectado a un puerto USB que admita velocidad máxima.

Aunque esto puede sonar tonto, a veces las cosas se mezclan. Algunas placas base tienen puertos de alta y baja velocidad. Use una herramienta como usbview (nota para ejecutarlo con derechos de superusuario sudo usbview) para verificar que su dispositivo esté funcionando a 480Mb / s (USB 2.0) o más.

Por ejemplo, cuando normalmente conecta su dispositivo a través de un cable de extensión, un concentrador en su pantalla, etc., puede ocurrir, después de volver a enchufar los cables en su computadora de escritorio o algo así, que accidentalmente enchufó el concentrador a baja velocidad (USB 1.) puerto. Entonces, cualquier dispositivo conectado al concentrador funcionará a baja velocidad, mientras que otros, enchufados en otro lugar, funcionarán a alta velocidad. Puede ser muy confuso, y es una cosa de hardware simple ... Me sucedió una vez, y no está relacionado con ningún módulo del kernel USB, opciones de montaje, etc.

isync
fuente