So your migrating a lot of data, and generally you will realize in that migration that you’ve got to break up the migration pieces due to timeout or other break in transfer.
That all said, I found this to be about the best method for doing the transfer.
Rsync:
rsync -scaurPvvv --info=stats2,misc1,flist0,progress --partial-dir=/home/user/syncdir --timeout=1860 /media/disk01/storedir01/ /disk02/storedir01
Now, you can verify it by running a whole sync again, but, generally if you have massive files that really can break as you check them all at once. In this Md5deep makes a check file, and then checkes the another dir against the check file and does so quite quick.
Looks like this:
md5deep -r /media/disk01/storedir01/ > disk01store01.txt
Then verify the copy:
md5deep -x disk01store01.txt -r /media/disk02/store02/