For context:

I’m copying the same files to the same USB drive for comparison from Windows and from my Fedora 41 Workstation.

Around 10k photos.

Windows PC: Dual Core AMD Athlon from 2009, 4GB RAM, old HDD, takes around 40min to copy the files to USB

Linux PC: 5800X3D, 64GB RAM, NVMe SSD, takes around 3h to copy the same files to the same USB stick

I’ve tried chagning from NTFS to exFAT but the same result. What can I do to improve this? It’s really annoying.

2 points
*

Depends on the distro and desktop environment but some will “transfer” files to a software buffer that doesn’t actually write the data immediately. Works for limiting unnecessary writes on Flash memory but not USB sticks that are designed to be inserted and removed at short notice.

You can force Linux to commit pending writes using the ‘sync’ command. Note it won’t give you any feedback until the operation is finished (multiple minutes for a thumbdrive writing GBs of data) so append & to your command (‘sync &’) to start it as its own process so you don’t lock the terminal.

You can also watch the progress using the command form this Linux Stack Exchange Q;

https://unix.stackexchange.com/questions/48235/can-i-watch-the-progress-of-a-sync-operation#48245


Side question though, it seems that there are faster options. How come we don’t use those in GUI file explorers if they’re faster?

permalink
report
reply
1 point

As I’ve already mentioned, sync does absolutely nothing. The copy took so long that the sync command exited 4 times while the files were still transfering and were nowhere near finishing. Regarding the watch -d grep -e Dirty: -e Writeback: /proc/meminfo command, I did not mention it in this thread but I did try it and yes, there was some almost 900k kB of data in the “Dirty” buffer that went up and down constantly even after I’ve disabled the caching.

permalink
report
parent
reply
22 points
*

Silly question perhaps, but are you sure you’re using the correct port on your Linux system? If I plug my external HD into a USB2 port, I’m stuck at 30-40MB/sec, while on a USB3 port I get ~150-180MB/sec. That’s proportionally similar to the difference you described so I wonder if that’s the culprit.

You can verify this in a few different ways. From Terminal, if you run lsusb you’ll see a list of all your USB hubs and devices.

It should look something like this:

Bus 002 Device 001: ID xxxx:yyyy Linux Foundation 3.0 root hub
Bus 002 Device 002: ID xxxx:yyyy <HDD device name>
Bus 003 Device 001: ID xxxx:yyyy Linux Foundation 2.0 root hub
Bus 004 Device 001: ID xxxx:yyyy Linux Foundation 3.0 root hub

So you can see three hubs, one of which is 2.0 and the other two are 3.0. The HDD is on bus 002, which we can see is a USB 3.0 hub by looking at the description of Bus 002 Device 001. That’s good.

If you see it on a 2.0 bus, or on a bus with many other devices on it, that’s bad and you should re-organize your USB devices so your low-speed peripherals (mouse, keyboard, etc.) are on a USB2 bus and only high-speed devices are on the USB3 bus.

You can also consult your motherboard’s manual, or just look at the colors of your USB ports. By convention, gray ports are USB 1.0, blue ports are 2.0, and green ports are 3.x.

If you’re running KDE, you can also view these details in the GUI with kinfocenter. Not sure what the Gnome equivalent is.

permalink
report
reply
6 points

For sanity check I’ve tried.

Bus 004 Device 004 and it’s USB 3.0 as it should be.

Also I’ve disabled caching and I’m now copying 6 video files at only just 15MB/s (and it’s slowing down, byt the time I went to make screenshot for this post it dropped again). And it’s quite a bit slower than on Windows still.

permalink
report
parent
reply
3 points
*

Now down to 9MB/s and still going down

EDIT: 12 min later…

permalink
report
parent
reply
2 points

Still going…

permalink
report
parent
reply
5 points

I’m using USB 3 10Gbps on my Linux system. The USB stick is USB 3-1.0 and the Windows PC only has USB 2.0 so it should be the slowest but it’s actually several times faster.

permalink
report
parent
reply
25 points
*

I find that it’s around the same, except linux waits on updating the UI until all write buffers are flushed, whereas Windows does not.

permalink
report
reply
9 points
*

except linux waits on updating the UI until all write buffers are flushed, whereas Windows does not.

I wish that were true here. But when I copy to USB the file manager ( XFCE/Thunar ) shows the copy is finished and closes the copy notifications way way before it’s even half done, when I copy movies to a stick.
I use fast USB 3 stick on USB 3 port, and I don’t get anywhere near the write speed the stick manufacturer claims. So I always open a terminal and run sync, to see when it’s actually finished.

I hate to the extreme when systems don’t account for write cache before claiming a copy is finished, it’s such an ancient problem we’ve had since the 90’s, and I find it embarrassing that such problems still exist on modern systems.

permalink
report
parent
reply
2 points

I’ve ran sync and it exited already 4 times and the copy is still going

permalink
report
parent
reply
2 points

Yes that’s annoying too, I have no clue why it does that, but when the sync says “clear”, I always wait a couple seconds, and run sync again a couple of times, to see if it’s actually finished. And only THEN unmount the stick.
Copy to USB does not seem very solid on Linux IMO. So I also ALWAYS buy sticks with activity LED.
But even that can fool you, sometimes when I think a smaller copy is finished, because the LED stops blinking, it suddenly starts up again, after having paused for about 1½ second?!?!

permalink
report
parent
reply
3 points

That’s nice but I managed to copy 300GB worth of data from the Windows PC to my Linux PC in around 3h to make a backup while I reinstall system and now I’ve been stuck for half a day copying the data back to the old Windows PC and I’ve not even finished 100GB yet… I’ve noticed this issue long ago but I ignored it as I never really had to copy this much data. Now it’s just infuriating.

permalink
report
parent
reply
14 points

One thing I ran into, though it was a while ago, was that disk caching being on would trash performance for writes on removable media for me.

The issue ended up being that the kernel would keep flushing the cache to disk, and while it was doing that none of your transfers are happening. So, it’d end up doubling or more the copy time because the write cache wasn’t actually helping removable drives.

It might be worth remounting without any caching, if it’s on, and seeing if that fixes the mess.

But, as I said, this has been a few years, so that may no longer be actively the case.

permalink
report
parent
reply
8 points
*

This actually sounds like it could be the case, I’ll explore tomorrow as I’m already in bed. Thanks for suggestion.

Edit: disabling caching yielded an improvement but very minor, writing to USB stick still sucks

permalink
report
parent
reply
6 points

Random peripherals get tested against windows a lot more than Linux, and there are quirks which get worked around.

I would suggest an external SSD for any drive over 32GB. Flash drives are kind of junk in general, and the external SSDs have better controllers and thermals.

Out of curiosity, was the drive reformatted between runs, and was a Linux native FS tried on the flash drive?

The Linux native FS doesn’t help migrate the files between Windows and Linux, but it would be interesting to see exFAT or NTFS vs XFS/ext4/F2FS.

permalink
report
reply
17 points

I/O scheduler issue?

Connect that USB stick, and run command:

grep '' /sys/block/*/queue/scheduler

show output.

permalink
report
reply
4 points

Can I run it while transferring?

permalink
report
parent
reply
2 points

Sure!

permalink
report
parent
reply
2 points

permalink
report
parent
reply
4 points

I see nothing wrong here. So issue must be somewhere else.

permalink
report
parent
reply

Linux

!linux@lemmy.ml

Create post

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word “Linux” in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

  • Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
  • No misinformation
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

Community stats

  • 6.9K

    Monthly active users

  • 6.8K

    Posts

  • 185K

    Comments