Como excluir o dispositivo de partição do dispositivo de loop?

Como excluir o dispositivo de partição do dispositivo de loop?

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 losetupmanualmente partprobe, use kpartx:

kpartx -v -a image.img

e para derrubá-lo:

kpartx -d image.img

informação relacionada