Ich habe einen kleinen Linux-Server (Debian Squeeze), auf dem ein Samba-Server ausgeführt wird, der so konfiguriert ist, dass er einige Ordner für einige Windows-Computer freigibt. Beim Versuch, eines der Verzeichnisse aus Windows zu löschen, wurde der Fehler "Ordner kann nicht gelöscht werden" angezeigt.
Ich habe versucht, das Verzeichnis von der Linux-Konsole zu löschen. Es ist ein ähnlicher Fehler aufgetreten:
# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty
Ich habe den Inhalt des Verzeichnisses aufgelistet und eine Datei mit dem Namen .fuse_hidden gefolgt von einer Hex-Nummer (000bd8c100000185) gefunden.
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185
Ich habe versucht, die .fuse_hidden-Datei zu löschen, aber es wurde sofort eine neue Datei erstellt (beachten Sie die Änderung der Hex-Nummer).
# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186
Ich habe auch versucht, die Datei mit Midnight Commander ohne Erfolg zu löschen.
Andere Lösungen, die ich bisher gefunden habe, beinhalten GUI und ich habe nur Konsole.
Anregungen sind willkommen.
rm dir-name -rf
?Antworten:
Dies ist vergleichbar mit dem Löschen einer Datei, die auf einem anderen System in einem NFS-Mount geöffnet ist. Das Problem ist, dass die Datei aus dem Dateisystem entfernt wurde, während ihre "Linkanzahl"> 1 war, was bedeutet, dass andere Prozesse sie immer noch offen halten.
lsof dir-name/.fuse_hidden000bd8c100000185
, um herauszufinden, welche Prozesse das Dateihandle geöffnet halten.Wenn Sie eine Datei in Ihrem lokalen Dateisystem löschen, die von einem anderen Prozess geöffnet wurde, entspricht das Betriebssystem Ihrer Anforderung und entfernt sie aus der Verzeichnisstruktur. Der Inode, auf den die Struktur verweist, wird jedoch weiterhin vom Betriebssystem als verwendet betrachtet. Jedes Mal, wenn eine Datei geöffnet wird, wird die Anzahl der Verknüpfungen um eins erhöht, und der Speicherplatz wird nur dann freigegeben, wenn die Anzahl der Verknüpfungen Null erreicht.
Wenn Sie in ein Problem dieser Art laufen, bedeutet dies , dass das Betriebssystem aus irgendeinem Grunde hat beschlossen, nicht die Datei aus dem Verzeichnisbaum zu entfernen: in der Regel , weil es Grund zu der Annahme , dass es nach wie vor durch die Dinge zugegriffen werden muss, die nicht Verwenden Sie die direkte Inode-Nummer. Es scheint anfangs zu stimmen, aber hinter den Kulissen benennt das Betriebssystem es so um, dass es ein verstecktes Punktpräfix hat, auf das mit irgendeiner Form der Dateisystempfadadressierung weiterhin zugegriffen werden kann. Der Speicherplatz wird weiterhin freigegeben, wenn die Anzahl der Verknüpfungen Null erreicht. Dieses Objekt bleibt jedoch im Verzeichnis, bis die Verknüpfungen verschwunden sind.
quelle
lsof
half mir zu identifizieren, welcher Prozess die Datei noch las und ich konnte dann alles entfernen!lsof
undfuser
keine Prozesse für diese Datei aufrufen, irgendwelche Vorschläge?Vielen Dank für die Vorschläge, aber nichts hat bei mir geklappt. Aber ich habe eine Lösung gefunden: Ich habe die externe SSD auf einen PC mit Windows verschoben. Mit dem Datei-Explorer (mit "Versteckte Objekte" markiert) konnte ich
.Trashes
die.fuser_hidden
Datei löschen, indem ich in das Verzeichnis navigierte .Hoffe das hilft!
quelle