Löschen von Dateien, aber der Speicherplatz ist noch voll

26

Der Umgang mit der alten CentOS 5.6-Box, ohne lvm-Setup, mein Root-Dateisystem / ist voll, ich habe viele alte Protokolldateien und Anwendungsdateien gelöscht, die ich nicht benötige, die mehr als 2 bis 5 GB groß waren, jedoch mein System meldet weiterhin, dass die Festplatte voll ist.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Hast du eine Idee, was ich als nächstes versuchen soll? ein neustart der box ist derzeit leider nicht möglich.

user1007727
quelle
1
Entschuldigen Sie die dumme Frage, aber haben Sie sichergestellt, dass Ihre /.Trash/leer ist? Hast du getan sudo rm -Rf ~/.Trash/*?
Art Gertner
Dies ist ein Server, auf dem xwindow nicht installiert ist. Daher befindet sich in meinem Stammkonto kein Ordner ".trash".
User1007727
Meine schlechte, ich nahm an /.Trash/ existiert auf allen Unix-ähnlichen Systemen.
Art Gertner
Sie können auch den Befehl sync ( linux.die.net/man/8/sync ) ausführen. Möglicherweise werden alle Vorgänge noch zwischengespeichert.
Weberik

Antworten:

38

Hier könnten zwei Dinge passieren.

Erstens hat Ihr Dateisystem Speicherplatz reserviert, auf den nur geschrieben werden rootkann, damit kritische Systemprozesse nicht umfallen, wenn normalen Benutzern der Speicherplatz ausgeht. Deshalb sehen Sie 124G von 130G gebraucht, aber null verfügbar. Möglicherweise haben die von Ihnen gelöschten Dateien die Auslastung auf diesen Punkt gesenkt, jedoch nicht unter den Schwellenwert für normale Benutzer.

Wenn dies Ihre Situation ist und Sie verzweifelt sind, können Sie möglicherweise den reservierten Speicherplatz ändern root. Zum Reduzieren auf 1% (der Standardwert ist 5%) lautet Ihr Befehl

# tune2fs -m 1 /dev/sda3

Zweitens gibt das Betriebssystem keinen Speicherplatz für gelöschte Dateien frei, die noch geöffnet sind. Wenn Sie eine der Apache-Protokolldateien gelöscht haben, müssen Sie Apache neu starten, um Speicherplatz freizugeben.

Flup
quelle
1
Ja, der zweite sollte der erste sein!
Mulya
Diese Frage & Antwort (en) geben weitere Informationen an superuser.com/questions/444269/… .
Luka5z
18

Wenn Sie eine Datei löschen, die von einem Prozess verwendet wird, können Sie die Datei nicht mehr anzeigen ls. Der Prozess schreibt noch in diese Datei, bis Sie den Prozess beenden.

Führen Sie einfach aus, um diese gelöschten Dateien anzuzeigen lsof|grep delete

Tao Zhou
quelle
1
Dies war das Problem in meinem Fall. Vielen Dank, sehr nützliche Informationen.
Dag Sondre Hansen
Zugehörige Antwort: unix.stackexchange.com/questions/34140/…
icc97
10

2 andere Möglichkeiten, um die Festplatte zu bekommen, ist volles Problem:

1) Unter einem Einhängepunkt versteckt: Linux zeigt eine vollständige Festplatte mit Dateien, die unter einem Einhängepunkt "versteckt" sind. Wenn Sie Daten auf das Laufwerk geschrieben haben und ein anderes Dateisystem darüber mounten, merkt sich Linux die Festplattennutzung korrekt, obwohl Sie die Dateien unter dem Mount-Punkt nicht sehen können. Wenn Sie über nfs-Bereitstellungen verfügen, versuchen Sie, die Bereitstellung aufzuheben, und prüfen Sie, ob vor der Bereitstellung versehentlich etwas in diese Verzeichnisse geschrieben wurde.

2) beschädigte Dateien: Ich sehe dies gelegentlich unter Windows zur Linux-Dateiübertragung über SMB. Eine Datei kann den Dateideskriptor nicht schließen, und Sie erhalten eine 4-GB-Papierkorbdatei.

Dies kann mühsamer zu beheben sein, da Sie das Unterverzeichnis suchen müssen, in dem sich die Datei befindet, aber es ist einfach zu beheben, da die Datei selbst leicht entfernbar ist. Ich benutze den duBefehl und führe eine Auflistung der Root-Unterverzeichnisse durch, um herauszufinden, wo der Dateibereich verwendet wird.

cd /
du -sh ./* 

Die Anzahl der Top-Level-Verzeichnisse ist normalerweise begrenzt, daher setze ich das für Menschen lesbare Flag, um -hzu sehen, welches Unterverzeichnis das Space-Hog ist.

Dann cd Sie in das Problemkind und wiederholen den Vorgang für alle Elemente darin. Um das Erkennen der großen Gegenstände zu vereinfachen, ändern wir das du geringfügig und koppeln es mit einer Sortierung.

cd /<suspiciously large dir>
du -s ./* | sort -n

Dadurch wird für alle Dateien und Verzeichnisse die kleinste bis größte Ausgabe nach Bytegröße erzeugt

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

Sobald Sie die übergroße Datei entdeckt haben, können Sie sie normalerweise einfach löschen.

Dan L
quelle
Tolle Tipps! Ich verfolgte die Ordner unter / using du und fand mehrere extrem große Systemabbilder unter Android SDK. Löschte sie und alles ist wieder normal :)
Pupper
4

Mit lsof können Sie herausfinden, welche Dateien geöffnet sind. Es kann eine Menge von Ausgaben erzeugen, daher habe ich mich im folgenden Beispiel auf Zeilen beschränkt, die mit log enden:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...
jris198944
quelle
1

Wenn einige Dateien gelöscht, aber noch von einem Prozess verwendet werden, wird der Speicherplatz nicht freigegeben. Starten Sie in diesem Fall entweder einen Prozess neu, der die Datei verwendet, oder machen Sie die Datei ungültig. Es ist immer empfehlenswert, solche Dateien auf null zu setzen, anstatt sie zu löschen. So finden Sie gelöschte Dateien, die jedoch noch von einigen Prozessen verwendet werden

#lsof +L1

es wird Prozess-ID und Dateideskriptor geben. Löschen einer gelöschten Datei anhand des Dateideskriptors

#echo "" > /proc/$pid/fd/$fd 
Sagar Jagnade
quelle
1

Geben Sie den Befehl ein

#lsof +L1

Welche zeigt die Liste der Dateien, die Speicher mit gelöschten Anführungszeichen.

Notieren Sie die PID (Prozess-ID) der Datei

Beende den Prozess

#kill <pid>

Der Speicher wird durch den Vorgang freigegeben

Überprüfen Sie es per Befehl

#df -h
Javeed Shakeel
quelle
0

Zusätzlich zu den Erläuterungen könnte das Problem darin bestehen, dass sich auf einem anderen angeschlossenen Festplattengerät auf demselben Server ein anderer Mount-Punkt des Verzeichnisses für gelöschte Dateien befindet. Überprüfen Sie die aktuellen Mounts und die fstab-Einträge.

Laith Leo Alobaidy
quelle
0

Tatsächliches Problem in freier Wildbahn beobachtet:

Stellen Sie sicher, dass Sie die tatsächlichen Dateien löschen und keine Symlinks zu den Dateien erstellen. Dies kann insbesondere bei Protokolldateien der Fall sein.

icc97
quelle