the most basic solution that will work for every filesystem and every type of block device without even mounting anything, but won’t actually check much except device-level checksums:
sudo pv -X /dev/sda
or even just:
sudo cat /dev/sda >/dev/null
and it’s pretty inefficient if the device doesn’t actually have much data, because it also reads (and discards) empty space.
for copy-on-write filesystems that store checksums along with the data, you can request proper integrity checks and also get the nicely formatted report about how well that went.
for btrfs:
sudo btrfs scrub start -B /
or zfs:
sudo zpool scrub -a -w
for classic (non-copy-on-write) filesystems that mostly consist of empty space I sometimes do this:
sudo tar -cf - / | cat >/dev/null
the cat and redirection to /dev/null is necessary because GNU tar contains an optimization that doesn’t actually read anything when it detects /dev/null as the target.
On macOS / Linux you can use dd to “copy” everything from /dev/yourssd to /dev/null. Just be careful not to do it the other way!
https://www.man7.org/linux/man-pages/man1/dd.1.html
I have no idea if forcing a read is good / the right way. I’m just answering how to do it.
/dev/null is “empty” if you read it, its /dev/zero you dont want to dd onto your disk.