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