Wie lösche ich .fuse_hidden * Dateien?

34

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.

Lando
quelle
3
Der Fuse-Daemon scheint aktiv zu sein. Beenden Sie es, bevor Sie die Datei löschen.
ott--
Ich habe meinen Kommentar inzwischen geändert.
ott--
Das war mein erster Gedanke, aber ich konnte keinen Fuse-Dienst zum Beenden finden. Stattdessen habe ich Samba neu gestartet. Das Problem wurde behoben. Die Datei ist verschwunden. Vielen Dank.
Lando
rm dir-name -rf?
Hauke ​​Laging

Antworten:

52

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.

  • Melden Sie sich bei dem System an, auf dem sich die Datei befindet. (keine Netzwerkbereitstellung)
  • Führen Sie aus lsof dir-name/.fuse_hidden000bd8c100000185, um herauszufinden, welche Prozesse das Dateihandle geöffnet halten.
  • Beenden Sie diese Prozesse, wenn dies sinnvoll ist, oder finden Sie heraus, welche Schritte Sie ausführen können, um das geöffnete Dateihandle ordnungsgemäß freizugeben, ohne den Prozess zu beenden.

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.

Andrew B
quelle
Ich vermutete, dass es mit einem Dienst zu tun hatte, der die Datei noch verwendete (in diesem Fall Samba), ich hatte lsof vergessen.
Lando
Führe mich zum Problem. lsofhalf mir zu identifizieren, welcher Prozess die Datei noch las und ich konnte dann alles entfernen!
ThanksForAllTheFish
Ich habe das Problem, dass lsofund fuserkeine Prozesse für diese Datei aufrufen, irgendwelche Vorschläge?
mxmlnkn
0

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 .Trashesdie .fuser_hiddenDatei löschen, indem ich in das Verzeichnis navigierte .

Hoffe das hilft!

RobertC
quelle