dmsetup luksFormat 创建对齐不一致

dmsetup luksFormat 创建对齐不一致

当解锁新格式化的 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 是否有参数可以避免这个问题?

答案1

看起来 dmsetup 根据最佳 I/O 大小计算其对齐方式,而无需检查这实际上是物理块大小的倍数。正如错误警告问题中提到的,由于 USB 限制,这种最佳 I/O 大小是有意义的。

所以解决方案很简单:使用--align-payload覆盖检测到的值。值 8 应该有效(并产生尽可能小的标头);当 cryptsetup 无法识别时,默认值记录为 2048。所以我使用默认值:

cryptsetup luksFormat /dev/sdk1 --align-payload 2048 --verify-passphrase --hash sha512 -s 512

之后,有效负载偏移量现在为 4096(来自 luksDump),并且仍然会产生内核警告:

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=2097152

...但是 2097152 可以被 4096 整除,所以这是另一个问题中提到的错误警告。这样问题就解决了。

相关内容