Eu monto a imagem do disco via dispositivo de loop (losetup -f image.img). Ele contém a tabela de partição e forço o kernel a lê-la: partprobe /dev/loop1.
Eu monto /dev/loop1p1, conserto coisas que quero consertar, desmonto o sistema de arquivos. Eu removo o arquivo do dispositivo de loopback (losetup -d /dev/loop1). Mas /dev/loop1p1 não desaparece.
Até tentei recriar o lodevice, adicionar e remover tabela de partições via fdisk. Mas todas as minhas tentativas falharam:
A tabela de partições foi alterada!
Chamando ioctl() para reler a tabela de partições.
AVISO: A releitura da tabela de partição falhou com o erro 22: Argumento inválido. O kernel ainda usa a tabela antiga. A nova tabela será usada na próxima reinicialização ou após você executar partprobe(8) ou kpartx(8) Sincronizando discos.
A partição não está em uso de forma alguma, mas não consigo liberá-la. Existe alguma maneira de removê-lo sem reiniciar?
Vejo no dmesg alguns registros:
[4649002.505727] loop1: rw=0, deseja=211812300, limite=62914560 [4649002.505753] Erro de E/S de buffer no dispositivo loop1p1, bloco lógico 52952562 [4649002.505870] tentativa de acesso além do final do dispositivo
E eles estão incomodando meus nagios.
Responder1
A reinicialização deve consertar seu kernel. E da próxima vez, em vez de executar losetup
manualmente partprobe
, use kpartx
:
kpartx -v -a image.img
e para derrubá-lo:
kpartx -d image.img