我通过循环设备 (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