How to discover if disk, cable or port is bad?

ideas (may not be useful): badblocks, rsync, ddrescue, dcfldd

I was told that my ext. backup HDD, its USB port or cable has issue because it corrupted ZFS pool. Someone suggested backblocks software (it writes and reads pattern and compare), but why to waste the disk writes, can i use rsync to write the data i need to write and check it was writen 100% correctly (maybe during next rsync run with --checksum switch?). What would be the benefit of finding it was not written correctly? It would not tell me if drive, cable or port is bad?

rsync -av --checksum /source/ /destination/
sudo dcfldd if=/dev/sdb of=usb.img bs=3M hash=sha256 hashlog=sha256.txt; sha256sum usb.img ---