The original LUKS volume format, now known as LUKS1, used to reserve 2 MiB for the metadata header (cipher parameters, key slots, etc.) leaving you with 8 MiB for the actual data.
But with introduction of LUKS2 which uses a different metadata format, the default data offset is now 16 MiB. The problem is, cryptsetup luksFormat
does not actually check whether the device is large enough, it just blindly writes the header.
(In both format versions, the original reason for a large key-slot area is the usage of "anti-forensic striping", i.e. each 32-byte key is spread across multiple sectors. But in addition to that, LUKS2 stores a part of its metadata using JSON instead of packed binary structures, so the metadata area has been grown to account for the new overhead.)
Your options are either to:
initialize the volume using luksFormat --type luks1
(which will use a 2 MiB offset);
or initialize the LUKS volume with different --luks2-metadata-size
and --luks2-keyslots-size
values. (Note: I don't know what the minimum safe size is.)
Both LUKS versions use the same ciphers; the main practical advantage of LUKS2 is that it supports the Argon2 KDF while LUKS1 is limited to PBKDF2 only.