Why does this work:
truncate -s 2043G foo
...while this fails:
truncate -s 2044G foo
Why 2043 gigabytes, of all values?
You're probably using a filesystem that has a 2TB maximum file size (for example, ext3 with a 4KB or 8KB block size).
That's a limitation of the file system you use. Here ZFS creates a whopping 7 Exabyte sparse file: