"script3 fails with
bs=4" – Because dd seek=, when given just a number, uses bs as the unit; but your calculation uses blockdev --getsz that counts 512-byte sectors, so it only works with bs=512. Does your blockdev support --getsize64? Does your dd support oflag=seek_bytes or seek=…B that imposes byte count? Can you take it from here?