optimal_io_size太大导致LVM LV对齐不一致

optimal_io_size太大导致LVM LV对齐不一致

我正在尝试创建 LVM VG 和 LV,但 LV 未对齐。

这是我的起始位置:

% lsblk -t /dev/sdd
NAME   ALIGNMENT MIN-IO   OPT-IO PHY-SEC LOG-SEC ROTA SCHED       RQ-SIZE  RA WSAME
sdd            0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
├─sdd1         0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
├─sdd2         0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
└─sdd3         0   4096 33553920    4096     512    1 mq-deadline      60 128   32M

注意ALIGNMENTs 都是0(正确的)。

在 上sdd2,我创建了一个 VG test,然后创建了一个 LV align-me

% sudo vgcreate --pvmetadatacopies 2 --vgmetadatacopies 2 test /dev/6TBd1p2
  Physical volume "/dev/6TBd1p2" successfully created.
  Volume group "test" successfully created
% sudo lvcreate -L 64g -n align-me test
  Logical volume "align-me" created.

然而,ALIGNMENTfortest-align--me是错误的:

% lsblk -t /dev/sdd
NAME               ALIGNMENT MIN-IO   OPT-IO PHY-SEC LOG-SEC ROTA SCHED       RQ-SIZE  RA WSAME
sdd                        0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
├─sdd1                     0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
├─sdd2                     0   4096 33553920    4096     512    1 mq-deadline      60 128   32M
│ └─test-align--me        -1   4096        0    4096     512    1                 128 128   32M
└─sdd3                     0   4096 33553920    4096     512    1 mq-deadline      60 128   32M

我还看到以下日志消息(重复 4 次):

kernel: device-mapper: table: 254:6: adding target device sdd2 caused an alignment inconsistency: physical_block_size=4096, logical_block_size=512, alignment_offset=0, start=33553920

我已经vgcreate--dataalignmentoffset 4kand 打电话了--dataalignment1m4m结果是一样的。

我在跑:

LVM version:     2.02.182(2) (2018-10-30)
Library version: 1.02.152 (2018-10-30)
Driver version:  4.39.0

答案1

症状

  1. lsblk -t OPT-IO值确实很高(由弗罗斯特舒茨指出

  2. smartctl在磁盘上运行时,我看到:

    Read Device Identity failed: scsi error unsupported field in scsi command
    

原因

-1如果无法读取最佳 IO 值,则似乎会返回该值。

作为史蒂夫·迪伊指出:

  • 33553920 / 512(逻辑扇区大小)= 65535
  • -1 表示为 16 位值 = 65535。 (2 16 = 65536)

然后/33553920使用该值来对齐第一个 PE ( ),如下所示:pvcreatevgcreatepe_start

sudo pvs -o +pe_start --units b

解决方法

传递--dataalignment 1mvgcreate将有pe_start= 1048576B = 1MiB。

这将确保pe_start与磁盘扇区对齐,但仍会打印(不正确的)未对齐消息。

根本原因修复

禁用无人机系统驱动器上的OPT-IO值返回到0(与我的其他磁盘驱动器一致)。它还允许smartctl在驱动器上运行。

--dataalignment 1m如果应用此修复,则不需要通过。

相关内容