循环设备无法正常消失

循环设备无法正常消失

我有一个脚本,用于挂载属于 LVM 映像的磁盘映像。它确实:

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

当有可用的循环设备时,这会很有用。

或者,然后卸载 img 我运行:

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.

它运行时没有错误,但是,我发现它并不总是删除循环设备以供以后使用。 losetup -a 通常会显示那些以前使用过的循环设备仍在其表中。 dmsetup 信息不显示循环设备,但我确实看到它们的 lsof 由 kthreadd 持有。因此,似乎没有办法在不重新启动的情况下删除 /dev/loop 设备,这似乎是用大锤来解决问题。我可以(而且经常这样做)最终构建新的循环设备来解决这个问题,但这是不可持续的,并且不能解决真正的问题。有没有人看到过这个和/或有任何其他我可以尝试的东西(fwiw,这发生在 3.18 和 4.1 内核系统上)。

相关内容