如何从循环设备中删除分区设备?

如何从循环设备中删除分区设备?

我通过循环设备 (losetup -f image.img) 安装磁盘映像。它包含分区表,我强制内核读取它:partprobe /dev/loop1。

我挂载了 /dev/loop1p1,修复了我想修复的东西,卸载了文件系统。我从回环设备中删除了文件(losetup -d /dev/loop1)。但 /dev/loop1p1 并没有消失。

我甚至尝试重新创建 lodevice,通过 fdisk 添加和删除分区表。但我的所有尝试都失败了:

分区表已被改变!

调用ioctl()重新读取分区表。

警告:重新读取分区表失败,错误 22:参数无效。内核仍使用旧表。新表将在下次重新启动时或运行 partprobe(8) 或 kpartx(8) 同步磁盘后使用。

分区未以任何方式使用,但我无法释放它。有没有办法在不重启的情况下删除它?

我在 dmesg 中看到一些记录:

[4649002.505727] loop1:rw=0,want=211812300,limit=62914560 [4649002.505753] 设备 loop1p1 上的缓冲区 I/O 错误,逻辑块 52952562 [4649002.505870] 尝试访问设备末尾以外的内容

它们正在骚扰我的 nagios。

答案1

重新启动应该可以修复你的内核。下次,不要手动运行losetup,而是partprobe使用kpartx

kpartx -v -a image.img

并将其拆除:

kpartx -d image.img

相关内容