解锁新格式化的 LUKS 卷时,我在内核日志中收到警告:
kernel: device-mapper: table: 253:14: adding target device sdk1 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=33553920
根据另一个问题,错误警告是可能的,所以我确认这是一个真正的警告:33553920 不能被 4096 整除。我进一步使用 luksDump 确认:
cryptsetup luksDump /dev/sdk1 | grep 'Payload offset'
Payload offset: 65535
这不是 8 的倍数 (4096 ÷ 512 = 8)
lsblk -t /dev/sdk
确认 Linux 了解对齐要求:
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME
sdk 0 4096 33553920 4096 512 1 cfq 128 128 32M
└─sdk1 0 4096 33553920 4096 512 1 cfq 128 128 32M
dmsetup 记录在案以处理对齐本身,为什么它会产生错位?luksFormat 是否有理由避免这个问题?
dmsetup 似乎根据最佳 I/O 大小计算其对齐,而无需检查这实际上是物理块大小的倍数。如错误警告问题中所述,由于 USB 限制,此最佳 I/O 大小是有意义的。
所以解决方法很简单:使用
--align-payload
覆盖检测到的值。值 8 应该可以工作(并产生尽可能小的标题);cryptsetup 无法分辨时的默认值记录为 2048。所以我选择了默认值:之后,有效负载偏移量现在为 4096(来自 luksDump),并且仍然产生内核警告:
...但是 2097152 可以被 4096 整除,所以这是另一个问题中提到的错误警告。所以问题就解决了。