A couple of years ago I bought a fast 32 GB USB3 Flash stick so I could quickly transfer really large files of several GB. The investment was well worth it, the stick was much faster than anything I had before. Another thing I do quite often is to create bootable micro-SD cards, e.g. as system volume for Raspberry Pis or as boot disks to install Ubuntu on notebooks. This was often a tedious exercise as the micro-SD cards I used so far could only be written to with speeds of less than 20 MB/s. However, manufacturers claim that there are much faster micro-SD cards on the market so I recently bought myself a new USB3 UHS-1 capable micro-SD card reader and somewhat more expensive (but still cheap) micro-SD cards to see if those small cards could really reach higher speeds.
The Test Setup
The micro-SD card reader I bought for the purpose was a cheap Hama USB3 card reader for 11 euros. The reviews were good, otherwise I would have been skeptical given the low price. The fastest card I bought for my test and for immediate and future use was a 32 GB SanDisk Extreme for 12 euros. Again, not very expensive, such cards used to cost a lot more. To compare I bought a 16 GB Transcend ‘Premium’ card for 4 euros.
Gigabyte Files
To test read and write performance of large files and partition dumps I generated a 16 GB random file which I then wrote to several micro-SD cards and then read back. I made sure that the 16 GB of data were correctly written to the card and read back by comparing the md5 hash of the original file with the hash of the data that was read back. In all cases the hash was correct so even my old and slow micro-SD cards I used for the comparison could still store the data without any problems.
The Results
The following table shows the performance of four different cards. The SanDisk Extreme almost reached the advertised data rates, I could measure a sustained data rate over several minutes of 92 MB/s for reading and 62 MB/s for writing. Another important value that is often reported is the number of IO operations a card can handle per second when a lot of small files are transferred. I didn’t try that as this is not my use case. The following table shows how other micro-SD cards I had compare to the SanDisk Extreme:
Card Type | Read Speed |
Write Speed |
SanDisk Extreme, 32 GB |
92 MB/s | 62 MB/s |
Transcend Premium, 16 GB | 91 MB/s | 26 MB/s |
SanDisk Ultra 16 GB |
47 MB/s | 17 MB/s |
Kingston, Low end, 16 GB, Cat. 4 |
23 MB/s | 13 MB/s |
Quite a difference! And here are the commands I used to generate the 16 GB random file in case you’d like to do the same exercise, how I wrote it to the different micro-SD cards and how I read them back straight into the md5hash generator:
# Create the random file dd if=/dev/urandom of=rnd_data-16GB.img bs=1024 count=15187968 # Write the data to the micro-SD card sudo dd status=progress bs=4M if=rnd_data-16GB.img of=/dev/sdX # Read the data back, get the speed and the md5 hash sudo dd if=/dev/sdX bs=1024 count=15187968 | md5sum # Note: Replace /sdX with the device ID assigned by the OS to the micro-SD card and be careful not to overwrite partitions on the wrong device. dd is dangerous! Think before use!