Моя ОС является (2.6.33.4-smp) Slackware 13.1.
Я работаю losetup -d $dev
в моем пользовательском сценарии как последняя строка, которая освободит некоторое циклическое устройство, созданное в нем. Однако это не всегда работает, говоря, что устройство занято, хотя ничто в моем сценарии больше не работает с ним. Этот сценарий вызывается много раз одно право за другим. Иногда устройство освобождено, иногда нет. Но если я поместил "сон 2" прежде losetup -d $dev
затем без проблем никогда не происходит. Кажется, что "losetup" требуется некоторое время, или что-то... (не может показать Вам вывод losetup -a
теперь, не в работают правильно теперь),
Существует ли способ вызвать удаление некоторого циклического устройства? У Вас есть какие-либо идеи?
Возможно, что доступ к устройству является асинхронным, таким образом, данные Вашего mount/dd/whatever-you-did-to-the-loop-device все еще находятся в кэше и собираются быть сброшенными. В этом случае, sync
должен помочь (но мог бы замедлить всю систему к проверке, если другие операции IO-heavy продолжаются).
В зависимости от Вашего варианта использования и среды, простой цикл с условием продолжения (while ! losetup -d $dev; do sleep 2; done
) могло бы быть предпочтительным (хотя необходимо добавить условие выхода после нескольких попыток).