2014-04-07 13:42:39 +0000 2014-04-07 13:42:39 +0000
26
26
Advertisement

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

Advertisement

Der Umgang mit alten CentOS 5.6 Box, ohne lvm Setup, mein Root-Dateisystem / ist voll, ich habe viele alte Log-Dateien und Anwendungsdateien gelöscht, die ich nicht brauche, die mehr als 2 -5GB in der Größe war, aber mein System meldet immer noch, 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)

Irgendeine Idee, was ich als Nächstes tun sollte? Leider ist ein Neustart des Rechners im Moment keine Option.

Advertisement
Advertisement

Antworten (9)

38
38
38
2014-04-07 14:02:13 +0000

Hier könnten zwei Dinge passieren.

Erstens hat Ihr Dateisystem etwas Platz reserviert, auf den nur root schreiben kann, damit kritische Systemprozesse nicht umfallen, wenn normalen Benutzern der Speicherplatz ausgeht. Das ist der Grund, warum Sie 124G von 130G verwendet sehen, aber null verfügbar. Vielleicht haben die Dateien, die Sie gelöscht haben, die Auslastung auf diesen Punkt gesenkt, aber nicht unter den Schwellenwert für normale Benutzer.

Wenn dies Ihre Situation ist und Sie verzweifelt sind, können Sie vielleicht die Menge des reservierten Speicherplatzes für root ändern. Um ihn auf 1% zu reduzieren (der Standardwert ist 5%), wäre 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 z. B. eine Protokolldatei des Apache gelöscht haben, müssen Sie den Apache neu starten, um den Speicherplatz freizugeben.

18
18
18
2015-09-24 09:32:08 +0000

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

Um diese gelöschten Dateien anzuzeigen, führen Sie einfachlsof|grep delete aus.

10
Advertisement
10
10
2014-04-07 21:03:43 +0000
Advertisement

2 weitere Möglichkeiten, das Problem Platte ist voll zu bekommen:

1) versteckt unter einem Einhängepunkt: Linux zeigt eine volle Platte mit Dateien an, die unter einem Einhängepunkt “versteckt” sind. Wenn Sie Daten auf das Laufwerk geschrieben haben und ein anderes Dateisystem darüber mounten, vermerkt Linux die Plattennutzung korrekt, obwohl Sie die Dateien unter dem Einhängepunkt nicht sehen können. Wenn Sie nfs-Einhängungen haben, versuchen Sie, diese umzuhängen und zu sehen, ob vor dem Einhängen versehentlich etwas in diese Verzeichnisse geschrieben wurde.

2) Beschädigte Dateien: Ich sehe dies gelegentlich bei der Dateiübertragung von Windows zu Linux über SMB. Eine Datei schafft es nicht, den Dateideskriptor zu schließen, und am Ende hat man eine 4 GB große Datei voller Müll.

Dies kann mühsamer zu beheben sein, weil Sie das Unterverzeichnis finden müssen, in dem sich die Datei befindet, aber es ist leicht zu beheben, weil die Datei selbst leicht entfernbar ist. Ich verwende den Befehl du und mache eine Auflistung der Root-Unterverzeichnisse, um herauszufinden, wo der Dateispeicherplatz verwendet wird.

cd /
du -sh ./*

Die Anzahl der Verzeichnisse der obersten Ebene ist normalerweise begrenzt, also setze ich das Flag menschlich lesbar -h, um zu sehen, welches Unterverzeichnis der Platzfresser ist.

Dann wechselt man in das Problem-Unterverzeichnis und wiederholt den Vorgang für alle darin befindlichen Objekte. Damit man die großen Elemente leicht erkennen kann, ändern wir das du leicht ab und koppeln es mit einer Sortierung.

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

, was eine kleinste bis größte Ausgabe nach Bytegröße für alle Dateien und Verzeichnisse

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

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

4
4
4
2014-04-07 14:27:52 +0000

Sie können mit lsof herausfinden, welche Dateien geöffnet sind. Es kann eine Menge an Ausgaben produzieren, 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
...
1
Advertisement
1
1
2017-06-08 10:02:04 +0000
Advertisement

Wenn einige Dateien gelöscht sind, 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 löschen Sie die Datei. Es ist immer eine gute Praxis, solche Dateien zu annullieren, anstatt sie zu löschen. Um gelöschte Dateien zu finden, die aber noch von einem Prozess verwendet werden, gibt

#lsof +L1

die Prozess-ID und den Dateideskriptor an. Um eine gelöschte Datei anhand des Dateideskriptors

#echo "" > /proc/$pid/fd/$fd
``` zu löschen
1
1
1
2020-02-27 01:18:39 +0000

In den meisten Fällen, wenn wir eine Protokolldatei löschen, wird die Datei nicht mehr von ls angezeigt. Der Prozess schreibt weiterhin in diese Datei, bis Sie den Prozess anhalten.

1
Advertisement
1
1
2017-10-31 13:45:06 +0000
Advertisement

Geben Sie den Befehl

#lsof +L1

ein. Daraufhin wird eine Liste der Dateien angezeigt, die Speicher mit gelöschtem Zitat enthalten.

Notieren Sie die pid (Prozess-ID) der Datei

Beenden Sie den Prozess

#kill <pid>

Der Speicher wird vom Prozess freigegeben

Überprüfen Sie ihn mit dem Befehl

#df -h
0
0
0
2016-06-02 09:58:41 +0000

Tatsächlich in freier Wildbahn beobachtetes Problem:

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

0
Advertisement
0
0
2016-01-23 08:00:36 +0000
Advertisement

Zusätzlich zu dem, was erklärt wurde, könnte das Problem darin bestehen, dass es einen anderen Einhängepunkt des gelöschten Dateiverzeichnisses auf einem anderen angeschlossenen Festplattengerät auf demselben Server gibt. Überprüfen Sie die aktuellen Mounts und die fstab-Einträge.

Advertisement

Verwandte Fragen

6
10
5
37
3
Advertisement
Advertisement