为什么 cryptsetup 在容器大小为 10M 时会失败?

为什么 cryptsetup 在容器大小为 10M 时会失败?

我正在尝试创建一个 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 卷。

答案1

原始 LUKS 卷格式(现在称为 LUKS1)用于为元数据头(密码参数、密钥槽等)保留 2 MiB,剩下 8 MiB 用于实际数据。

但随着使用不同元数据格式的 LUKS2 的推出,默认数据偏移量现在是16 英里。问题是,cryptsetup luksFormat实际上并没有检查设备是否足够大,它只是盲目地写入标题。

(在这两种格式版本中,密钥槽区域较大的最初原因是使用“反取证条带化”,即每个 32 字节密钥分布在多个扇区中。但除此之外,LUKS2 使用 JSON 而不是打包的二进制结构来存储其部分元数据,因此元数据区域已经扩大以应对新的开销。)

您的选择包括:

  • 使用初始化卷luksFormat --type luks1(将使用 2 MiB 偏移量);

  • --luks2-metadata-size或者使用不同的和值初始化 LUKS 卷--luks2-keyslots-size。(注意:我不知道最小安全尺寸是多少。)

两个 LUKS 版本都使用相同的密码;LUKS2 的主要实际优势在于它支持 Argon2 KDF,而 LUKS1 仅限于 PBKDF2。

相关内容