losetup -d 并不总是有效

losetup -d 并不总是有效

我的操作系统是 Slackware 13.1(2.6.33.4-smp)。

我正在运行losetup -d $dev我的自定义脚本作为最后一行来释放其中创建的一些循环设备。然而,它不总是运行后显示设备繁忙,但我的脚本中没有任何内容可以继续使用它。这个脚本被连续调用多次。有时设备被释放,有时没有。但如果我在此之前放置“sleep 2”,losetup -d $dev就不会出现任何问题。似乎“losetup”需要一些时间或其他东西……(现在无法显示输出losetup -a,现在不在工作)

有没有办法强制删除某些循环设备?你有什么想法吗?

答案1

对设备的访问可能是异步的,因此 mount/dd/whatever-you-did-to-the-loop-device 的数据仍驻留在缓存中,即将被刷新。在这种情况下,sync应该会有所帮助(但如果正在进行其他 IO 密集型操作,可能会使整个系统变慢)。

根据您的使用情况和环境,简单的 while 循环(while ! losetup -d $dev; do sleep 2; done)可能是更可取的(尽管您应该在几次尝试后添加退出条件)。

相关内容