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 。

然後/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如果套用此修復,則不需要通過。

相關內容