Solaris gibt an, dass meine Partition 100 GB verwendet, die Partition jedoch leer aussieht. Wo wird der Raum genutzt?

977

Ich verwende eine Solaris 5.9-Box, in der unsere Oracle-Datenbank gespeichert werden soll. Ich habe die alte Version der Datenbank gelöscht und versucht, sie in der neuen Version zu verschieben (die gesamte Datenbank ist 90 GB groß), aber ich habe immer "Diskette voll" -Fehler erhalten. ich rannte

df -hk 

und fand heraus, dass die Partition (mit dem Namen "/ d02"), auf die ich versuche, Dateien zu verschieben, insgesamt 135 GB, 123 GB und 10 GB verfügbar hatte. Allerdings wenn ich renne

ls -lah /d02 

Ich bekomme 4 Verzeichnisse: 3 davon sind 512B und 1 ist 8KB.

Wurde der Speicherplatz nicht gelöscht, als ich die alte Oracle-Datenbank gelöscht habe? Wie kann ich den Platz freigeben oder zumindest sehen, wie mein Platz belegt wird?

Vielen Dank für Ihre Zeit.

0

3 Antworten auf die Frage

3

Ich habe es herausgefunden. Ich musste alle Prozesse beenden, die an diesen Daten festhielten - in diesem Fall Oracle.

Ich glaube auch, dass ich dies auf Serverfehler melden sollte. Es tut uns leid!

Vielen Dank, dass Sie eine Antwort auf Ihre Frage geschrieben haben. Jetzt musst du es einfach akzeptieren! :) vor 14 Jahren 0
2

Ja, Sie haben die Hauptursache entdeckt. Beim Entfernen einer Datei wird unter Unix der Link aus der Zugriffsliste im Verzeichnis entfernt. Es kann jedoch den Inhalt nicht entfernen, bis das Dateihandle geschlossen wird, das der Datei zugeordnet ist. Dies ist ein ziemlich häufiges Problem, das später schwer zu finden ist.

Sobald das Dateihandle geschlossen ist, können die Datenlinks in der freien Liste freigegeben werden, wie Sie herausgefunden haben. Höchstwahrscheinlich war noch eine Protokolldatei geöffnet. Möglicherweise haben Sie nach dem Neustart der Datenbank ein merkwürdiges Verhalten gefunden, da der Protokollspeicherort fehlte und die Protokollierung an der Konsole oder an anderen ungewöhnlichen Orten wie / tmp beginnt.

2
toddkaufmann

+1 für @UnixGeek-Antwort: Durch das Löschen einer Datei wird der Speicherplatz nicht freigegeben, bis der Prozess (die Prozesse) mit der geöffneten Datei abgeschlossen ist.

Das "Standard" lsof-Tool zum Auflisten der geöffneten Dateien ist - ich glaube immer noch nicht, dass es in Solaris enthalten ist (es ist einige Jahre vergangen, seit ich ein Solaris-Administrator war oder sogar verwendet habe), aber es ist bei sunfreeware erhältlich.

Ein schneller Google-Mitarbeiter kann feststellen, dass das Solaris-Dienstprogramm pfilesetwas Ähnliches ausführen kann (aber ich habe es nicht verwendet).

Auch fuserbeim Dateinamen, aber Sie müssen ihn überprüfen, bevor Sie die Datei (en) löschen. fuserist auch nützlich, um herauszufinden, was einen Port geöffnet hat, wenn ein Prozess sagt, dass er bereits verwendet wird.

Ich werde A Sysadmin's Unixersal Translator (ROSETTA STONE) anschließen, eine sehr nützliche Anleitung für alle, die mehrere Unices verwenden und zwischen diesen übersetzen.

Bonus-Trick zum Wiederherstellen gelöschter Dateien in /procbasierten Systemen, die noch von einem Prozess geöffnet sind:

cat /proc/<pid>/fd/<fd-of-delete-file> > recovered.data 

Ich habe dies in Linux verwendet, wobei ls -l /proc/<pid>/fdin der Ausgabe der ursprüngliche Dateiname (und [gelöscht]) angezeigt wird.