
Estou tentando criar um LVM VG e LV, mas o LV não está alinhado.
Esta é minha posição inicial:
% 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
Observe que os ALIGNMENT
s são todos 0
(corretos).
On sdd2
, eu crio um VG test
e depois um 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.
No entanto, ALIGNMENT
for test-align--me
está errado:
% 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
Também vejo a seguinte mensagem de log (repetida 4 vezes):
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
Liguei vgcreate
com --dataalignmentoffset 4k
e também --dataalignment
com 1m
e 4m
mas os resultados são os mesmos.
Estou correndo:
LVM version: 2.02.182(2) (2018-10-30)
Library version: 1.02.152 (2018-10-30)
Driver version: 4.39.0
Responder1
Sintomas
O
lsblk -t
OPT-IO
valor era muito alto (apontado por Frostschutz)Ao executar
smartctl
no disco, eu estava vendo:Read Device Identity failed: scsi error unsupported field in scsi command
Causa
Parece que -1
é retornado se um valor de IO ideal não puder ser lido.
- 33553920/512 (tamanho lógico do setor) = 65535
- -1 representado como um valor de 16 bits = 65535. (2 16 = 65536)
Este 33553920
valor é então usado por pvcreate
/ vgcreate
para alinhar o primeiro PE ( pe_start
) conforme mostrado por:
sudo pvs -o +pe_start --units b
Gambiarra
Passando --dataalignment 1m
para vgcreate
terá pe_start
= 1048576B = 1MiB.
Isso garantirá que pe_start
esteja alinhado com um setor do disco, mas a mensagem de desalinhamento (incorreto) ainda será impressa.
Correção da causa raiz
Desativando UASna unidade teve o OPT-IO
valor retornado para 0
(consistente com minhas outras unidades de disco). Também permitiu smartctl
ser executado na unidade.
A aprovação --dataalignment 1m
não é necessária se esta correção for aplicada.