There are many, but I'll be talking about just two.
IOMeter is a benchmarking tool that is very featured. You frequently find it being used by the major benchmarking sites when discussing performance of new storage systems. Anandtech used it for ages, and may still do so as a tool in their overall benchmarking suite.
My personal favorite, IOZone has fewer features than IOMeter but it easier to use. You can get a reasonably good benchmark with very few flags, and can tune it to get exactly what you're looking for. It also has a throughput-test mode where it'll spawn multiple simultaneous testing threads so you can get an idea of the differences between one big process hammering storage, and lots of processes hammering storage.
Both of these tools blow
hdparm -t out of the water when it comes to relevancy. HDParm doesn't deal with enough data to not fully exclude system effects of memory.
When benchmarking virtual spaces, be aware that storage performance is by necessity much less predictable than it is on dedicated storage. Both of these tests can saturate the I/O channel between you and storage, which in turn means that some other VM experiencing high I/O can throw off your numbers, and your benchmarking throw off theirs in return.
IOZone, as I said, is easy to use. This will give you a real solid IO workout:
iozone -a -s 8G
That'll do a full benchmarking series on an 8GB file. You want the file to be larger than RAM in the box so may be smaller or larger depending on what you're doing.