Beheben Sie den Fehler "rm: Datei kann nicht entfernt werden – Gerät oder Ressource ausgelastet"
Wenn Sie jemals versucht haben, eine Datei oder ein Verzeichnis unter Linux mit dem Befehl rm zu löschen, und der Fehler angezeigt wird:
rm: cannot remove 'file-or-directory': Device or resource busy
Keine Sorge, dies ist ein häufiges Problem, das einfach bedeutet, dass die Datei oder das Verzeichnis, das Sie entfernen möchten, derzeit vom System oder von einem derzeit ausgeführten Prozess verwendet wird.
Warum dieser Fehler auftritt
Wenn Sie die Meldung "Gerät oder Ressource ausgelastet" sehen, bedeutet dies, dass die Datei oder das Verzeichnis derzeit verwendet wird. Linux hindert Sie daran, Dateien zu löschen, die verwendet werden, um zu vermeiden, dass Dinge beschädigt oder Datenverluste verursacht werden.
Hier sind einige häufige Gründe, warum dies geschieht:
- Sie versuchen, ein Verzeichnis zu löschen, in dem sich Ihr Terminal gerade befindet.
- Ein Programm oder Prozess verwendet die Datei oder das Verzeichnis.
- Ein Gerät (z. B. ein USB-Laufwerk oder eine Netzwerkhalterung) ist noch gemountet und wird verwendet.
In diesem Artikel erklären wir Ihnen, warum dies passiert und wie Sie es beheben können.
1. Verlassen Sie das Verzeichnis
Um herauszufinden, wo Sie sich im Dateisystem befinden, können Sie den Befehl pwd verwenden, der für "print working directory" steht und Ihren aktuellen Standort anzeigt.
pwd
Wenn die Ausgabe anzeigt, dass Sie sich in dem Ordner befinden, den Sie löschen möchten, müssen Sie ihn zuerst verlassen, indem Sie mit dem Befehl cd in Ihr Home-Verzeichnis (oder einen anderen sicheren Speicherort) wechseln:
cd ~
Nachdem Sie das Verzeichnis verlassen haben, können Sie versuchen, es mit dem Befehl rm erneut zu löschen:
rm -rf /path/to/the/directory
Dieses Mal blockiert Linux den Befehl nicht, da Ihr Terminal dieses Verzeichnis nicht mehr verwendet.
2. Überprüfen Sie, was die Datei oder das Verzeichnis verwendet
Wenn Linux sagt, dass eine Datei oder ein Verzeichnis "beschäftigt" ist, bedeutet dies, dass sie noch von einem Programm oder Prozess verwendet wird. Bevor Sie es löschen können, müssen Sie herausfinden, was es verwendet, und diese Nutzung stoppen.
Zu diesem Zweck können Sie einen Befehl namens lsof verwenden, der für "list open files" steht und Ihnen hilft zu sehen, welche Prozesse an Ihrer Datei oder Ihrem Verzeichnis festhalten.
lsof +D /path/to/directory
Es werden alle Prozesse aufgelistet, die Dateien in diesem Verzeichnis verwenden. Sie sehen eine Ausgabe, die anzeigt, welcher Befehl ihn verwendet, die Prozess-ID (PID), den Benutzer, der ihn ausführt, und vieles mehr.
Sie könnten zum Beispiel etwas sehen wie:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 4312 user cwd DIR 8,1 4096 2 /mnt/data
Sobald Sie sie identifiziert haben, können Sie die zugehörigen Programme schließen oder die Prozesse mit dem Befehl fuser stoppen.
fuser -v /path/to/directory
So beenden Sie alle Prozesse, die das Verzeichnis verwenden (mit Vorsicht verwenden):
fuser -k /path/to/directory
3. Heben Sie die Bereitstellung des Geräts auf (wenn es sich um ein bereitgestelltes Verzeichnis handelt)
Manchmal wird das Verzeichnis, das Sie löschen möchten, tatsächlich als Einhängepunkt verwendet, was bedeutet, dass ein Speichergerät, wie z. B. ein USB-Laufwerk, eine externe Festplatte oder eine Netzwerkfreigabe (wie NFS), derzeit an dieser Stelle im Dateisystem angehängt (oder "gemountet") ist.
Wenn ein Gerät eingehängt wird, behandelt Linux es wie einen Teil des Hauptdateisystems, aber Sie können das Einhängepunktverzeichnis nicht löschen, während das Gerät noch verwendet wird. Aus diesem Grund erhalten Sie die Fehlermeldung "Gerät oder Ressource ausgelastet".
Um zu überprüfen, ob Ihr Verzeichnis tatsächlich gemountet ist, führen Sie Folgendes aus:
mount | grep /path/to/directory
Wenn der Befehl eine Ausgabezeile mit Ihrem Pfad anzeigt, bedeutet dies, dass das Verzeichnis als Einhängepunkt verwendet wird.
Möglicherweise sehen Sie z. B. etwas wie dieses, was bedeutet, dass ein USB-Gerät unter /mnt/usb gemountet ist.
/dev/sdb1 on /mnt/usb type vfat (rw,nosuid,nodev)
Nachdem Sie bestätigt haben, dass das Gerät gemountet ist, müssen Sie es aushängen, bevor Sie das Verzeichnis löschen.
umount /mnt/usb
Manchmal wird auch nach dem Versuch, die Bereitstellung aufzuheben, die Meldung "Ressource ausgelastet" angezeigt, was bedeutet, dass das Gerät noch von einem Prozess verwendet wird.
In diesem Fall können Sie ein Lazy Unmount versuchen, das das Gerät sofort vom Dateisystem trennt, aber warten Sie, bis es vollständig entfernt wird, bis alle Prozesse aufhören, es zu verwenden.
umount -l /mnt/usb
Wenn das verzögerte Aushängen auch nicht funktioniert und Sie sicher sind, dass das Gerät nicht verwendet wird, können Sie versuchen, das Aushängen zu erzwingen:
umount -f /mnt/usb
Warnung: Erzwungene Demounts können zu Datenverlust führen, wenn noch auf das Gerät geschrieben wird. Verwenden Sie diese Option nur, wenn Sie absolut sicher sind, dass dies sicher ist – zum Beispiel, wenn das Gerät feststeckt und Sie es nur entfernen müssen.
Sobald das Gerät ausgehängt ist, löschen Sie das Verzeichnis.
rm -rf /mnt/usb
Schlussfolgerung
Der Fehler "Gerät oder Ressource ausgelastet" bedeutet normalerweise, dass die Datei oder das Verzeichnis noch verwendet wird. Mit ein paar einfachen Überprüfungen, wie z. B. dem Verlassen des Verzeichnisses, dem Überprüfen laufender Prozesse oder dem Aushängen von Geräten, können Sie das Problem schnell beheben.
Stellen Sie immer sicher, dass es sicher ist, Prozesse zu beenden oder Geräte auszuhängen, bevor Sie dies tun. Sobald dies erledigt ist, sollte Ihr rm-Befehl wie erwartet funktionieren.