Copiar a la memoria USB realmente lento?

45

Cuando copio archivos al dispositivo USB, tarda mucho más que en Windows (mismo dispositivo USB, mismo puerto), es más rápido que las velocidades de USB 1.0 (1 MB / s) pero mucho más lento que las velocidades de USB 2.0 (12 MB / s). Copiar 1.8GB me lleva más de 10 minutos (debería ser <3 min.) Tengo dos unidades SanDisk Cruzer 8GB idénticas, y tengo el mismo problema con ambas. Tengo un SSD USB de 32 GB súper talento en el puerto vecino y funciona a las velocidades esperadas.

El problema que parece ver en la interfaz gráfica de usuario es que la barra de progreso llega al 90% casi instantáneamente, se completa al 100% un poco más lento y luego se cuelga allí durante 10 minutos. La interrupción de la copia en este punto parece resultar en corrupción al final del archivo. Si espero que se complete, la copia se realiza correctamente.

¿Algunas ideas? Salida de dmesg a continuación:

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk
Eloff
fuente
Linux difiere las escrituras en disco a cambio de realizar otras tareas más rápido. Solo una suposición, intente ejecutar syncy ver si no acelera el proceso. <- no probado pero posible
RobotHumans
eso no tiene sentido que lo diferiría para un tipo de USB pero no para otro. ¿También me parece recordar que las llamadas de Linux se sincronizan cada 30 segundos más o menos? Podría estar desactualizado. Espero que esto sea algún tipo de problema de compatibilidad o controlador ya que depende del tipo de dispositivo.
Eloff
El hecho de ser más rápido en otras unidades USB no está en tu pregunta. Si lo fuera, habría sugerido buscar en hdparm. Por lo tanto, tiene sentido si lo ve desde la perspectiva de alguien que no conoce toda su configuración, pero depende de su pregunta para obtener más detalles
RobotHumans
"Tengo un SSD USB de 32 GB súper talento en el puerto vecino y funciona a las velocidades esperadas". estaba allí, pero bien escondido, lo admito :) Entonces, ¿a qué se refieren estas cosas de hdparm?
Eloff
De acuerdo, SSD y memoria flash no son lo mismo. Pero avanzando, hdparm es una utilidad que le permite establecer las velocidades de acceso / giro para conducir manualmente
RobotHumans

Respuestas:

29

¿Por qué copiar en mi unidad USB es tan lento en Linux (y más rápido en Windows)?

Motivo 1. El almacenamiento en caché de archivos puede hacer que las escrituras parezcan más lentas o más rápidas

El problema que parece ver en la interfaz gráfica de usuario es que la barra de progreso llega al 90% casi instantáneamente, se completa al 100% un poco más lento y luego se cuelga allí durante 10 minutos.

Una cosa que debe comprender es el almacenamiento en caché de archivos. Linux (y Windows) usará RAM, por lo demás "vacía", para almacenar en caché las operaciones de lectura / escritura y hacerlas más rápidas en accesos posteriores. El almacenamiento en caché de las operaciones de copia en dispositivos lentos da como resultado el comportamiento que ve: la "finalización rápida" en realidad está escribiendo en la memoria caché, y luego se ralentiza y se detiene porque el enjuague real de los datos en la memoria caché (sincronización) al dispositivo lento es Tomando mucho tiempo. Si aborta en ese punto, los datos están dañados (como notó) ya que la sincronización nunca terminó.

Dicha copia en Windows puede parecer más rápida (incluidas las velocidades de MB / seg informadas) porque a veces Windows no esperará la sincronización y declarará que el trabajo se completó tan pronto como los datos se escriben en la memoria caché.

Motivo 2. La escritura de muchos archivos, especialmente los pequeños, es lenta

Para copiar 1.8GB

Debido a la forma en que funcionan la memoria flash y los sistemas de archivos, el rendimiento (velocidad) más rápido se logra al escribir archivos muy grandes. Escribir muchos archivos pequeños, o incluso datos mixtos que contengan varios archivos pequeños, puede ralentizar mucho el proceso. Esto también afecta a los discos duros, pero en menor medida.

Motivo 3. No se pueden comparar las velocidades de escritura de una memoria USB y una SSD

Tengo un SSD USB de 32 GB súper talento en el puerto vecino y funciona a las velocidades esperadas.

  • Una memoria USB de gran variedad de jardín generalmente consta de chips de memoria flash que se escriben en serie (secuencialmente) y no tienen caché propia.

  • Un SSD, por otro lado, contiene un controlador que escribe en los chips de memoria flash en paralelo , aumentando el rendimiento en un factor de 2 o más sobre la memoria USB.

    • Si su SSD de 32GB tuviera chips 4x8GB, aún sería 4 veces más rápido que el dispositivo USB en cualquier operación de escritura.
    • El SSD también contiene memoria caché RAM (como discos duros), por lo que puede almacenar rápidamente los datos entrantes en la memoria caché y decirle al sistema operativo que está listo, mientras que aún tiene que escribir esos datos en la memoria flash.
  • Entonces, con un archivo grande, su GB de 32 GB con la estructura 4x que asumimos sería 4 veces más rápido; con muchos archivos pequeños, sería 10 veces más rápido porque podría almacenarlos de forma inteligente en su caché.


En resumen , estas son las razones por las cuales la copia de archivos a memorias USB puede parecer más lenta en Linux. ¿Es realmente más lento debido a un problema de hardware / controlador o lo que sea ...

Hacer una comparación adecuada de las velocidades de escritura entre Linux y Windows

  • Antes que nada, olvídate del SSD por la razón 3. Es como las naranjas y las manzanas.
  • Para negar los efectos de la razón 1 (almacenamiento en caché) y la razón 2 (archivos pequeños), debe probar con un solo archivo grande, mayor que la cantidad de RAM en el sistema de prueba.
  • En Linux puedes crearlo con dd if=/dev/urandom of=largetest bs=1M count=7500, lo que te da un archivo de prueba de 7500 MB. Suponiendo que su sistema tiene menos de 4 GB de RAM, es lo suficientemente bueno. Copie eso en un dispositivo Sandisk de 8GB recién formateado y cronometre.
  • Reinicie en Windows y copie largetestdesde la memoria USB a su disco duro. Reinicie nuevamente (para eliminarlo de la caché). Luego formatee el dispositivo USB (¡el mismo vfat / FAT32!) Y cópielo largetestdesde el disco duro al dispositivo .
  • ¿Cómo se comparan los tiempos?
ish
fuente
2
cc: @Eloff Razón 1 : Sí, la sincronización de caché ciertamente puede afectar los tiempos de escritura aparentes. ¿Pero el caché solo explicaría por qué permanece allí por 10 minutos ? Creo que necesitamos más detalles de OP. Re Razón 2 : ¿Por qué asumes esta transferencia consistió en muchos archivos pequeños? No creo que el OP proporcione detalles sobre esta transferencia de 1.8GB, ¿verdad? Re Razón 3 : Sí, SSD es una bestia diferente. Probablemente también se conectará a través de SATA y no por USB. Creo que el OP simplemente habló mal y se refirió a una memoria USB como SSD. Pero, de nuevo, no hay forma de saberlo a menos que obtengamos más detalles del OP.
John irracional
2
Esta respuesta ignora descaradamente cómo se formuló la pregunta. La pregunta claramente habla sobre un archivo grande y el hecho de que la interrupción de la copia da como resultado un archivo destrozado.
zrajm
44
@zrajm eso es cierto. Sin embargo, para personas como yo que se topan con el mismo problema, esto es muy útil.
Pithikos
¿Cómo deshabilitar este comportamiento de almacenamiento en caché entonces?
Aminu Kano
7

Encontré la solución, todo lo que hice fue desmontar, quitar la unidad y ejecutar sudo modprobe ehci_hcden la Terminal. Inserte la unidad y agian sudo modprobe ehci_hcdcuando coloque la unidad y wow 20 / mbs pensé que compartiría. Espero no tener que hacerlo todo el tiempo ... pero no es tan difícil ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 dice que arreglaron el error.

Dj Radio
fuente
¿¿Seriamente?? Ese informe de error es de diciembre de 2007 y hace referencia a Ubuntu gutsy 7.10. (FYI: @MarcoCeppi)
John irracional
3
@irrationalJohn No proporcioné la respuesta, simplemente la limpié. En segundo lugar, solo porque un informe de error sea antiguo, no significa que aún no sea válido. Está siendo evaluado de acuerdo con esto
Marco Ceppi
@MarcoCeppi Sí, sé que solo editaste. Es por eso que presenté " FYI: ". Pensé que si lo editabas (o no ) podrías estar interesado. Pensé que si no te importaba, simplemente ignorarías el aviso. En cuanto a un informe de error antiguo que todavía tiene relevancia ... Hace más de 4 años y creo que al menos 8 (?) Lanzamientos más tarde? Para un error de rendimiento? Claro, puede ser posible, pero no es el primer lugar donde buscaría. FWIW
John irracional
7

Creo que hay muy pocas posibilidades de que sea un problema portuario. Es más probable que sea un problema de LINUX (o configuración de Linux): busque en Google y encontrará miles de informes de problemas sobre USB lento en Linux / ubuntu. Para mí, es casi un showtopper para Linux: ahora tengo un Ubuntu 12.04 LTS y todavía tengo este problema (así que prefiero usar la configuración de Win7, principalmente / solo por esto). Este problema (o algo con síntomas similares) existe desde hace varios años, aparentemente no hay solución. Y durante este tiempo probé varias PC físicas con varias versiones diferentes de ubuntu (configuración predeterminada) y 2-3 memorias USB diferentes ...

Peter
fuente
5

Solo umountel dispositivo si ya está montado automáticamente y móntelo manualmente /mnt/foldername.

En mi caso,

umount /media/usb0
mount /dev/sdb1 /mnt/sam

Después de eso, está haciendo frente muy rápido.

msnfreaky
fuente
Esto, junto con en rsynclugar de cpparece hacer el truco.
Irfan el
19
Esto no hizo ninguna diferencia en mi situación. Además, esto no es realmente una solución sin alguna teoría sobre por qué se supone que esto hace la diferencia.
LondonRob
@Irfan No, rsync también se ralentiza ...
sergzach
3

Es 2019 y todavía tengo este mismo problema. Así que pensé que buscaba en Internet una solución. Encontré la siguiente página que sugiere una: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Dice:

Ejecute los siguientes comandos en una consola para ver si soluciona el problema por usted. Es posible que sudo suprimero necesite tener el permiso requerido.

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

Si funciona, puede hacer que este cambio sea persistente en todos los reinicios pegando las dos líneas al final de su /etc/rc.localarchivo.

Para mí tuvo el siguiente efecto:

Antes de copiar archivos grandes en una unidad USB comenzaría realmente rápido (como 60 MB / s) y se volvería cada vez más lento (<10 MB / s) hasta que pareciera que nunca terminaría.

Ahora comienza más lento, pero se vuelve más y más rápido y termina antes que antes. Por lo tanto, parece "resolver" el problema o al menos tener un efecto positivo.

Jenny O'Reilly
fuente
1

Si cambia a un USB 3.0, pasará de 1mb / sa uno a 5-8mb / s. Me cambio a un pci USB 3.0 y HD externo y no he mirado atrás.

Logger fantasma
fuente
1

Cuando mira en / etc / mtab, ¿ve que el dispositivo se ha montado con la opción "empotrar"?

Si es así, esta podría ser la causa del problema (fue para mí). Simplemente desmonte el dispositivo y vuelva a montarlo, no debe configurarse de manera predeterminada.

GarfieldElCat
fuente
La opción de descarga está configurada de forma predeterminada, ¿hay alguna forma de detener esto?
Ben Lutgens
@ Ben Lutgens: Sí, puede poner su propia entrada en / etc / fstab que no tiene las opciones de descarga. Use sudo blkid para encontrar el UUID del dispositivo relevante y coloque una entrada como UUID = "su dispositivo uuid aquí" / mnt / <su punto de montaje aquí> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0. Cambie el uid, gid para que coincida con el userid y groupid del usuario normal que usa (como lo encontró getent passwd <su usuario>).
A.Danischewski
Cuando hago esto, todo lo que cambia es que no obtengo más barra de progreso para la copia y la copia solo parece realmente activarse / finalizar cuando intento desmontar el dispositivo y me dice "no desconecte hasta que finalice la operación ".
Jenny O'Reilly
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 desmonté el disco duro externo ejecutado allí. diciendo que sdb1 no estaba montado correctamente, ejecutó un fsck, que hizo 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 tiene datos, pero funcionó para mí, sin pérdida de datos.

anymamundy
fuente
-2

También tuve este problema, pero uso el comando cp y actualizas tu memoria USB en segundos;

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

Creo que es una respuesta muy tardía pero aún está abierta.

Bart
fuente
-3

De acuerdo, tuve el mismo problema durante tres días y la forma en que logré hacer una copia de seguridad de mi disco duro de 1TB fue mediante el uso de rsync, sé que se usa para hacer una copia de seguridad, pero hizo el trabajo, incluso cuando transfiero archivos de gran tamaño. haz ese trabajo Si desea utilizarlo con una GUI, sugiero instalar Grsync, que es una versión gráfica de rsync ya que rsync se ejecuta en el terminal.

Espero que esto haya ayudado

Perfecto
fuente