Ich habe eine SCSI-Festplatte in einem Server (Hardware-RAID 1), 32G, ext3-Dateisystem. df
sagt mir, dass die Festplatte zu 100% voll ist. Wenn ich 1G lösche, wird dies korrekt angezeigt.
Wenn ich laufen jedoch du -h -x /
dann du
sagt mir , dass nur 12G verwendet werden (ich -x
wegen einiger Samba Mounts).
Meine Frage bezieht sich also nicht auf subtile Unterschiede zwischen den Befehlen du und df, sondern darauf, wie ich herausfinden kann, woher dieser große Unterschied stammt.
Ich habe den Rechner für ein Fsck neu gestartet, bei dem keine Fehler aufgetreten sind. Soll ich rennen badblocks
? lsof
zeigt mir keine offenen gelöschten Dateien an, lost+found
ist leer und es gibt keine offensichtliche warn / err / fail-Anweisung in der Nachrichtendatei.
Fragen Sie nach weiteren Einzelheiten zum Setup.
quelle
Antworten:
Suchen Sie nach Dateien unter Einhängepunkten. Wenn Sie ein Verzeichnis (z. B. einen Sambafs) in ein Dateisystem einbinden, in dem sich bereits eine Datei oder Verzeichnisse befinden, verlieren Sie häufig die Fähigkeit, diese Dateien anzuzeigen, sie belegen jedoch weiterhin Speicherplatz auf der zugrunde liegenden Festplatte. Im Einzelbenutzermodus wurden Dateikopien in Verzeichnisse kopiert, die ich nur im Einzelbenutzermodus sehen konnte (da andere Verzeichnissysteme darüber bereitgestellt wurden).
quelle
Ich bin gerade auf dieser Seite gestolpert, als ich versucht habe, ein Problem auf einem lokalen Server aufzuspüren.
In meinem Fall stimmen die
df -h
unddu -sh
um ca. 50% der Festplattengröße nicht überein.Dies wurde dadurch verursacht, dass Apache (httpd) große Protokolldateien im Speicher hielt, die von der Festplatte gelöscht wurden.
Dies wurde festgestellt, indem ausgeführt wurde,
lsof | grep "/var" | grep deleted
wo/var
sich die Partition befand, die ich zum Bereinigen benötigte.Die Ausgabe zeigte folgende Zeilen:
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)
Die Situation wurde dann durch einen Neustart von apache (
service httpd restart
) behoben und 2 GB Festplattenspeicher wurden freigegeben, indem die Sperren für gelöschte Dateien aufgehoben werden konnten.quelle
kill -9 'pid'
die Schlösser öffnen. zB: Für deinen httpd wäre es gewesenkill -9 32617
.lsof
dasudo
alle geöffneten Dateideskriptorensudo truncate -s0 /proc/(h2 PID)/(descriptor number obtained from ls /proc/h2pid/fd)
.httpd
Speicherplatz nicht freigegeben wird. Als ich lief/etc/init.d/rsyslog restart
, funktionierte es: Dlsof -a +L1 /var
, wo-a
Mittel und alle Bedingungen (Standard ist OR),+L1
bedeuten Liste nur Dateien mit Link zählen weniger als 1 (dh Dateien mit offenen Dateien gelöscht), und/var
beschränkt auf Dateien unter diesem Mount - PunktIch stimme der Antwort von OldTroll als wahrscheinlichste Ursache für Ihren "fehlenden" Platz zu.
Unter Linux können Sie die gesamte Root-Partition (oder jede andere Partition in diesem Fall) problemlos an einer anderen Stelle in Ihrem Dateisystem erneut einbinden, z. B. mit / mnt
dann kannst du a
und sehen, was Ihren Raum verbraucht.
Ps: Entschuldigung, dass Sie eine neue Antwort und keinen Kommentar hinzugefügt haben, aber ich brauchte eine Formatierung, damit dieser Beitrag lesbar ist.
quelle
/var/lib/docker/aufs/diff/
Sehen Sie, was
df -i
sagt. Es kann sein, dass Sie keine Inodes mehr haben, was passieren kann, wenn sich in diesem Dateisystem eine große Anzahl kleiner Dateien befindet, die alle verfügbaren Inodes verbrauchen, ohne den gesamten verfügbaren Speicherplatz zu belegen.quelle
du -s
des gleichen Teilbaums vergleicht, erhalten Sie eine gute Vorstellung davon, ob dies hier der Fall ist.In meinem Fall hatte dies mit großen gelöschten Dateien zu tun. Es war ziemlich schmerzhaft zu lösen, bevor ich diese Seite fand, die mich auf den richtigen Weg brachte.
Schließlich löste ich das Problem mit, indem
lsof | grep deleted
ich sah, welches Programm zwei sehr große Protokolldateien enthielt (insgesamt 5 GB meiner verfügbaren 8 GB-Root-Partition).quelle
Dateien, die von einem Programm geöffnet werden, werden beim Löschen nicht gelöscht (und belegen nicht mehr Speicherplatz). Sie werden gelöscht, wenn das Programm sie schließt. Ein Programm hat möglicherweise eine riesige temporäre Datei, die Sie (und du) nicht sehen können. Wenn es sich um ein Zombie-Programm handelt, müssen Sie möglicherweise einen Neustart durchführen, um diese Dateien zu löschen.
quelle
kill -9 'pid'
sie, um die Sperren aufzuheben und den Speicherplatz zurückzugewinnen.Versuchen Sie dies, um festzustellen, ob ein Dead / Hung-Prozess gesperrt ist, während noch auf die Festplatte geschrieben wird: lsof | grep "/ mnt"
Versuchen Sie dann, alle festsitzenden PIDs zu eliminieren (achten Sie insbesondere auf Zeilen, die mit "(gelöscht)" enden).
quelle
Dies ist die einfachste Methode, die ich bisher gefunden habe, um große Dateien zu finden!
Hier ist ein Beispiel, wenn Ihr Root-Mount voll ist / (mount / root) Beispiel:
cd / (also bist du im root)
ls | xargs du -hs
Beispielausgabe:
dann würden Sie feststellen, dass der Speicher groß ist, machen Sie eine CD / Store
und wieder laufen
ls | xargs du -hs
in diesem fall ist das vms-verzeichnis das space hog.
quelle
baobab
? (Siehe marzocca.net/linux/baobab/baobab-getting-started.html )ls
+xargs
wirkt wie Overkill,du -sh /*
funktioniert von selbst ganz gutFür mich musste ich ausführen,
sudo du
da es eine große Anzahl von Docker-Dateien gab/var/lib/docker
, für die ein Nicht-Sudo-Benutzer keine Leseberechtigung hat.quelle
Eine weitere Möglichkeit, die Sie in Betracht ziehen sollten: Es ist fast sicher, dass Sie eine große Diskrepanz feststellen, wenn Sie Docker verwenden und df / du in einem Container ausführen, in dem Volume-Mounts verwendet werden. Im Fall eines Verzeichnisses, das auf einem Volume auf dem Docker-Host gemountet ist, meldet df die df-Summen des Hosts. Dies ist offensichtlich , wenn man darüber nachdenkt, aber wenn Sie einen Bericht über einen „Ausreißer Behälter füllt die Platte!“ Erhalten, stellen Sie sicher , dass Sie den Dateibereichsverbrauch mit so etwas wie dem Behälter überprüfen
du -hs <dir>
.quelle
Also hatte ich dieses Problem auch in Centos 7 und fand eine Lösung, nachdem ich ein paar Dinge wie Bleichbit und das Reinigen von / usr und / var ausprobiert hatte, obwohl sie jeweils nur etwa 7 G zeigten. Es wurden immer noch 50G von 50G angezeigt, die in der Root-Partition verwendet wurden, es wurden jedoch nur 9G der Dateiverwendung angezeigt. Führen Sie eine Ubuntu-Live-CD aus und entfernen Sie die anstößige 50G-Partition, öffnen Sie das Terminal und führen Sie xfs_check und xfs_repair auf der Partition aus. Ich habe dann die Partition neu gemountet und mein Fundbüro auf 40G erweitert. Sortierte das Fundbüro nach Größe und fand eine 38-G-Text-Protokolldatei für Steam, die schließlich einen MP3-Fehler wiederholte. Entfernte die große Datei und habe jetzt Platz und meine Festplattennutzung stimmt mit meiner Root-Partitionsgröße überein. Ich würde immer noch gerne wissen, wie ich das Steamlog dazu bringen kann, nicht wieder so groß zu werden.
quelle
xfs_fsr
Wenn es sich bei dem bereitgestellten Datenträger um einen freigegebenen Ordner auf einem Windows-Computer handelt, zeigt df anscheinend die Größe und die Datenträgernutzung des gesamten Windows-Datenträgers an, aber du zeigt nur den Teil des Datenträgers an, auf den Sie ebenfalls Zugriff haben. (und ist montiert). In diesem Fall muss das Problem auf dem Windows-Computer behoben werden.
quelle
Ähnliches passierte uns in der Produktion, die Festplattenauslastung lag bei 98%. Hat folgende Untersuchung durchgeführt:
a)
df -i
Zur Überprüfung der Inode-Nutzung betrug die Inode-Nutzung 6%, also nicht viel kleinere Dateienb) Hängen Sie
root
versteckte Dateien ein und überprüfen Sie sie. Es konnten keine zusätzlichen Dateien abgelegt werden.du
Die Ergebnisse waren die gleichen wie vor dem Einhängen.c) Zuletzt überprüfte
nginx
Protokolle. Es wurde für das Schreiben auf die Festplatte konfiguriert, aber ein Entwickler hat die Protokolldatei direkt gelöschtnginx
, um alle Protokolle im Speicher zu belassen. Da die Datei/var/log/nginx/access.log
mit von der Festplatte gelöscht wurde, warrm
sie mit nicht sichtbar,du
aber auf die Datei wurde zugegriffennginx
und sie wurde daher weiterhin geöffnetquelle
Ich hatte das gleiche Problem, das in diesem Thema erwähnt wird, aber in einem VPS. Ich habe also alles getestet, was in diesem Thema beschrieben ist, aber ohne Erfolg. Die Lösung war ein Support-Kontakt mit unserem VPS-Anbieter, der eine Quoten-Neuberechnung durchführte und die Speicherplatzdifferenz von
df -h
und korrigiertedu-sh /
.quelle
Ich bin heute auf einer FreeBSD-Box auf dieses Problem gestoßen. Das Problem war, dass es ein Artefakt von war
vi
(nichtvim
, nicht sicher, obvim
dieses Problem entstehen würde). Die Datei beanspruchte Speicherplatz, wurde jedoch noch nicht vollständig auf die Festplatte geschrieben.Sie können das überprüfen mit:
Hier werden alle geöffneten Dateien angezeigt und (numerisch über
-n
) nach der achten Spalte (Taste,-k8
) sortiert , wobei die letzten zehn Elemente angezeigt werden.In meinem Fall sah der letzte (größte) Eintrag so aus:
Dies bedeutete, dass der Prozess (PID) 12345 1,46 G (die achte Spalte geteilt durch 1024³) der Festplatte verbrauchte, obwohl dies nicht
du
bemerkt wurde.vi
Es ist schrecklich, extrem große Dateien anzuzeigen. sogar 100 MB sind dafür groß. 1,5G (oder wie groß diese Datei auch war) ist lächerlich.Die Lösung war
sudo kill -HUP 12345
(wenn das nichtsudo kill 12345
klappenkill -9
würde, würde ich und wenn das auch scheitern würde, würde das gefürchtete ins Spiel kommen).Vermeiden Sie Texteditoren für große Dateien. Beispielumgehungen für schnelles Überfliegen:
Angenommene angemessene Leitungslängen:
{ head -n1000 big.log; tail -n1000 big.log } |vim -R -
wc -l big.log |awk -v n=2000 'NR==FNR{L=$1;next}FNR%int(L/n)==1' - big.log |vim -R -
Unangemessen große Leitung (en) annehmen:
{ head -c8000 big.log; tail -c8000 big.log } |vim -R -
Diese verwenden,
vim -R
anstattview
weilvim
es fast immer besser ist ... wenn es installiert ist. Fühlen Sie sich frei, sie inview
odervi -R
stattdessen zu leiten.Wenn Sie eine solche große Datei sind Öffnen es tatsächlich zu bearbeiten, betrachten
sed
oderawk
oder einem anderen programmatischen Ansatz.quelle
Überprüfen Sie, ob auf Ihrem Server ossec agent installiert ist. Oder ein Prozess verwendet die gelöschten Protokolldateien. Vor einer Zeit war ich ein ossec Agent.
quelle
Überprüfen Sie die / lost + found, ich hatte ein System (Centos 7) und ein Teil der Datei in der / lost + found aß den gesamten Speicherplatz.
quelle