Lösung 1:
Durch das Löschen des Dateinamens wird die Datei nicht wirklich gelöscht. Ein anderer Prozess hält die Datei offen, wodurch sie nicht gelöscht wird; starten oder beenden Sie diesen Prozess, um die Datei freizugeben.
Verwenden Sie
lsof +L1
um herauszufinden, welcher Prozess eine gelöschte (nicht verknüpfte) Datei verwendet.
Lösung 2:
wie Ignacio erwähnt, wird das Löschen der Datei keinen Speicherplatz freigeben, bis Sie die Prozesse löschen, die offene Handles für diese Datei haben.
Trotzdem können Sie den Speicherplatz zurückgewinnen, ohne die Prozesse zu beenden. Alles, was Sie tun müssen, ist, die Dateideskriptoren zu entfernen.
Führen Sie zuerst lsof | aus grep gelöscht, um den Prozess zu identifizieren, der die Datei enthält
[[email protected] log]$ /usr/sbin/lsof |grep deleted
java 8859 hudson 1w REG 253,0 3662503356 7578206 /crucible/data/current/var/log/fisheye.out (deleted)
Dann ausführen:
cd /proc/PID/fd
dann
[[email protected] fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb 7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)
Die "1" ist der Dateideskriptor. Geben Sie nun "> FD" ein, um diesen Speicherplatz zurückzufordern
> 1
Möglicherweise müssen Sie den Vorgang wiederholen, wenn andere Prozesse die Datei enthalten.
Lösung 3:
Eine Möglichkeit ist, dass die gelöschte(n) Datei(en) mehr Referenzen im Dateisystem haben. Wenn Sie Hardlinks erstellt haben, verweisen mehrere Dateinamen auf dieselben Daten, und die Daten (der eigentliche Inhalt) werden nicht als frei/brauchbar markiert, bis alle Verweise darauf entfernt wurden. Bevor Sie Dateien löschen, statisieren Sie sie entweder (Eintrag mit dem Namen Links) oder führen Sie ls -l für sie aus (sollte die zweite Spalte sein).
Wenn sich herausstellt, dass die Dateien an anderer Stelle referenziert werden, müssen Sie ls -i die Datei(en) eingeben, um die Inode-Nummer zu finden, und dann eine Suche mit -inum
Lösung 4:
Wenn die Partition so konfiguriert wurde, dass ein bestimmter Teil des Speicherplatzes nur für die Root-Nutzung reserviert wird, df
wird diesen Speicherplatz nicht als verfügbar einschließen.
[[email protected]]# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
Selbst nachdem Speicherplatz durch Löschen von Dateien/Verzeichnissen zurückgewonnen wurde, können Nicht-Root-Benutzer nicht auf bestimmte Partitionen schreiben.
Sie können leicht überprüfen, ob dies der Fall ist, indem Sie versuchen, eine Datei auf einem Gerät als Root- und Nicht-Root-Benutzer zu erstellen.
Zusätzlich können Sie die Dateisystemkonfiguration überprüfen, indem Sie
ausführentune2fs -l <device> | egrep "Block count|Reserved block count
und den tatsächlichen Prozentsatz selbst berechnen.
Führen Sie
aus, um den für die ausschließliche Verwendung durch Root reservierten Datenträger % zu änderntune2fs -m <percentage> <device>
Lösung 5:
Die Datei ist immer noch durch den Prozess, der sie öffnet, gesperrt. Führen Sie die folgenden Schritte aus, um Speicherplatz freizugeben:
-
Führen Sie
sudo lsof | grep deleted
aus und sehen, welcher Prozess die Datei enthält. Beispielergebnis:$ sudo lsof | grep deleted COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted)
-
Beenden Sie den Prozess mit
sudo kill -9 {PID}
. Im obigen Beispiel ist die PID 1623.$ sudo kill -9 1623
-
Führen Sie
df
aus um zu prüfen, ob bereits Speicherplatz frei ist. Wenn es immer noch voll ist, müssen Sie vielleicht ein paar Sekunden warten und es erneut überprüfen.