In the first versions of Unix, a block was 512 bytes all the way from the hardware through the filesystem through C code to user tools.
Nowadays there are many different types of hardware and many different filesystems (some of which don't have any notion of block size), so “block size” is an arbitrary definition chosen by each tool. Most traditional Unix systems have retained the 512-byte block size by default for backward compatibility, and this is what POSIX mandates for several commands (
find -size, …). Several GNU/Linux utilities display 1kB units by default (
ls, …) unless invoked in
POSIXLY_CORRECT mode. I think the move to 1kB is solely motivated because it's a lot friendlier to humans.
fdisk utility uses 1kB blocks — the header might as well read
kB. In expert mode, the unit is sectors of 512 bytes. 512 byte is a more natural low-level unit for traditional PC disks because they write in 512-byte sectors, and partition boundaries are aligned to 512 bytes, so using 1kB as the unit leads to ½ fractions. Modern large disks have larger sectors, and GPT partitions are normally aligned on 1MB.