Auf einem meiner Server mit 16.04 ist ein Problem aufgetreten: Es ist kein Speicherplatz mehr verfügbar.
Ich habe keine Ahnung, was den Raum einnimmt. Gibt es einen Befehl zum Auflisten der aktuellen Verzeichnisgrößen, damit ich den gesamten Speicherplatz in dem Verzeichnis beanspruchen kann?
disk-usage
Karl Morrison
quelle
quelle
export DISPLAY=:0.0; ssh -Y <user>@<server> filelight
(Ersetzen Siefilelight
mit Ihrem bevorzugten Werkzeug). Natürlich ist absolut kein Speicherplatz mehr vorhanden. Wenn Sie das Tool noch nicht installiert haben, müssen Sie trotzdem etwas anderes verwenden!Antworten:
Wie immer unter Linux gibt es mehrere Möglichkeiten, um die Arbeit zu erledigen. Wenn Sie dies jedoch von CLI aus tun müssen, ist dies meine bevorzugte Methode:
Ich starte als root oder mit sudo:
Das Problem besteht darin, die zurückgegebenen Zeilen auf diejenigen zu beschränken, die Werte im Megabyte- oder Gigabyte-Bereich zurückgeben. Wenn Ihre Festplatten groß genug sind, können Sie
|T
auch Terabyte-Mengen hinzufügen . Möglicherweise werden auf/proc
,/sys
und / oder einige Fehler angezeigt,/dev
da es sich nicht um echte Dateien auf der Festplatte handelt. Es sollte jedoch weiterhin eine gültige Ausgabe für die übrigen Verzeichnisse im Stammverzeichnis liefern. Nachdem Sie die größten gefunden haben, können Sie den Befehl in diesem Verzeichnis ausführen, um den Täter einzugrenzen. Wenn also zum Beispiel/var
das größte wäre, könntest du es als nächstes so machen:Das sollte Sie zu den Sorgenkindern führen!
Weitere Überlegungen
Der obige Befehl wird sicherlich den Trick machen, aber ich hatte einige konstruktive Kritik in den Kommentaren unten, die auf einige Dinge hinwiesen, die Sie auch einschließen könnten.
grep
mir angegebene Wert kann dazu führen, dass gelegentlich der Wert "K" zurückgegeben wird, wenn der Name des Verzeichnisses oder der Datei die Groß- oder Kleinschreibung "G" oder "M" hat Ihr Regex-Spiel wird kreativer und komplexer. z.Bgrep -E "^[0-9\.]*[MG]"
Wenn Sie wissen, um welches Laufwerk es sich handelt und auf dem Laufwerk andere Laufwerke installiert sind, die Sie nicht in die Suche einbeziehen möchten, können Sie das
-x
Flag zu Ihremdu
Befehl hinzufügen . Manpage Beschreibung dieses Flags:Sie können die Ausgabe des
du
Befehls so sortieren , dass der höchste Wert unten steht. Hänge dies einfach an das Ende des Befehls an:| sort -h
quelle
"^[0-9]*[.]*[0-9]*[MG]"
-x
Option festlegen, dass esdu
auf diesem einen Laufwerk verbleibt (in der Befehlszeile angegeben). Sie können auch durchleitensort -h
, um die von Menschen lesbaren Megabyte- / Gigabyte-Werte korrekt zu sortieren. Normalerweise habe ich die--max-depth
Option weggelassen und das gesamte Laufwerk auf diese Weise durchsucht und entsprechend sortiert, um die größten Dinge unten zu finden./
), und die Verwendung-x
gibt mir die Garantie, dass ich keine Dinge falsch zählen werde. Wenn Ihr/
voll ist und Sie einen separat montierten/home
oder was auch immer haben, ist die Verwendung-x
so ziemlich eine Notwendigkeit, das irrelevante Zeug loszuwerden. Ich finde es einfach einfacher, es die ganze Zeit zu benutzen, nur für den Fall.Sie können dafür verwenden
ncdu
. Es funktioniert sehr gut.quelle
curl http://path/to/ncdu | sh
, und es wird in einem In-Memory-I / O-Standard-Cache ausgeführt, aber das erfordert etwas Glück. es gibt wahrscheinlich auch einesudo ncdu /
über die Befehlszeile Folgendes ein.sudo
Denn wenn Sie nicht sudo setzen, werden keine Größen für Ordner/
angezeigt, die root gehören, und wenn Sie nicht eingeben, werden nur wiederkehrende Berichte aus dem Ordner ausgegeben, in dem Sie sich befindenIch benutze diesen Befehl
sudo du -aBM -d 1 . | sort -nr | head -20
Gelegentlich muss ich es aus dem
/
Verzeichnis ausführen , da ich etwas an einer ungeraden Stelle platziert habe.quelle
-d 1
Schalter (und normalerweise mitless
anstelle vonhead -20
) zu tun , damit ich eine vollständige rekursiv aufgeführte Liste aller Dateien und Verzeichnisse erhalte, sortiert nach dem Speicherplatz, den sie belegen. Auf diese Weise kann ich, wenn ein Verzeichnis viel Speicherplatz belegt, einfach nach unten scrollen, um festzustellen, ob der größte Teil des Speicherplatzes tatsächlich von einer bestimmten Datei oder einem bestimmten Unterverzeichnis belegt ist. So finden Sie nicht benötigte Dateien und Verzeichnisse zum Löschen, um Speicherplatz freizugeben: Blättern Sie nach unten, bis Sie etwas sehen, von dem Sie sicher sind, dass es nicht beibehalten werden soll, löschen Sie es und wiederholen Sie es.sort
wartet nur darauf, dass die Ausgabe abgeschlossen ist, bevor mit der Ausgabe begonnen wird.Es gibt bereits viele gute Antworten, wie Sie Verzeichnisse finden können, die den größten Teil des Speicherplatzes beanspruchen. Wenn Sie Grund zur Annahme haben, dass nur wenige große Dateien das Hauptproblem sind, und nicht viele kleine, können Sie so etwas verwenden
find / -size +10M
.quelle
Ich kenne Ubuntu nicht und kann meine Antwort nicht überprüfen, aber ich poste hier meine Antwort basierend auf meiner Erfahrung als Unix-Administrator vor langer Zeit.
Finden Sie heraus, auf welchem Dateisystem nicht genügend Speicherplatz vorhanden ist
listet alle Dateisysteme, ihre Größe und ihren freien Speicherplatz auf. Sie verschwenden nur Zeit, wenn Sie nach Dateisystemen suchen, die über genügend Speicherplatz verfügen. Angenommen, das vollständige Dateisystem ist / myfilesystem. Überprüfen Sie die df-Ausgabe, wenn Dateisysteme auf Unterverzeichnissen von / myfilesystems eingebunden sind. In diesem Fall müssen die folgenden Schritte an diese Situation angepasst werden.
Finden Sie heraus, wie viel Speicherplatz die Dateien dieses Dateisystems belegen
Die Option -x kann verwendet werden, um sicherzustellen, dass nur die Dateien berücksichtigt werden, die Mitglied dieses Dateisystems sind. Einige Unix-Varianten (z. B. Solaris) kennen die Option -x für du nicht. Dann müssen Sie einige Problemumgehungen verwenden, um die Du Ihres Dateisystems zu finden.
Überprüfen Sie nun, ob das du der sichtbaren Dateien ungefähr der Größe des von df angezeigten Speicherplatzes entspricht. In diesem Fall können Sie die großen Dateien / Verzeichnisse des Dateisystems / myfilesystem suchen, um sie zu bereinigen.
um die größten Unterverzeichnisse eines Verzeichnisses zu finden /.../dir verwenden
Die Option -k erzwingt die Ausgabe der Sie in Kilobyte ohne Einheit. Dies kann auf einigen Systemen die Standardeinstellung sein. Dann können Sie diese Option weglassen. Die größten Dateien / Unterverzeichnisse werden am Ende der Ausgabe angezeigt.
Wenn Sie eine große Datei / ein großes Verzeichnis gefunden haben, das Sie nicht mehr benötigen, können Sie es auf geeignete Weise entfernen. Kümmern Sie sich nicht um die kleinen Verzeichnisse oben in der Ausgabe. Es wird Ihr Problem nicht lösen, wenn Sie sie löschen. Wenn Sie immer noch nicht genügend Speicherplatz haben, können Sie Schritt 4 in den großen Unterverzeichnissen wiederholen, die am Ende der Liste angezeigt werden.
Aber was ist passiert, wenn die du-Ausgabe nicht ungefähr dem von df angezeigten verfügbaren Speicherplatz entspricht?
Wenn die du-Ausgabe größer ist, haben Sie ein Unterverzeichnis übersehen, in dem ein anderes Dateisystem eingehängt ist. Wenn die du-Ausgabe viel kleiner ist, werden einige Dateien in keinem Verzeichnis angezeigt, das Sie überprüfen. Es kann verschiedene Gründe für sein Phänomen geben.
Einige Prozesse verwenden eine bereits gelöschte Datei. Daher wurden diese Dateien aus dem Verzeichnis entfernt und du kannst sie nicht sehen. Aber für das Dateisystem werden ihre Blöcke noch verwendet, bis die Prozesse die Dateien schließen. Sie können versuchen, die relevanten Prozesse herauszufinden (z. B. mit lsof) und sie zum Schließen dieser Dateien zwingen (z. B. durch Stoppen der Anwendung oder Beenden der Prozesse). Oder Sie starten einfach Ihre Maschine neu.
Es gibt Dateien in Verzeichnissen, die nicht mehr sichtbar sind, da in einem ihrer übergeordneten Verzeichnisse ein anderes Dateisystem eingehängt ist. Wenn Sie also eine Datei / myfilesysem / subdir / bigfile haben und nun ein anderes Dateisystem auf / myfilesystem / subdir mounten, können Sie diese Datei nicht mehr sehen und
meldet einen Wert, der nicht die Größe von / myfilesystem / subdir / bigfile enthält. Der einzige Weg, um herauszufinden, ob solche Dateien existieren, besteht darin, / myfilesystem / subir zu entfernen und mit zu überprüfen
wenn es Dateien enthält.
Es kann spezielle Arten von Dateisystemen geben, die Speicherplatz auf einer Festplatte belegen / reservieren, der für den Befehl ls nicht sichtbar ist. Sie benötigen spezielle Werkzeuge, um dies anzuzeigen.
Neben dieser systematischen Verwendung des Befehls du gibt es noch einige andere Möglichkeiten. Sie können den Befehl find verwenden, um nach Dateien zu suchen, die größer als ein von Ihnen angegebener Wert sind. Sie können nach Dateien suchen, die größer als ein von Ihnen angegebener Wert sind oder neu erstellt wurden oder einen speziellen Namen haben (z. B. * .log, core, * .trc). Sie sollten jedoch immer eine df wie in 1 beschrieben ausführen, damit Sie mit dem richtigen Dateisystem arbeiten
quelle
/tmp
ein separates Dateisystem (z. B. ein tmpfs) und etwas, in dem Dateien erstellt wurden,/tmp
bevor es zu einem Einhängepunkt für ein anderes Dateisystem wurde. Jetzt befinden sich diese Dateien im Root-Dateisystem, im Schatten eines Mount-Punkts, und Sie können nicht auf sie zugreifen, ohne einen Neustart im Wiederherstellungsmodus (der nicht verarbeitet wird/etc/fstab
) oder, wie Sie vorschlagen, im Bind-Mount- Modus .Wenn Sie auch keinen Befehl verwenden möchten , finden Sie hier eine App: Filelight
Damit können Sie schnell visualisieren, was in einem Ordner Speicherplatz belegt.
quelle
ssh -X <your host>
Führen Sie Ihr Programm dann über die Befehlszeile ausVersuchen Sie
sudo apt-get autoremove
, die nicht verwendeten Dateien zu entfernen, wenn Sie dies nicht getan habenquelle
Ich benutze diesen oft
Wenn ich dann große Ordner finde, wechsle ich zu diesen und mache weitere Nachforschungen
Bei Bedarf können Sie es auch automatisch mit sortieren lassen
quelle
Keine wirkliche Antwort - aber ein Nachtrag.
Sie haben nicht genügend Speicherplatz und können ncdu nicht von @erman 's Antwort installieren.
Einige Vorschläge
sudo apt clean all
um bereits heruntergeladene Pakete zu löschen. SICHERsudo rm -f /var/log/*gz
Protokolldateien löschen, die älter als ein oder zwei Wochen sind - löscht keine neueren / aktuellen Protokolle. Am sicherstensudo lsof | grep deleted
listet alle offenen Dateien auf, filtert jedoch nach den Dateien, die von der Festplatte gelöscht wurden. ZIEMLICH SICHERsudo rm /tmp/*
Löschen Sie einige temporäre Dateien - wenn sie von irgendetwas verwendet werden, können Sie einen Prozess stören. NICHT WIRKLICH SICHERDas `lsof kann man Zeilen wie folgt zurückgeben:
Kann nicht viel für die Init-Zeile tun, aber die zweite Zeile legt nahe, dass Salt-Minion eine Datei geöffnet hat, die gelöscht wurde. Die Plattenblöcke werden zurückgegeben, sobald alle Datei-Handles durch einen Neustart des Dienstes geschlossen wurden.
Andere häufige Verdächtige sind syslog / rsyslog / syslog-ng, squid, apache oder ein Prozess, den Ihr Server ausführt und der "schwer" ist.
quelle
Besonders wertvoll finde ich die Ausgabe von Tools wie Filelight, aber wie in Ihrem Fall ist auf Servern normalerweise keine GUI installiert, aber der
du
Befehl ist immer verfügbar.Was ich normalerweise mache ist:
du
Ausgabe in eine Datei (du / > du_output.txt
);DuFS
diese Option, um diedu
Ausgabe in einem temporären Verzeichnis "einzuhängen" .DuFS
verwendet FUSE, um ein virtuelles Dateisystem zu erstellen (= es werden keine Dateien erstellt, es ist alles falsch), entsprechend derdu
Ausgabe;Haftungsausschluss: Ich habe geschrieben
dufs
- gerade weil ich oft herausfinden muss, welcher Speicherplatz auf kopflosen Maschinen knapp wird.quelle
Entspricht @TopHat, filtert jedoch einige Dateien, wenn der Name M, G oder T enthält. Ich glaube nicht, dass es die Größe in der ersten Spalte verfehlen wird, aber es wird nicht mit dem Dateinamen übereinstimmen, wenn Sie Dateien nicht kreativ benennen.
Befehlszeilenoptionen werden hier erklärt , da ich nicht wusste, was das c oder a tat.
quelle