Explanation and solution for badblocks 32-bit limitation: We use badblocks in the shop all of the time on our Ubuntu and Arch Linux machines to test disks and perform basic wipes. This problem arises because badblocks can only accept a LBA size (the number of sectors available to read/write on a drive) if it is a 32-bit integer. A simple solution is to run your command as follows, changing the block size from the default to 4096:
original command:
badblocks -sw -t random /dev/devicename
fixed command:
badblocks -sw -t random -b 4096 /dev/devicename
Hope this tip is helpful to somebody out there!