Contexto
Estou executando um sistema Red Hat Enterprise Linux versão 8.5 em uma VM em um VMWare ESXI.
Eu precisava de mais espaço em um volume lógico preciso chamado lv_pmp
naquela VM:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Então redimensionei o disco da VM para 500G nas propriedades do VSphere que apareceram na sda
parte:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Em seguida, redimensionei o sda3
volume físico para corresponder ao espaço em disco recém-adicionado com
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Aumentei o lv_pmp
tamanho do volume lógico:
$ lvextend /dev/mapper/VGslash-lv_pmp -l+100%FREE
E atualizou o sistema de arquivos para que ele detectasse o novo tamanho:
$ xfs_growfs /dev/mapper/VGslash-lv_pmp
Até agora tudo bem, obtive o tamanho que esperava no lv_pmp
volume lógico:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 418,4G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Problema
O problema surge assim que reinicio o sistema: ele parece perder as alterações de tamanho que fiz no sda3
volume físico, o que consequentemente impede que o lv_pmp
volume lógico seja montado (pois ele assume que não há espaço suficiente no PV pai):
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 76,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
└─VGslash-lv_var 253:10 0 3G 0 lvm /var
sr0 11:0 1 1024M 0 rom
Solução alternativa
É possível colocá-lo de volta em forma executando os seguintes comandos manualmente após a reinicialização:
### Re-apply physical volume changes
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
### Re-scan logical volumes
$ vgscan --mknodes -v
$ vgchange -a y
Pergunta
Por que isso está acontecendo? E o que posso fazer para evitar isso?
Não sei se isso está relacionado ao próprio sistema operacional, ao ambiente da VM ou a algum outro fator que não controlo. Qualquer conselho a esse respeito também ajudaria.
A solução alternativa acima não é realmente satisfatória, mesmo que eu pudesse colocá-la em um script na inicialização, ter que executar essa ação a cada inicialização não parece certo: não faz sentido para mim que uma alteração no tamanho do volume não persista após uma reinicialização.
resizepart
não atualiza estruturas no disco. Ele só faz alterações nas estruturas live do kernel. Consultoriaman resizepart
:Você precisa usar
fdisk
(ou qualquer outro editor de partição) para alterar a partição no disco e, em seguida, atualizar a visualização do kernel usandoresizepart
(oukpartx
, oupartprobe
, ou reinicializar).Existe uma ferramenta chamada
growpart
que faz as duas coisas, e online.