I don't know why it's happening only to me. Whenever copying bigger or sometimes smaller < 1GB files from PC to pendrive literally gets stuck at the end.
3 Answers
It’s not just happening to you :-) The problem is due to how Linux works and the default settings that Ubuntu gives you. The file copy tool is reading a chunk of the source file then writing it to the destination, and updates the progress bar each time it finishes a write. However, to speed things up, Linux takes the data that is meant to be written and immediately tells the program that is has been written, while doing the work in the background. Linux allows some percentage of system memory to be used for this purpose, which with the size of memory these days is usually more than the entire file, so a program can think it has written the whole thing when in reality the copy has just begun. But, when a program tries to close the file, Linux makes it wait for the operation to complete. (Else the program might try doing something with a half-written file.)
You see this the most when writing large files to slow devices, like USB, but it can show up in other situations too and make it look like the computer is locking up.
The thing I do to “fix” the problem is telling Linux to buffer less data. That way, an application can’t get so far ahead of the actual progress. This involves changing a kernel parameter, which is a power-user thing that should be done with care. You need to add “vm.dirty_bytes=15000000
” to /etc/sysctl.conf
:
echo vm.dirty_bytes=15000000 | sudo tee -a /etc/sysctl.conf
then reboot.
That sets the buffer size to 15 MB, which is a number I picked, and roughly translates to “half a second writing to a fast USB2 device”. You can choose larger (or smaller, but probably not too much smaller) as you like.
The disadvantage of this setting is that high-throughput operations might run slower, like running a bunch of file copies simultaneously. It could also cause a laptop drive to come out of sleep mode more frequently.
-
I've checked the default value of
dirty_bytes
and it's 0. It may be the case that Ubuntu usesdirty_ration
instead. Commented Feb 15, 2019 at 22:40 -
2Right, 0 means it isn't being used, in favor of dirty_ratio. You can set dirty_bytes or dirty_ratio, but they are two measurements for the same value (if you set both, only the second one will take effect)– datalessCommented Feb 15, 2019 at 23:09
-
To state that differently, I think setting dirty_bytes is more useful than setting dirty_ratio because I would rather tune my write-buffering to the speed of my drives instead of the size of my main memory.– datalessCommented Feb 15, 2019 at 23:11
I had same issue on Ubuntu 19.10 with 16GB Kingston G4 USB 3.0 pendrive. Files gnome app was stuck at end of progress forever and you could not eject the usb. I was copying movie file of 1.2 GB size.
Solution is just to format pendrive to NTFS file system instead of FAT. When I did that, everything was working fine.
-
I re-formatted my usb again to NTFS and now I cannot even mount it to my Ubuntu 20.04– FranvaCommented Apr 2, 2022 at 9:27
I got the same problem, and i solved using dd
command with a very small bs
value, like 300
that will gives a 5MB/s transfer rate approximately.
The bs value depends on the speed of your usb stick, so you will need to do a few test. Consider using iotop
for monitoring the IO.
Example:
dd if=source of=/usb/destination bs=300 status=progress