losetup -d funktioniert nicht immer

0

Mein Betriebssystem ist Slackware 13.1 (2.6.33.4-smp).

Ich renne losetup -d $dev in meinem benutzerdefinierten Skript als letzte Zeile, in der ein in ihm erstelltes Loop-Gerät freigegeben wird. Wie auch immer, es nicht immer sagt, dass das Gerät beschäftigt ist, obwohl nichts in meinem Skript damit mehr funktioniert. Dieses Skript wird viele Male direkt nacheinander aufgerufen. Manchmal wird das Gerät freigegeben, manchmal nicht. Aber wenn ich vorher einen "Schlaf 2" stelle losetup -d $dev dann tritt kein Problem auf. Es scheint, dass "losetup" etwas Zeit braucht oder ... (kann Ihnen nicht die Ausgabe von zeigen losetup -a jetzt nicht bei der Arbeit)

Gibt es eine Möglichkeit, das Löschen eines Loop-Geräts zu erzwingen? Hast du eine Idee?

John_Doe
quelle

Antworten:

0

Es ist möglich, dass der Zugriff auf das Gerät asynchron ist. Daher befinden sich die Daten Ihres mount / dd / -das, was auch immer Sie zum Schleifen gemacht haben, noch im Cache und werden gerade geleert. In diesem Fall, sync sollte helfen (kann jedoch das gesamte System verlangsamen, wenn andere E / A-Operationen ausgeführt werden).

Je nach Anwendungsfall und Umgebung eine einfache while-Schleife ( while ! losetup -d $dev; do sleep 2; done ) ist möglicherweise vorzuziehen (obwohl Sie nach einigen Versuchen eine Beendigungsbedingung hinzufügen sollten).

Patrick Georgi
quelle