我正在尝试创建一个大小为 10M 的加密卷。我知道这是可能的,因为我有 10M 大小的坟墓。我已经运行了以下命令。
fallocate -l 10M container
cryptsetup -y -v luksFormat --progress-frequency 1 container
cryptsetup open --type luks container luksvol1
我收到以下错误消息。
Requested offset is beyond real size of device container.
但是如果我的容器大小为 20M,我的命令就会成功。为什么这会在 10M 时失败?10M 应该足够大以容纳加密的 luks 卷。
原始 LUKS 卷格式,现在称为 LUKS1,用于为元数据标头(密码参数、密钥槽等)保留 2 MiB,为实际数据留出 8 MiB。
但是随着使用不同元数据格式的 LUKS2 的引入,默认数据偏移量现在是16 MiB。问题是,
cryptsetup luksFormat
实际上并没有检查设备是否足够大,它只是盲目地写入标题。(在这两个格式版本中,key-slot 区域大的最初原因是使用了“反取证条带化”,即每个 32 字节的密钥分布在多个扇区中。但除此之外,LUKS2 还存储了一部分它的元数据使用 JSON 而不是打包的二进制结构,因此元数据区域已经扩大以解决新的开销。)
您的选择是:
使用初始化卷
luksFormat --type luks1
(将使用 2 MiB 偏移量);--luks2-metadata-size
或使用不同的和--luks2-keyslots-size
值初始化 LUKS 卷。(注意:我不知道最小安全尺寸是多少。)两个 LUKS 版本都使用相同的密码;LUKS2 的主要实际优势是它支持 Argon2 KDF,而 LUKS1 仅限于 PBKDF2。