While creating an image of a (mostly empty) 1TB spinning hard disk, I was expecting a read speed of around 120 MB/s, and on the first blocks it was like that, but after that, most of the time it was reading at 320 MB/s, which I think it would be impossible for an HDD.
It's a Seagate 2.5" HD, connected to a USB3 port on the PC with a USB-SATA adapter, and I tested it on Linux.
I would say that the higher speed started when it finished reading the used blocks. Is it that the unused/zeroed space is "marked" as empty and the disk controller sends the zeroed-data without physically reading it from the disk surface?
If so, can this be marked by hand with some system command to improve things on a disk that is mostly empty?
EDIT:
This is how I'm creating the image: pv /dev/sdb > my1TBdisk.img