设备映射器表对齐不一致

设备映射器表对齐不一致

在日记中,我收到诸如以下内容:

Jan 27 18:23:08 tara kernel: device-mapper: table: 254:2: adding target device sdb2 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=33553920
Jan 27 18:23:08 tara kernel: device-mapper: table: 254:2: adding target device sdb2 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=33553920
Jan 27 18:23:08 tara kernel: device-mapper: table: 254:3: adding target device sdb2 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=34393292288
Jan 27 18:23:08 tara kernel: device-mapper: table: 254:3: adding target device sdb2 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=34393292288

我该如何解释这一点:

  • 这里究竟什么地方对齐不正确?
  • 数字从哪里来start=

如何才能使对齐方式一致?


更多信息:

[ravi@tara ~]$ uname -a
Linux tara 4.8.17-1-MANJARO #1 SMP PREEMPT Mon Jan 9 10:24:58 UTC 2017 x86_64 GNU/Linux
[ravi@tara ~]$ lsblk
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  3.7T  0 disk
sdb                   8:16   0  3.7T  0 disk
├─sdb1                8:17   0  200M  0 part
└─sdb2                8:18   0  3.7T  0 part
  ├─usb-eMMC_backup 254:2    0   32G  0 lvm
  └─usb-ark         254:3    0  3.6T  0 lvm  /ark
sdc                   8:32   1  7.5G  0 disk
└─sdc1                8:33   1  7.5G  0 part
mmcblk0             179:0    0 29.1G  0 disk
├─mmcblk0p1         179:1    0  200M  0 part /mnt/esp
└─mmcblk0p2         179:2    0 28.9G  0 part
  ├─lvm-root        254:0    0   24G  0 lvm  /
  └─lvm-swap        254:1    0  4.9G  0 lvm  [SWAP]
mmcblk0boot0        179:8    0    4M  1 disk
mmcblk0boot1        179:16   0    4M  1 disk
mmcblk0rpmb         179:24   0    4M  0 disk
[ravi@tara ~]$

答案1

该警告表明分区和 LVM 设备可能未对齐,如检查中所定义的blk_stack_limits。您可以检查输出的值lsblk -t /dev/sdb并检查所捕获的不对齐类型blk_stack_limits(例如,物理是逻辑块大小的倍数,opt 和 min I/O 是物理块大小的倍数等)

2019-03-03 更新:正如@derobert 在评论中指出的那样,在这种情况下,警告是正确的。您的 PV 从字节 33,553,920 开始,它不是物理块大小 4,096 的倍数。要纠正此问题,您需要移动或重新创建 PV/分区以从 4,096 的倍数开始(例如,通过传递--dataalignmentvgcreate/pvcreate--offsetcryptsetup)。

不幸的是,即使在纠正开始之后,“对齐不一致”消息仍将继续打印。 Sven Eschenberg 在 dm-crypt 列表上的一个长帖子中得出的结论是,其中一些检查可能会产生不正确的警告。 特别是,如果sdb是 USB 磁盘,则最佳 I/O 大小可能不是物理扇区大小的倍数(例如,我有一个 4k USB3 磁盘,报告为physical_block_size4,096 和optimal_io_size33,553,920)。这些值是正确的(如驱动器报告的)、合理的(由于 USB 限制),并且不基于任何设备映射器参数。

问题在于,其中的逻辑blk_stack_limits假设最佳 I/O 大小将是物理扇区大小的倍数,但对于某些设备而言并非如此。一旦这是唯一存在的问题,您就可以安全地忽略该警告。

2019-03-03 更新: 不幸的是,一些工具可能会创建这些不正确对齐的 PV/分区。相关问题/修复:

答案2

结盟确保驱动器的最佳使用,有时软件会出现此错误并通过使用更大的缓存进行补偿,请检查

cat /sys/block/sd?/queue/optimal_io_size

要纠正您必须重新格式化(可能是 GPT/LVM 层)的问题,请查看 pvcreate 的 --dataalignment 和 --dataalignmentoffset

答案3

解释

第一个值start=33553920目标设备中第一个 LV 的第一个 PE 的偏移量(上面/dev/sdb2)。

这可以通过以下方式确认:

sudo pvs -o +pe_start --units b 

还有另一个start=重复的值,因为sdb2的 VG 包含两个 LV(usb-eMMC_backupusb-ark)。我不知道为什么每个都是重复的。

原因

存在对齐不一致的原因是pe_start不能被PHY-SEC以下值整除:

lsblk -t /dev/sdb

PHY-SEC是 4096,并且 33553920 % 4096 != 0。

pe_start如果不对齐(默认 PE 大小为 4MiB),VG 中的所有 LV 都会错位。

解决

需要创建可被pe_start磁盘扇区大小整除的 VG。

传递到--dataalignment 1mvgcreatepe_start= 1048576B = 1MiB

如果我仍然得到怎么办alignment inconsistency

假设底层分区已对齐,仍然可能会生成(不正确的)对齐消息。看这个答案了解可能的原因和解决方法,尤其是在使用 USB 连接的 SATA (UAS) 时。

相关内容