Benchmarking USB Drives with Shell Scripts – Part 1: Why I Built a Benchmark Script
Introduction
When I upgraded from an old 8GB USB stick to a shiny new 256GB one, I expected faster speeds and more convenience—especially for carrying around multiple bootable ISO files using Ventoy. With modern Linux distributions often exceeding 4GB per ISO, my old drive could barely hold a single image. But I quickly realized that storage space was only half the story—performance matters too.
Curious about how much of an upgrade I had actually made, I decided to benchmark the read speed of both USB sticks. Instead of hunting down benchmarking tools or manually comparing outputs, I turned to ChatGPT to help me craft a reliable, repeatable shell script that could automate the entire process. In this post, I’ll share how ChatGPT helped me go from an idea to a functional USB benchmark script, and what I learned along the way.
The Goal
I wanted to answer a few simple but important questions:
- How much faster is my new USB stick compared to the old one?
- Do different USB ports affect read speeds?
- How can I automate these tests and compare the results?
But I also wanted a reusable script that would:
- Detect the USB device automatically
- Find or use a test file on the USB stick
- Run several types of read benchmarks
- Present the results clearly, with support for summary and CSV export
Getting Help from ChatGPT
I asked ChatGPT to help me write a shell script with these requirements. It guided me through:
- Choosing benchmarking tools:
hdparm
,dd
,pv
,ioping
,fio
- Auto-detecting the mounted USB device
- Handling different cases for user-provided test files or Ubuntu ISOs
- Parsing and converting human-readable speed outputs
- Displaying results in human-friendly tables and optional CSV export
We iterated over the script, addressing edge cases like:
- USB devices not mounted
- Multiple USB partitions
pv
not showing output unlessstderr
was correctly handled- Formatting output consistently across tools
ChatGPT even helped optimize the code for readability, reduce duplication, and handle both space-separated and non-space-separated speed values like “18.6 MB/s” and “18.6MB/s”.
Benchmark Results
With the script ready, I ran tests on three configurations:
1. Old 8GB USB Stick
hdparm 16.40 MB/s
dd 18.66 MB/s
dd + pv 17.80 MB/s
cat + pv 18.10 MB/s
ioping 4.44 MB/s
fio 93.99 MB/s
2. New 256GB USB Stick (Fast USB Port)
hdparm 372.01 MB/s
dd 327.33 MB/s
dd + pv 310.00 MB/s
cat + pv 347.00 MB/s
ioping 8.58 MB/s
fio 992.78 MB/s
3. New 256GB USB Stick (Slow USB Port)
hdparm 37.60 MB/s
dd 39.86 MB/s
dd + pv 38.13 MB/s
cat + pv 40.30 MB/s
ioping 6.88 MB/s
fio 73.52 MB/s
Observations
- The old USB stick is not only limited in capacity but also very slow. It barely breaks 20 MB/s in most tests.
- The new USB stick, when plugged into a fast USB 3.0 port, is significantly faster—over 10x the speed in most benchmarks.
- Plugging the same new stick into a slower port dramatically reduces its performance—a good reminder to check where you plug it in.
- Tools like
hdparm
,dd
, andcat + pv
give relatively consistent results. However,ioping
andfio
behave differently due to the way they access data—random access or block size differences can impact results.
Also worth noting: the metal casing of the new USB stick gets warm after a few test runs, unlike the old plastic one.
Conclusion
Using ChatGPT to develop this benchmark script was like pair-programming with an always-available assistant. It accelerated development, helped troubleshoot weird edge cases, and made the script more polished than if I had done it alone.
If you want to test your own USB drives—or ensure you’re using the best port for speed—this benchmark script is a great tool to have in your kit. And if you’re looking to learn shell scripting, pairing with ChatGPT is an excellent way to level up.
Want the script?
I’ll share the full version of the script and instructions on how to use it in a follow-up post. Stay tuned!