Estou desenvolvendo uma ferramenta de particionamento, para fins de teste tenho que executar configurações de particionamento e LVM repetidamente em um dispositivo de loopback
- Partição
/dev/loop0
com 3 partições/dev/loop0p1 /dev/loop0p2 /dev/loop0p3
- Criar LVMs
pvcreate /dev/loop0p2 /dev/loop0p3
vgcreate test_vg /dev/loop0p2 /dev/loop0p3
lvcreate -L 1GB test_vg -n vol1 --wipesignature y --zero y
lvcreate -L 1GB test_vg -n vol2 --wipesignature y --zero y
partprobe /dev/loop0
Após tal execução gostaria de retornar tudo novamente no mesmo dispositivo, porém, ao executar o particionamento estou recebendo o erro
Partition(s) 2, 3 on /dev/loop0 have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
Agora estou ciente de que uma solução é reiniciar, mas não é razoável fazer isso continuamente durante o desenvolvimento. Existe uma maneira de corrigir o problema sem precisar reiniciar o tempo todo?
Este erro parece ser causado quando você tenta modificar ou criar partições /dev/loopxp2 e /dev/loopxp3, apesar de ainda estarem em uso como volumes físicos para LVM.
LVM não é como particionamento nesse sentido. Mesmo que nenhum sistema de arquivos esteja montado, os volumes físicos ainda serão usados pelo próprio LVM.
Na sua pergunta você não menciona a criação. Um grupo de volumes. O princípio aqui é que você precisa operar em todo o grupo de volumes (todos disponíveis ou nada).
Para desconectá-lo e desmontar os dispositivos de loopback, você precisa do
vgexport
grupo de volumes; isso impedirá o LVM de usar os volumes físicos. Então você poderá manipular a tabela de partições sem erros.