Wenn große Dateien auf einem Server gelöscht werden, werden die Dateien möglicherweise weiterhin von Prozessen referenziert, sodass das Dateisystem nicht über mehr freien Speicherplatz verfügt.
Ich habe versucht, lsof zu verwenden , aber es scheint, dass die gelöschten Dateien nicht aufgelistet wurden. fuser -c
hat besser funktioniert, aber die Liste der Prozesse ist einfach zu lang, um sie für jeden Prozess zu überprüfen, zumal jeder Prozess ein Oracle-Prozess ist.
bash-3.2# fuser -c /var
/var: 105o 29999o 20444c 3528c 27258o 7715o 3864o 3862o 2494o 18205o 17450co 17445co 14912co 14824co 14818co 14816o 14814o 8532c 8530c 7633com 7118o 6958o 6790c 6784co 6734o 6693o 6689o 6684o 6675o 6635o 6594c 6548o 6547o 6546o 6545o 6544o 6543o 6542o 6541o 6540o 6537o 6535o 6456o 6128co 6113o 335o 245co 229o 161o 8o
bash-3.2# du -hs /proc
139T /proc
Es kommt manchmal vor, dass eine Datei von einer Anwendung oder einem Benutzer gelöscht wird, z. B. eine Protokolldatei, und dass auf diese Datei immer noch von einem Prozess verwiesen wird, der nicht neu gestartet werden kann.
Gibt es Warenmethoden, um Speicherplatz für gelöschte Dateien zurückzugewinnen, ohne den Prozess neu zu starten, der einen Verweis auf diese gelöschte Datei enthält?
cp /dev/null file
cp /dev/null
ist ein Null-Befehl, dacp
nichts zu kopieren ist, eine einfache Umleitung ist streng gleichwertig:>file
oder sogar>file
Antworten:
Finden Sie alle geöffneten Dateideskriptoren.
Grep gelöscht.
StdError nach / dev / null
Ausgabe:
Oder Sie können awk verwenden
find / proc / * / fd -ls 2> / dev / null | awk '/ gelöscht / {print $ 11}';
awk Ausgabe (getestet in Bash Ubuntu 12.04):
Suchen und kürzen Sie alle gelöschten Dateien (getestet in Bash Ubuntu 12.04):
(TUN SIE DAS NICHT, WENN SIE NICHT WISSEN, WAS SIE TUN)
-p Eingabeaufforderung vor dem Ausführen abschneiden
Besser ist manuelles Abschneiden
Manuelles Abschneiden:
oder:
oder:
Genießen ;)
quelle
Hier ist ein einfaches Beispiel mit
less
:Nehmen wir an, wir haben eine Datei
my10MBfile
:Jetzt öffne ich diese Datei mit
less
(ja, es ist eine Binärdatei ... egal)Dann entferne ich diese Datei
Es ist noch da, aber gelöscht. Schauen Sie sich die 4. Spalte der lsof-Ausgabe an: Dateideskriptor Nummer 4 zum Lesen geöffnet (4r)
Lassen Sie uns GDB ausführen!
Das ist es!
Unsere 10 MB sind willkommen zurück :)
Der Prozess läuft noch.
quelle
Dieser Befehl zeigt alle gelöschten Dateien an, die auf einem Solaris-System noch geöffnet sind:
Mit diesem Befehl können Sie diejenigen abschneiden, von denen Sie sicher sind, dass Sie sie möchten:
Dabei ist p die Prozess-ID und x der vom ersten Befehl zurückgegebene Dateideskriptor.
Machen Sie sich keine Sorgen, wenn bei einigen Programmen die gemeldete
ls
Größe vor dem Abschneiden nach einer Weile auf die Größe zurückgesetzt wird. Die tatsächlich auf der Festplatte verwendete Größe ist viel kleiner, da die Datei jetzt spärlich ist.quelle
Sie können versuchen, in das
/proc/<pid>/fd
Verzeichnis zu wechseln und den entsprechenden Dateideskriptor abzuschneiden. Angenommen, fd = 3 zeigt auf die gelöschte Datei von pid == 123:quelle
Keine dieser Lösungen hat bei mir funktioniert. Erst nachdem ich Bleachbit als Root verwendet hatte, konnte ich den mit gelöschten Dateien verbundenen Speicherplatz ordnungsgemäß freigeben.
quelle