69

When I copy files to the USB device, it takes much longer than in windows (same usb device, same port) it's faster than USB 1.0 speeds (1MB/s) but much slower than USB 2.0 speeds (12MB/s). To copy 1.8GB takes me over 10 minutes (it should be < 3 min.) I have two identical SanDisk Cruzer 8GB sticks, and I have the same problem with both. I have a super talent 32GB USB SSD in the neighboring port and it works at expected speeds.

The problem I seem to see in the GUI is that the progress bar goes to 90% almost instantly, completes to 100% a little slower and then hangs there for 10 minutes. Interrupting the copy at this point seems to result in corruption at the tail end of the file. If I wait for it to complete the copy is successful.

Any ideas? dmesg output below:

[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
11
  • Linux defers disk writes in exchange for performing other tasks faster. Just a guess, try running sync and see if it doesn't speed up the process. <--untested but possible Apr 14, 2012 at 22:43
  • that doesn't make sense that it would defer it for one type of USB but not another. Also I seem to recall linux calls sync every 30 seconds or so? Might be outdated. I'm expecting this is some kind of driver or compatibility issue since it depends on the type of device.
    – Eloff
    Apr 15, 2012 at 0:37
  • The being faster on other USB thumbdrives isn't in your question. If it were, I would have suggested looking in to hdparm. So it makes sense if you view it from the perspective of someone who doesn't know your whole set-up, but depends on your question for details Apr 15, 2012 at 0:39
  • 3
    It is 2019 now, and I still have this issue. Amazing how they are not able to fix this. Sep 28, 2019 at 12:50
  • 1
    You gave me the confidence to just wait...
    – jjstcool
    May 5, 2022 at 21:38

11 Answers 11

37

Why is copying to my USB drive so slow in Linux (and faster in Windows)?

Reason 1. File caching can make writes appear slower or faster

The problem I seem to see in the GUI is that the progress bar goes to 90% almost instantly, completes to 100% a little slower and then hangs there for 10 minutes.

One thing you need to understand is file caching. Linux (and Windows) will use otherwise "empty" RAM to cache read/write operations and make them faster on subsequent accesses. Caching copy operations to slow devices results in the behavior you see -- the "fast completion" is actually writing to the cache, and then it slows and stops because the actual flushing of the data in the cache (sync) to the slow device is taking very long. If you abort at that point, the data is corrupted (as you noted) since the sync never finished.

Such copying in Windows may seem faster (including the reported MB/sec speeds) because sometimes Windows will not wait for the sync, and declare the job completed as soon as the data is written to cache.

Reason 2. Writing lots of files, especially small ones, is slow

To copy 1.8GB

Because of the way flash memory and filesystems work, the fastest throughput (speed) is achieved when writing very large files. Writing lots of small files, or even mixed data containing a number of small files can slow the process down a lot. This affects hard drives too, but to a somewhat lesser extent.

Reason 3. Write speeds of a USB stick and an SSD cannot be compared

I have a super talent 32GB USB SSD in the neighboring port and it works at expected speeds.

  • A garden variety USB stick usually consists of flash memory chips that are written to serially (sequentially), and does not have any cache of its own.

  • An SSD, on the other hand, contains a controller which writes to the flash memory chips parallel, increasing the throughput by a factor of 2 or more over the USB stick.

    • If your 32GB SSD had 4x 8GB chips, it would still be 4x faster than the USB stick at any write operation.
    • The SSD also contains RAM cache (like hard disks), so it can quickly store incoming data in the cache and tell the OS that it's done, while it still has to actually write that data to the flash memory.
  • So, with one large file, your 32GB GB with the 4x structure we assumed, would be 4x as fast; with many small files, it would be 10x or more faster because it could intelligently store them in its cache.


To sum up, these are the reasons why file copying to USB sticks may appear slower in Linux. Is it actually slower because of a hardware/driver issue or whatever....

Doing a proper comparison of write speeds between Linux and Windows

  • First of all, forget about the SSD because of reason 3. It's like oranges and apples.
  • To negate the effects of reason 1 (caching) and reason 2 (small files), you need to test with a single large file, larger than the amount of RAM on the test system.
  • In Linux you can create it with dd if=/dev/urandom of=largetest bs=1M count=7500, which gives you a 7500 MB test file. Assuming your system has less than 4GB or so of RAM, it's good enough. Copy that to a freshly formatted Sandisk 8GB stick, and time it.
  • Reboot in Windows, and copy largetest from the USB stick to your hard disk. Reboot again (to remove it from the cache). Then format the USB stick (same vfat/FAT32!), and copy largetest from the hard disk to the stick.
  • How do the times compare?
4
  • 2
    cc: @Eloff Re Reason 1: Yes, cache syncing can certainly affect apparent write times. But would cache alone explain why it hangs there for 10 minutes?? I think we need more details from OP. Re Reason 2: Why do you assume this transfer consisted of many small files? I do not think the OP provides any details about this 1.8GB transfer, does he? Re Reason 3: Yes, SSD is a different beast. It also would probably be attached via SATA and not USB. I think the OP simply mis-spoke and referred to a USB stick as an SSD. But again, no way of knowing unless we get more details from the OP. May 31, 2012 at 16:11
  • 2
    This answer blatantly ignores how the question was formulated. The question clearly talks about one big file, and the fact that interrupting the copy results in a mangled file.
    – zrajm
    Feb 28, 2014 at 17:48
  • 7
    @zrajm that's true. However for people like me bumping in the same problem, this is very helpful.
    – Pithikos
    Oct 20, 2014 at 16:00
  • How to disable this caching behavior then?
    – Aminu Kano
    Sep 13, 2019 at 5:00
18

It's 2019 and I'm still having this same issue. So I figured I search the internet for a solution. I found the following page that suggests one: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

It says:

Execute the following commands in a console to see if it fixes the problem for you. You might need to sudo su first to have the required permission.

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

If it works you could make this change persistent across reboots by pasting the two lines at the end of your /etc/rc.local file.

For me it had the following effect:

Prior copying large files to an USB drive would start out really fast (like 60 MB/s) and become slower and slower (< 10 MB/s) until it looked like it would never finish.

Now it starts out slower, but gets faster and faster and finishes sooner than before. So it does seem to "solve" the problem or at least have a positive effect.

2
  • 2
    These echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes two command exactly make copy really fast in Ubuntu 18.04, x86_64 Linux 5.3.0-40-generic.
    – EsmaeelE
    Mar 14, 2020 at 7:12
  • 2
    In ubuntu, as /etc/rc.local doesn't exist, you can add these 2 lines at the end of /etc/sysctl.conf file. First line: vm.dirty_bytes=50331648 Second line: vm.dirty_background_bytes=16777216 Source Sep 1, 2021 at 16:46
9

Found the fix all i did was unmount, remove drive, and run sudo modprobe ehci_hcd in the Terminal. Insert drive and agian sudo modprobe ehci_hcd when I put the drive in and wow 20/mbs thought i would share. Hope I dont have to do it every time... but it's not to hard...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 says they fixed the bug.

3
  • 1
    Seriously?? That bug report is from December of 2007 and references Ubuntu gutsy 7.10. (FYI: @MarcoCeppi) May 31, 2012 at 16:03
  • 4
    @irrationalJohn I didn't provide the answer, I just cleaned it up. Secondly just because a bug report is old, doesn't mean it's not still valid. It's being triaged according this May 31, 2012 at 16:36
  • @MarcoCeppi Yes, I know you only edited. That's why I prefaced with "FYI:". I figured if you edited it you might (or might not) be interested. I figured if you didn't care, you'd just ignore the notice. As for an old bug report still having relevance ... Over 4 years ago and I think at least 8 (?) releases later? For a performance bug? Sure, it may be possible, but it's not the first place I'd look. FWIW. May 31, 2012 at 16:54
7

I think the chances are very low that it is a port issue. It is more likely a LINUX (or linux configuration) issue - googgle around and you will find thousands of issue reports about slow USB in linux/ubuntu. For me it is almost a showstopper for linux - I now have an Ubuntu 12.04 LTS and still have this issue (so I rather use the Win7 setup - mainly/only because of this). This issue (or something with similar symptoms) is there for several years now, apparently no fix. And during this time I tried several physical PCs with several different ubuntu versions (default config) and 2-3 different USB sticks....

6

Just umount the device if it is automounted already, and manually mount it to /mnt/foldername.

In my case,

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

After that it is coping very fast.

3
  • This, along with rsync instead of cp seems to do the trick.
    – Irfan
    Jan 26, 2016 at 10:52
  • 24
    This didn't make any difference to my situation. Also, this isn't really a solution without some theory as to why this is supposed to make a difference.
    – LondonRob
    May 17, 2016 at 10:29
  • @Irfan No, rsync does slow down too...
    – sergzach
    Jan 19, 2018 at 10:01
1

If you switch to a USB 3.0 , you will go from 1mb/s to a woping 5-8mb/s. I switch to a 3.0 USB pci and external HD and haven't looked back.

1

When you look in /etc/mtab, do you see that the device has been mounted with the "flush" option?

If so, this could be the cause of the problem (it was for me). Just unmount the device and remount it, it shouldn't be set by default.

3
  • The flush option is set by default, any way to stop this? Mar 24, 2014 at 17:52
  • @ Ben Lutgens - Yes, you can put your own entry in /etc/fstab that doesn't have the flush options. Use sudo blkid to find the relevant device UUID and put an entry such as UUID="your device uuid here" /mnt/<your mount point here> uid=1000,gid=1000,fmask=0022,dmask=0022 0 0. Change the uid, gid to match the userid and groupid of the normal user that you use (as found by getent passwd <your user>).
    – Adam D.
    Oct 28, 2015 at 17:07
  • When I do this, all that changes is that I get no more progress bar for the copying and the copying only seems to really kick in/finish when I try to unmount the device and it tells me "don't unplug until operation is finished". Sep 23, 2017 at 12:38
0

I had some problems also with transfer rate on a WD external disk, after opening it in a windows SO, i always used LINUX, after that the transfer rate was like 1.5mb/s than i unmount the external hard drive runed dmesg there it was saying that sdb1 it was unporperly unmounted, runed a fsck, that made a few repairs and after that 20mb/s of transfer rate again when copiyng from sda to external disk. fsck is always a risk if you have data, but it worked for me, with no data loss.

0

This is an old question. Also I had the same problem for a long time. Recently I found the solution here. What I did is:

Reformatting USB from FAT to NTFS.

1
  • 2
    this is NOT recommended for sticks >=32GB. Reason: Fast sticks rely on exFat - formatting. All USB 3.0 and 3.1 do need exFat to work fast. Try yourself .... Apr 8, 2020 at 7:46
-2

I also had this problem, but I use the cp command and you update your usb stick in seconds;

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

I think it is a very late answer but it is still open.

1
-3

Okay, I had the same problem for three days and how I managed to backup my 1TB hard drive was by using rsync, I know that it is used for backing up but it got the job done, even when transferring large files I use it to do that job. If you would like to use it with a GUI I suggest installing Grsync which is a graphical version of rsync since rsync runs on the terminal.

Hope this helped

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .