dispositivos de loop não desaparecem apropriadamente

1

Eu tenho um script que eu uso para montar diskimages que são imagens de LVM. ele faz:

x='losetup -f'       #create a loop device
echo $x > loopdev    #echo that device to a file for later use
losetup $x disk.img  #mount the disk.img to the loop device
kpartx -av $x        #use kpartx to add the partition mappings
vgscan && vgchange -ay   #vgscan the new mappings and make active
mount /dev/VolGroupRoot/LogVolRoot /mnt   #mount the volgroup to /mnt
mount -o loop,offset=$((2048 * 512)) disk.img /mnt/boot    #mount the boot partition in the image to /mnt/boot

Isso funciona bem quando há dispositivos de loop disponíveis.

Alternativamente, para desmontar a img que eu executo:

umount /mnt/boot        #umount boot
umount /mnt             #umount volgroup
vgchange -an VolGroupRoot   #make volgroup inactive
x='cat loopdev'             #get my used loopdevice
kpartx -d $x                #delete the partition mappings
losetup -d $x               #detach the loop device
/bin/rm loopdev             #remove the loopdev file in prep for the next time I mount something using the script.

Isso é executado sem erros, no entanto, acho que nem sempre remove o dispositivo de loop para uso posterior. losetup -a mostra frequentemente os dispositivos de loop usados anteriormente ainda em sua tabela. A informação do dmsetup não mostra os dispositivos de loop, mas eu os vejo com o lsof sendo mantido pelo kthreadd. Como resultado, parece que não há como remover os dispositivos / dev / loop sem uma reinicialização, o que parece ser uma espécie de marreta para o problema. Eu posso (e freqüentemente faço) acabar criando novos dispositivos de loop para contornar isso, mas isso é insustentável e não resolve o problema real. Alguém viu isso e / ou tem outras coisas que eu posso tentar (fwiw, isso está acontecendo em 3.18 e 4.1 sistemas de kernel).

    
por Kevin Martin 04.10.2017 / 19:07

0 respostas