You are not logged in.

#1 2026-04-11 14:05:41

tdewolff
Member
Registered: 2018-10-13
Posts: 7

External HDD slow with Linux but not Windows

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:
Jca6afy]https://imgur.com/Jca6afy

On Windows (using WSL):
UoTpSy2]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: correct

It'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

#2 2026-04-11 14:12:13

Scimmia
Fellow
Registered: 2012-09-01
Posts: 13,702

Re: External HDD slow with Linux but not Windows

There's no way in hell you're actually getting those speeds from a 4800 RPM HDD. Windows is lying to you.

Offline

#3 2026-04-11 14:33:19

seth
Member
From: Don't DM me only for attention
Registered: 2012-09-03
Posts: 74,555

Re: External HDD slow with Linux but not Windows

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.

Offline

#4 2026-04-12 11:18:15

tdewolff
Member
Registered: 2018-10-13
Posts: 7

Re: External HDD slow with Linux but not Windows

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: 1

Offline

#5 2026-04-12 13:26:23

seth
Member
From: Don't DM me only for attention
Registered: 2012-09-03
Posts: 74,555

Re: External HDD slow with Linux but not Windows

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=100k

Substitute 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.

Offline

#6 2026-04-14 15:19:58

tdewolff
Member
Registered: 2018-10-13
Posts: 7

Re: External HDD slow with Linux but not Windows

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

#7 2026-04-14 15:25:33

seth
Member
From: Don't DM me only for attention
Registered: 2012-09-03
Posts: 74,555

Re: External HDD slow with Linux but not Windows

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)?

Offline

#8 Yesterday 08:27:52

tdewolff
Member
Registered: 2018-10-13
Posts: 7

Re: External HDD slow with Linux but not Windows

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

#9 Yesterday 12:54:09

seth
Member
From: Don't DM me only for attention
Registered: 2012-09-03
Posts: 74,555

Re: External HDD slow with Linux but not Windows

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.

Offline

Board footer

Powered by FluxBB