umount fehlgeschlagen: Gerät beschäftigt

umount fehlgeschlagen: Gerät beschäftigt

Ich habe einen Ordner, /tmpder als gemountet ist ramfs. Nach einigen Aktionen, die mein Skript ausführt, lösche ich alles in diesem Ordner mit dem Befehl:

rm -R -f "$tmp_dir"/{*,.*}

Dann versuche ich, das Verzeichnis auszuhängen, aber beim ersten Versuch funktioniert es nicht, weil das Gerät beschäftigt ist. Nach einer Ruhepause von 0,5 Sekunden ist das Aushängen erfolgreich.

Ich habe mit einem der folgenden Befehle überprüft, dass kein Prozess den Ordner oder irgendetwas darin verwendet:

fuser -m "$tmp_dir"
fuser "$tmp_dir"
lsof +d "$tmp_dir"
lsof "$tmp_dir"

Warum sollte das Gerät beim ersten Versuch beschäftigt sein?


Bearbeitung Nr. 1 (30. September, 18:32 UTC):
Wenn ich ausführe find "$tmp_dir" -delete, ist das Unmounten beim ersten Mal erfolgreich!
Aber dann findbeschwert sich der Befehl, dass $tmp_direr beschäftigt ist.


Bearbeitung Nr. 2 (30. September, 18:45 UTC):
Dabei statfiel mir vor und nach dem erfolgreichen Unmounten eine Veränderung der Ordnergröße auf:

$ stat '/tmp/tmp.nbljlVcmix'
  File: `/tmp/tmp.nbljlVcmix'
  Size: 0           Blocks: 0          IO Block: 4096   directory
Device: 17h/23d Inode: 121188      Links: 2
Access: (0700/drwx------)  Uid: ( 1000/     dor)   Gid: (    0/    root)
Access: 2013-09-30 20:37:51.430769893 +0300
Modify: 2013-09-30 20:37:51.430769893 +0300
Change: 2013-09-30 20:37:51.430769893 +0300
$ umount '/tmp/tmp.nbljlVcmix'
umount: /tmp/tmp.nbljlVcmix: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
$ sleep 0.5
$ umount '/tmp/tmp.nbljlVcmix'
$ stat '/tmp/tmp.nbljlVcmix'
  File: `/tmp/tmp.nbljlVcmix'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 806h/2054d  Inode: 2401825     Links: 2
Access: (0700/drwx------)  Uid: ( 1000/     dor)   Gid: (    0/    root)
Access: 2013-09-30 20:37:47.600513531 +0300
Modify: 2013-09-30 20:37:47.600513531 +0300
Change: 2013-09-30 20:37:47.610513892 +0300

Bearbeitung Nr. 3 (1. Okt., 11:04 UTC):
Ich habe den gesamten Code (einzelne Datei) nach folgendem kopiert:http://pastebin.com/RJP6eQiy(Gültig für 1 Monat)

Das Relevante umountsteht im cleanupVerfahren, also in Zeile Nr. 346 umount "$DEST_DIR".

Antwort1

Ich glaube, die Festplatte muss vor dem Umounten zuerst „synchronisiert“ werden (um den Festplattencache zu leeren/schreiben). Fügen Sie nach Ihrem „rm“-Befehl „sync“ hinzu (einige Betriebssysteme erfordern zwei Sync-Befehle) und führen Sie dann das Umounten durch. Ihre „busy“-Meldung sollte verschwinden.

verwandte Informationen