You are not logged in.
I've bought a Western Digital Elements 2TB external HDD last year, connected by USB 3.0 that should allow me up to 5Gb/s (or about 500MB/s realistically). I have formatted it as Ext4 (quick format) after trying ExFAT (which was also slow). I achieve that speed with Windows but not with Linux, and I need help to figure out how to improve the read and write speed. Average write speed in Linux is 5MB/s...!
I'm transferring files between 1GB up to 20GB each either using `rclone` or `cp`, both are slow.
These are benchmarks with disk mark, on Linux:https://imgur.com/Jca6afy
On Windows (using WSL):https://imgur.com/UoTpSy2
dmesg doesn't say anything useful.
# lsusb -t
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/6p, 5000M
|__ Port 001: Dev 012, If 0, Class=Mass Storage, Driver=usb-storage, 5000M# smartctl -x /dev/sdb1
smartctl 7.5 2025-04-30 r5714 [x86_64-linux-6.18.21-1-lts] (local build)
Copyright (C) 2002-25, Bruce Allen, Christian Franke, [url=http://www.smartmontools.org]www.smartmontools.org[/url]
=== START OF INFORMATION SECTION ===
Vendor: WD
Product: Elements 2620
Revision: 1023
Compliance: SPC-4
User Capacity: 2,000,365,289,472 bytes [2.00 TB]
Logical block size: 512 bytes
Physical block size: 4096 bytes
LU is resource provisioned, LBPRZ=0
Rotation Rate: 4800 rpm
Form Factor: 2.5 inches
Serial number: WXB2A43JMND6
Device type: disk
Local Time is: Sat Apr 11 15:47:59 2026 CEST
SMART support is: Unavailable - device lacks SMART capability.
Read Cache is: Unavailable
Writeback Cache is: Unavailable# hdparm -I /dev/sdb1
/dev/sdb1:
ATA device, with non-removable media
Model Number: WDC WD20JDRW-11C7VS1
Serial Number: WD-WXB2A43JMND6
Firmware Revision: 01.01A01
Transport: Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x006d)
Supported: 10 9 8 7 6 5
Likely used: 10
Configuration:
Logical max current
cylinders 16383 0
heads 16 0
sectors/track 63 0
--
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 3906963632
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 1907697 MBytes
device size with M = 1000*1000: 2000365 MBytes (2000 GB)
cache/buffer size = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: 4800
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 128
DMA: *mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
Power-Up In Standby feature set
* SET_FEATURES required to spinup after power up
* 48-bit Address feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* 64-bit World wide name
* IDLE_IMMEDIATE with UNLOAD
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Host-initiated interface power management
* Phy event counters
* Idle-Unload when NCQ is active
* NCQ priority information
* READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
DMA Setup Auto-Activate optimization
Device-initiated interface power management
Software settings preservation
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Features Control (AC4)
* SCT Data Tables (AC5)
unknown 206[7]
unknown 206[12] (vendor specific)
unknown 206[13] (vendor specific)
unknown 206[14] (vendor specific)
* Extended number of user addressable sectors
* Device encrypts all user data
* DOWNLOAD MICROCODE DMA command
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 10 blocks)
* Deterministic read data after TRIM
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
404min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50014ee2c06d2c3e
NAA : 5
IEEE OUI : 0014ee
Unique ID : 2c06d2c3e
Checksum: correctIt's using the `xhci_hcd` driver, it uses `write-back cache`. It seems to be busy even though I'm not accessing it. What could be wrong? Any ideas on debugging this?
Last edited by tdewolff (2026-04-11 14:10:31)
Offline
There's no way in hell you're actually getting those speeds from a 4800 RPM HDD. Windows is lying to you.
Offline
Are you running crystaldiskmark via wine?
https://wiki.archlinux.org/title/Benchmarking
I'm transferring files between 1GB up to 20GB each either using `rclone` or `cp`, both are slow.
Are there IO errors in the system journal/dmesg?
Make sure there's no sideload (some file indexer, check "iotop")
The usual phenomenon when transferring data from a fast source to a slow target is that the copy runs super-fast and then stalls at 100% (depending on file size and RAM) because of the cache and asynchronous action.
Online
Thank you both for the response. @Scimmia, alright, but still writing is prohibitively slow in Linux...
@Seth, there is no significant other IO source when checking iotop. The Windows run was on another computer using WSL2.
Here's some interesting logs from dmesg, perhaps write cache is not working well?
[18024.263021] usb 2-1: new SuperSpeed USB device number 2 using xhci_hcd
[18024.277548] usb 2-1: New USB device found, idVendor=1058, idProduct=2620, bcdDevice=10.23
[18024.277554] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[18024.277556] usb 2-1: Product: Elements 2620
[18024.277558] usb 2-1: Manufacturer: Western Digital
[18024.277559] usb 2-1: SerialNumber: 575842324134334A4D4E4436
[18024.343087] usb-storage 2-1:1.0: USB Mass Storage device detected
[18024.343396] scsi host2: usb-storage 2-1:1.0
[18024.343539] usbcore: registered new interface driver usb-storage
[18024.349285] usbcore: registered new interface driver uas
[18025.367533] scsi 2:0:0:0: Direct-Access WD Elements 2620 1023 PQ: 0 ANSI: 6
[18025.369301] sd 2:0:0:0: [sdb] Spinning up disk...
[18026.379400] .....ready
[18030.596339] sd 2:0:0:0: [sdb] 3906963456 512-byte logical blocks: (2.00 TB/1.82 TiB)
[18030.596950] sd 2:0:0:0: [sdb] Write Protect is off
[18030.596967] sd 2:0:0:0: [sdb] Mode Sense: 47 00 10 08
[18030.597277] sd 2:0:0:0: [sdb] No Caching mode page found
[18030.597281] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[18030.673048] sdb: sdb1
[18030.673179] sd 2:0:0:0: [sdb] Attached SCSI disk
[18032.228931] EXT4-fs (sdb1): mounted filesystem 1010834f-9819-4860-aa94-d93bf102839e r/w with ordered data mode. Quota mode: none.
[18083.736391] kdiskmark_helpe (32556): drop_caches: 1
[18089.269564] kdiskmark_helpe (32556): drop_caches: 1
[18094.804110] kdiskmark_helpe (32556): drop_caches: 1
[18100.335355] kdiskmark_helpe (32556): drop_caches: 1
[18105.871373] kdiskmark_helpe (32556): drop_caches: 1
[18116.406195] kdiskmark_helpe (32556): drop_caches: 1Offline
The disk most likely simply has no cache - does kdiskmark clone the crystalmark GUI? Is that what's in https://imgur.com/Jca6afy ?
Only boot the multi-user.target (2nd link below) and run
dd if=/dev/zero of=/run/media/tdewolff/whatever/test.file bs=4k count=100kSubstitute the /run/media/tdewolff/whatever/test.file w/ the actual mount path - don't write the device directly (you'd shred the FS) and read the dd command thrice before hitting enter.
Online
Thank you Seth for your time. I have kind of given up, it takes almost 5 full days to fill the drive (2TB), but everyone seems to think this is inevitable (buy an SSD!). I see people with speeds of 30MB/s or up to 100MB/s, so I don't think it is "fine" to just transfer at 5MB/s.
Yes, KDiskMark has a very similar GUI which is the link you referenced. The Windows benchmark was taken while mounting an Ext4 drive through WSL2, which points to a folder on the drive, something like \\wsl2\Ubuntu\mnt\[long name]. Perhaps people are right that this doesn't really test write speed, but perhaps to something in memory? I'm unsure. It did leave some file behind on the drive...
It seems to transmit quicker now, between 10 and 15 MB/s, it changes a lot...I'll leave it like this I suppose.
I understand why WD doesn't advertise the speed on their product, since it is so much worse than an SSD and not even much cheaper.
Offline
HDDs provide >> 5MB/s on sequential I/O, just random access is pot. slow.
What was/is the output of the command in #5 and notably form the multi-user.target (no GUI, certainly no fat DE w/ file indexing features)?
Online
Sorry for the delay, I was transferring files for some days/nights. I have just run the tests you suggested, with the following results. I have instead opted for count=1000k (4GB) since the write buffer in the drive could easily absorb the 400MB in a second. I ran the command twice with little pause between, so hopefully the second test is more accurate for actual writing speed to the spinning disk.
graphical.target
1st 87 MB/s
2nd 63 MB/s
multi-user.target
1st 82 MB/s
2nd 68 MB/s
So no significant difference between both targets, but indeed much faster than 5MB/s I get with rclone ( I get about 400 MB/s with rclone to an external SSD). My typical rclone command is:
rclone copy --local-no-clone --local-no-sparse --checkers=1 --transfers=1 -P SRC DST
Perhaps rclone is not writing sequentially? I just did the following test, create a 4GB file on my local drive and use cp to copy to the external:
1st 24s (176 MB/s)
2nd 51s (82 MB/s)
3rd 49s (85 MB/s)
Perhaps using only zeros is faster, so I created a file with if=/dev/urandom:
1st 51s (83 MB/s) probably still a full cache from above
2nd 51s (83 MB/s) ah well, no difference with /dev/zero
3rd 1m1s (69 MB/s) interesting...
4th 2m30s (28 MB/s)
5th 3m1s (23 MB/s)
6th 3m34s (20 MB/s)
Perhaps the disk overheats and slows down?
Offline
Caused by "--checkers=1"?
Do you also create checksums?
Perhaps the disk overheats and slows down?
The more filled up the drive the more you'll run into fragmentation what's gonna by a huge overhead on HDDs because the head has to jump around between the free sectors.
Online