![如何从循环设备中删除分区设备?](https://linux22.com/image/1421466/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%BE%AA%E7%8E%AF%E8%AE%BE%E5%A4%87%E4%B8%AD%E5%88%A0%E9%99%A4%E5%88%86%E5%8C%BA%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我通过循环设备 (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