Copia su chiavetta USB davvero lento?


45

Quando copio i file sul dispositivo USB, ci vuole molto più tempo rispetto a Windows (stesso dispositivo USB, stessa porta) è più veloce delle velocità USB 1.0 (1 MB / s) ma molto più lento delle velocità USB 2.0 (12 MB / s). Copiare 1,8 GB mi richiede più di 10 minuti (dovrebbe essere <3 min.) Ho due stick identici da 8 GB SanDisk Cruzer e ho lo stesso problema con entrambi. Ho un SSD USB da 32 GB super talentuoso nella porta vicina e funziona alle velocità previste.

Il problema che mi sembra di vedere nella GUI è che la barra di avanzamento passa al 90% quasi istantaneamente, si completa al 100% un po 'più lentamente e poi si blocca lì per 10 minuti. L'interruzione della copia a questo punto sembra comportare il danneggiamento alla fine del file. Se aspetto che il completamento della copia abbia esito positivo.

Qualche idea? dmesg output di seguito:

[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

Linux difende le scritture su disco in cambio di eseguire altre attività più velocemente. Solo una supposizione, prova a correre synce vedi se non accelera il processo. <- non testato ma possibile
RobotHumans

non ha senso che lo rinvierebbe per un tipo di USB ma non per un altro. Inoltre mi sembra di ricordare la sincronizzazione delle chiamate Linux ogni 30 secondi circa? Potrebbe essere obsoleto. Mi aspetto che si tratti di una sorta di problema di driver o compatibilità poiché dipende dal tipo di dispositivo.
Eloff,

Essere più veloci su altre levette USB non è nella tua domanda. Se lo fosse, avrei suggerito di guardare in hdparm. Quindi ha senso se lo vedi dal punto di vista di qualcuno che non conosce tutto il tuo set-up, ma dipende dalla tua domanda per i dettagli
RobotHumans

"Ho un SSD USB da 32 GB super talentuoso nella porta vicina e funziona alle velocità previste." era lì, ma lo nasconderò bene lo ammetto :) Allora, cos'è questa roba hdparm a cui alludi?
Eloff,

Ok, SSD e memoria flash non sono così la stessa cosa.
Andando

Risposte:


29

Perché la copia sull'unità USB è così lenta in Linux (e più veloce in Windows)?

Motivo 1. La memorizzazione nella cache dei file può far apparire le scritture sempre più lente

Il problema che mi sembra di vedere nella GUI è che la barra di avanzamento passa al 90% quasi istantaneamente, si completa al 100% un po 'più lentamente e poi si blocca lì per 10 minuti.

Una cosa che devi capire è la memorizzazione nella cache dei file. Linux (e Windows) useranno altrimenti RAM "vuota" per memorizzare nella cache le operazioni di lettura / scrittura e renderle più veloci sugli accessi successivi. La memorizzazione nella cache delle operazioni di copia per rallentare i dispositivi comporta il comportamento che si vede: il "completamento rapido" in realtà sta scrivendo nella cache, quindi rallenta e si arresta perché l'effettivo scaricamento dei dati nella cache (sincronizzazione) sul dispositivo lento è impiegando molto tempo. Se interrompi a quel punto, i dati sono danneggiati (come hai notato) poiché la sincronizzazione non è mai terminata.

Tale copia in Windows può sembrare più veloce (comprese le velocità MB / sec riportate) perché a volte Windows non attenderà la sincronizzazione e dichiarerà il lavoro completato non appena i dati vengono scritti nella cache.

Motivo 2. Scrivere molti file, specialmente quelli piccoli, è lento

Per copiare 1,8 GB

A causa del modo in cui funzionano la memoria flash e i filesystem, il throughput (la velocità) più veloce si ottiene quando si scrivono file molto grandi. Scrivere molti file di piccole dimensioni o persino dati misti contenenti un numero di file di piccole dimensioni può rallentare molto il processo. Questo riguarda anche i dischi rigidi, ma in misura leggermente inferiore.

Motivo 3. Non è possibile confrontare le velocità di scrittura di una chiavetta USB e di un SSD

Ho un SSD USB da 32 GB super talentuoso nella porta vicina e funziona alle velocità previste.

  • Una chiavetta USB da giardino di solito è costituita da chip di memoria flash scritti in serie (in sequenza) e che non dispongono di cache propria.

  • Un SSD, d'altra parte, contiene un controller che scrive in parallelo sui chip di memoria flash , aumentando il throughput di un fattore di 2 o più sulla chiavetta USB.

    • Se l'SSD da 32 GB avesse 4 chip da 8 GB, sarebbe comunque 4 volte più veloce della chiavetta USB in qualsiasi operazione di scrittura.
    • L'SSD contiene anche cache RAM (come i dischi rigidi), quindi può archiviare rapidamente i dati in arrivo nella cache e dire al sistema operativo che è stato fatto, mentre deve ancora effettivamente scrivere tali dati nella memoria flash.
  • Quindi, con un file di grandi dimensioni, i tuoi GB da 32 GB con la struttura 4x che assumevamo sarebbero 4x più veloci; con molti file di piccole dimensioni, sarebbe 10 volte o più veloce perché potrebbe archiviarli in modo intelligente nella sua cache.


Per riassumere , questi sono i motivi per cui la copia di file su chiavette USB potrebbe apparire più lenta in Linux. In realtà è più lento a causa di un problema hardware / driver o altro ...

Fare un corretto confronto delle velocità di scrittura tra Linux e Windows

  • Prima di tutto, dimentica l'SSD a causa del motivo 3. È come arance e mele.
  • Per annullare gli effetti del motivo 1 (memorizzazione nella cache) e del motivo 2 (file di piccole dimensioni), è necessario eseguire il test con un singolo file di grandi dimensioni, maggiore della quantità di RAM sul sistema di test.
  • In Linux puoi crearlo con dd if=/dev/urandom of=largetest bs=1M count=7500un file di test da 7500 MB. Supponendo che il tuo sistema abbia meno di 4 GB circa di RAM, è abbastanza buono. Copialo su una chiavetta Sandisk da 8 GB appena formattata e cronometra.
  • Riavvia in Windows e copia largetestdalla chiavetta USB sul tuo disco rigido. Riavvia di nuovo (per rimuoverlo dalla cache). Quindi formattare la chiavetta USB (stessa vfat / FAT32!) E copiarla largetestdal disco rigido sulla chiavetta.
  • Come si confrontano i tempi?

2
cc: @Eloff Re Motivo 1 : Sì, la sincronizzazione della cache può certamente influire sui tempi di scrittura apparenti. Ma cache da solo spiegherebbe perché si blocca lì per 10 minuti ?? Penso che abbiamo bisogno di maggiori dettagli dall'OP. R Motivo 2 : Perché supponi che questo trasferimento consistesse in molti piccoli file? Non credo che l'OP fornisca dettagli su questo trasferimento da 1,8 GB, vero? R motivo 3 : Sì, SSD è una bestia diversa. Probabilmente sarebbe anche collegato via SATA e non USB. Penso che l'OP abbia semplicemente parlato male e riferito a una chiavetta USB come a un SSD. Ma ancora una volta, non c'è modo di saperlo se non si ottengono maggiori dettagli dall'OP.
irrazionale John,

2
Questa risposta ignora palesemente come è stata formulata la domanda. La domanda parla chiaramente di un file di grandi dimensioni e del fatto che l'interruzione della copia si traduce in un file alterato.
zrajm,

4
@zrajm è vero. Tuttavia, per le persone come me che si imbattono nello stesso problema, questo è molto utile.
Pithikos,

Come disabilitare questo comportamento di memorizzazione nella cache quindi?
Aminu Kano,

7

Ho trovato la soluzione tutto ciò che ho fatto è stato smontare, rimuovere l'unità ed eseguire sudo modprobe ehci_hcdnel Terminale. Inserisci drive e agian sudo modprobe ehci_hcdquando inserisco il drive e wow 20 / mbs ho pensato di condividere. Spero di non doverlo fare ogni volta ... ma non è difficile ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 afferma di aver corretto il bug.


Sul serio?? Quella segnalazione di bug è del dicembre 2007 e fa riferimento a Ubuntu Gutsy 7.10. (FYI: @MarcoCeppi)
irrazionale John

3
@irrationalJohn Non ho fornito la risposta, l'ho solo ripulita. In secondo luogo, solo perché una segnalazione di bug è vecchia, non significa che non sia ancora valida. È stato valutato in base a ciò
Marco Ceppi

@MarcoCeppi Sì, lo so che hai modificato solo. Ecco perché ho preceduto " FYI: ". Ho pensato che se lo avessi modificato potresti essere interessato (o no ). Ho pensato che se non ti fosse importato, avresti semplicemente ignorato l'avviso. Per quanto riguarda un vecchio bug report che ha ancora rilevanza ... Oltre 4 anni fa e penso che almeno 8 (?) Versioni dopo? Per un bug di prestazione? Certo, potrebbe essere possibile, ma non è il primo posto in cui vorrei cercare. FWIW.
irrazionale John,

7

Penso che le probabilità siano molto basse che si tratti di un problema portuale. È più probabile che sia un problema LINUX (o di configurazione di Linux) - vai in giro e troverai migliaia di segnalazioni di problemi su USB lenta in Linux / Ubuntu. Per me è quasi uno showtopper per Linux - ora ho un Ubuntu 12.04 LTS e ho ancora questo problema (quindi preferisco usare l'installazione di Win7 - principalmente / solo per questo). Questo problema (o qualcosa con sintomi simili) è lì da diversi anni ormai, apparentemente senza soluzione. E durante questo periodo ho provato diversi PC fisici con diverse versioni di Ubuntu (configurazione predefinita) e 2-3 diverse chiavette USB ....


5

Solo umountil dispositivo se è già montato automaticamente e montarlo manualmente /mnt/foldername.

Nel mio caso,

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

Dopo di che sta affrontando molto velocemente.


Questo, insieme a rsyncinvece di cpsembra fare il trucco.
Irfan,

19
Questo non ha fatto alcuna differenza per la mia situazione. Inoltre, questa non è davvero una soluzione senza alcuna teoria sul perché questo dovrebbe fare la differenza.
Londra,

@Irfan No, anche rsync rallenta ...
sergzach,

3

È il 2019 e sto ancora riscontrando lo stesso problema. Quindi ho pensato di cercare una soluzione in Internet. Ho trovato la seguente pagina che suggerisce uno: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Dice:

Esegui i seguenti comandi in una console per vedere se risolve il problema per te. Potrebbe essere necessario sudo suprima disporre dell'autorizzazione richiesta.

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

Se funziona, è possibile rendere persistente questa modifica in tutti i riavvii incollando le due righe alla fine del /etc/rc.localfile.

Per me ha avuto il seguente effetto:

Prima di copiare file di grandi dimensioni su un'unità USB si avviava molto velocemente (come 60 MB / s) e diventava sempre più lento (<10 MB / s) fino a quando sembrava che non sarebbe mai finito.

Ora inizia più lentamente, ma diventa sempre più veloce e termina prima di prima. Quindi sembra "risolvere" il problema o almeno avere un effetto positivo.


1

Se passi a una USB 3.0, passerai da 1 mb / s a ​​un woping 5-8 mb / s. Passo a un PCI USB 3.0 e HD esterno e non ho guardato indietro.


1

Quando guardi in / etc / mtab, vedi che il dispositivo è stato montato con l'opzione "flush"?

In tal caso, questa potrebbe essere la causa del problema (era per me). Basta smontare il dispositivo e rimontarlo, non dovrebbe essere impostato di default.


L'opzione flush è impostata di default, un modo per fermarlo?
Ben Lutgens,

@ Ben Lutgens - Sì, puoi inserire la tua voce in / etc / fstab che non ha le opzioni flush. Utilizzare sudo blkid per trovare l'UUID del dispositivo pertinente e inserire una voce come UUID = "uuid del dispositivo qui" / mnt / <punto di montaggio qui> uid = 1000, gid = 1000, maschera = 0022, maschera = 0022 0 0. Modificare uid, gid in modo che corrisponda a userid e groupid dell'utente normale che si utilizza (come trovato da getent passwd <il tuo utente>).
A.Danischewski,

Quando lo faccio, tutto ciò che cambia è che non ottengo più barra di avanzamento per la copia e la copia sembra davvero iniziare / finire solo quando provo a smontare il dispositivo e mi dice "non scollegare fino al termine dell'operazione ".
Jenny O'Reilly,

0

Ho avuto alcuni problemi anche con la velocità di trasferimento su un disco esterno WD, dopo averlo aperto in un SO Windows, ho sempre usato LINUX, dopo che la velocità di trasferimento era di 1,5 mb / s di quando ho smontato il disco rigido esterno eseguito dmesg lì era dicendo che sdb1 è stato smontato in modo non corretto, ha eseguito un fsck, che ha fatto alcune riparazioni e dopo che 20 MB / s di velocità di trasferimento di nuovo quando si copia da sda a disco esterno. fsck è sempre un rischio se si dispone di dati, ma ha funzionato per me, senza perdita di dati.


-2

Ho avuto anche questo problema, ma uso il comando cp e aggiorni la tua chiavetta USB in pochi secondi;

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

Penso che sia una risposta molto tardi, ma è ancora aperta.


-3

Ok, ho avuto lo stesso problema per tre giorni e come sono riuscito a fare il backup del mio disco rigido da 1 TB usando rsync, so che è usato per il backup ma ha fatto il lavoro, anche quando trasferisco file di grandi dimensioni su cui lo uso fare quel lavoro. Se si desidera utilizzarlo con una GUI, suggerisco di installare Grsync che è una versione grafica di rsync poiché rsync viene eseguito sul terminale.

Spero che questo abbia aiutato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.