Was frisst meinen Speicherplatz?

12

Ich verwende Linux Mint 14 Nadia. Die Linux-Partition hat 10G. Wenn das System gestartet wird, duwird eine Auslastung von 80% gemeldet. Dann wächst die Nutzung langsam, bis sie 100% erreicht und das System unbrauchbar wird. (Es kann in der Größenordnung von Tagen oder Wochen passieren). Nach dem Neustart wird die Nutzung auf 80% zurückgesetzt.

Das Seltsamste von allem ist, dass sich dunichts ändert.

Hier ist die Ausgabe dieser Befehle (Windows- und externe Laufwerkspartitionen werden entfernt):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(Hinweis: Ich verwende den Ruhezustand. Nach dem Ruhezustand bleibt die Nutzung unverändert und wird nach dem Neustart auf 80% zurückgesetzt.)

Wie verfolge ich, was den Raum frisst?

Ich habe diese Frage gelesen . Ich bin immer noch im Dunkeln. Wie finde ich heraus, welches Programm für dieses Verhalten verantwortlich ist?

Nach dem Bearbeiten : gefunden. Der Speicherplatz wird vom Kernel-Protokoll beansprucht, das von angezeigt wird dmesg. Es füllt sich, weil meine Maschine Fehler mit einer Rate von 5 pro Sekunde erzeugt. (Es hängt mit diesem Fehler zusammen .) Lassen Sie die zukünftigen Leser mit einem ähnlichen Problem - das langsame Füllen des dunicht sichtbaren Speicherplatzes - nicht vergessen, dmesgnach der Ursache zu suchen.

Arry
quelle
1
Ich bevorzuge ncdues einfach du, große Dateien | Verzeichnisse zu finden. Es scannt den gesamten Verzeichnisbaum, bevor Sie etwas tun können. Vielleicht möchten Sie ihm einen bestimmten Pfad übergeben (z. B. ncdu /varoder auch nur ncdu ~)
Blacklight Shining
Einige anständige Antworten bereits auf dieser Seite.
Sparhawk

Antworten:

14

Wiederholte Ausführung von

sudo du -x   -d1 -h /

(unten im Verzeichnisbaum) sollte Ihnen mitteilen, wo der Speicherplatz belegt ist. Das erklärt wahrscheinlich ohne weitere Untersuchung, welche Anwendung das verursacht.

unsichtbare Dateien

Wenn dudiese Dateien nicht angezeigt werden, sind gelöschte Dateien eine der Möglichkeiten. Eine Datei (oder besser gesagt ihr Name, dh ihr Eintrag in einem Verzeichnis) kann gelöscht werden, während die Datei noch verwendet wird. Solange ein gültiger Dateideskriptor auf diese Datei verweist, deckt er den Speicherplatz auf dem Volume ab (wenn es sich nicht um eine leere Datei handelt ...).

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

Sie finden diese Dateien mit find:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

Es kann sich um eine einzelne große Datei oder eine Reihe kleinerer Dateien handeln, die Ihr Problem verursachen. Auf meinem System befinden sich derzeit etwa 30 solcher Dateien (die nur zu fünf Prozessen gehören). ls -lzeigt die Größe dieser Dateien an, aber es scheint nicht möglich zu sein, diesen Wert abzurufen find.

Nach dem Beenden des Prozesses steht der Speicherplatz dem Dateisystem ( df) wieder zur Verfügung .

Hauke ​​Laging
quelle
Dies geht nicht auf meine Frage ein. dumeldet keine Änderung des verbrauchten Speicherplatzes: 7,3 G beim Start und 7,3 G nach Ablauf der Zeit. dfmeldet 7,3 G frei beim Start und bis zu 10 G im Laufe der Zeit. Ich kann das Problem mit nicht finden du.
Arry
@Arry In der Tat lese ich zu schnell.
Hauke ​​Laging
7

Verwenden Sie so etwas wie

lsof -s | grep deleted | sort -k 8

um zu sehen, welche Prozesse gelöschte Dateien offen halten. Die wichtigen Felder sind das zweite (PID) und das achte (drittes vom letzten; die Dateigröße).

(Achten Sie auf doppelte Zeilen, zählen Sie sie nicht zweimal. Überprüfen Sie die PID und den Dateipfad (letztes Feld) oder die Inode-Nummer (vorletztes Feld).)

Wenn Sie danach einen Prozess finden, der wahrscheinlich der Schuldige ist, können wir sehen, wie Sie ihn beheben können.

Angus
quelle
Guter Vorschlag, aber auf meinem Computer meldet dieser Befehl nur 2 offene gelöschte Dateien mit einer Größe von 2 KB, was weit davon entfernt ist, dass 2,7 G im Laufe der Zeit von einem Streuprozess verbraucht werden.
Arry
Dies war ein großartiger Vorschlag und hat mir tatsächlich geholfen, ein Problem zu lösen, das der Elternfrage ähnelt. Ich hatte eine große Diskrepanz zwischen df- und du-Befehlen. In meinem speziellen Fall habe ich rotierende Protokolle und einen Dienst, der die Protokolle weiterleitet (in diesem Beispiel logstash). Der Logstash-Dienst hielt die gedrehten Protokolle offen, auch wenn sie gelöscht wurden. Dies verursachte die Diskrepanz zwischen du und df. Nach dem Neustart des Logstash-Dienstes wurde der Speicherplatz korrekt angezeigt.
Aemus
Ich hatte einen Prozess beim Schreiben einer Nur-Anhängen-Datei, die unbegrenzt wuchs und schließlich meine Festplatte füllte. Dann habe ich beschlossen, diese Datei zu rmen, aber der Prozess hat den Dateideskriptor nicht geschlossen, sodass er irgendwie immer noch verwendet wird. Ein Neustart des Prozesses und die Begrenzung der AOF-Größe lösten mein Problem.
Aviggiano
Beachten Sie, dass hierfür Root-Rechte erforderlich sind. Außerdem habe ich sudo lsof -s | grep deleted | sort -hk7eine numerische Sortierung erhalten. Ohne -h macht sort lustige lexikalische Dinge mit Zahlen.
Derek
4
find / -size +10000k -print0 | xargs -0 ls -l -h

Verwenden Sie diese rekursiv zu finden , was von mehr als 10 MB + füllt /(root), und zeigen Sie es mit vielen Details mit ls -lin xargs. Wenn Sie 1000000 (2 zusätzliche Nullen) schreiben, erhalten Sie beispielsweise 1 GB +.

du / -h --max-depth=1 | sort -h

Sie können auch du verwenden und einfach manuell darin graben.

Adionditsak
quelle
1

Wenn dies passiert, konzentriere ich mich immer auf bestimmte Unterverzeichnisse. Die FHS-Struktur, an die sich die meisten Linux-Distributionen halten, ist in diesem Sinne ausgelegt.

Schauen Sie zuerst rein /var, gefolgt von /home.

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

Sie können Ihren Fokus auch auf Unterverzeichnisse innerhalb eines dieser Speicherorte beschränken. Sobald Sie erschöpft sind, gehe ich normalerweise zu /rootund schließlich zu den verbleibenden Unterverzeichnissen unter /.

Wenn es sich um eine Red Hat-basierte Distribution handelt, belegt der Cache, yumder zum Ausführen von Updates verwendet wird, möglicherweise viel Speicherplatz. Mit diesem Befehl können Sie Folgendes löschen:

$ yum clean packages

Andere Distributionen, die verwenden, aptkönnen etwas Ähnliches tun apt-get clean.

Ich würde diesen Befehl auch oben in Ihrem /Verzeichnis ausführen. Dieser Speicherort kann manchmal zur Quelle für Streuprotokolldateien werden.

$ ls -la /

Achten Sie besonders auf Punktedateien! .blahZum Beispiel benannte Dinge .

slm
quelle
0

Ich habe fast die gleiche Situation.

In meinem Fall war der Grund VMware. Bei einer der anderen VMwares auf demselben Computer wurden die Speicherplätze belegt. Aus diesem Grund war mein Speicherplatz zu 100% belegt.

Nach dem Löschen großer Dateien aus der VMware des Nachbarn funktioniert dies ordnungsgemäß.

Pchero
quelle