
Gibt es eine Möglichkeit, dem Kernel mitzuteilen, dass er den freien Speicherplatz jetzt zurückgeben soll? Etwa durch Schreiben in /proc/? Ich verwende Ubuntu 11.10 mit ext4.
Dies ist wahrscheinlich einaltund sehr wiederkehrendes Thema. Nachdem ich auf 0 Speicherplatz gestoßen war, bemerkte ich es erst, als mein Editor geöffnete Quellcodedateien nicht speichern konnte, die zu meinem Entsetzen jetzt in der Ordnerliste eine Größe von 0 Byte haben, und begann eine Löschorgie.
Ich habe sowohl vom Benutzer als auch vom Root-Benutzer große Dateien im Umfang von mehreren Hundert MB gelöscht und auch einige Hardlinks erstellt.
Kurz vorher apt-get clean
waren über 900 MB in /var/cache/apt/archives, jetzt sind es nur noch 108 KB:
# du
108 /var/cache/apt/archives
Eine Stunde später ist immer noch kein Speicherplatz frei und ich kann meine wertvollen, im Editor geöffneten Dateien nicht speichern. Beachten Sie jedoch die folgende Diskrepanz:
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
Irgendwelche Vorschläge? Ich habe einige Dienste/Prozesse abgeschaltet, bin mir aber nicht sicher, wie ich überprüfen kann, wer möglicherweise aktiv Speicherplatz verbraucht.
Mehr Info
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
Antwort1
Überprüfen Sie mit lsof
, ob Dateien geöffnet sind. Der Speicherplatz wird erst freigegeben, wenn die Dateien geschlossen werden.
sudo /usr/sbin/lsof | grep deleted
teilt Ihnen mit, welche gelöschten Dateien noch geöffnet sind.
Antwort2
Verwenden Sie lsof
, um die gelöschte, aber geöffnete Datei zu finden, die immer noch Speicherplatz belegt:
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Suchen Sie den Eintrag, /proc/<pid>/fd/
der dem Dateihandle entspricht:
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Nun aber gleich cat /dev/null
ins fd:
cat /dev/null > /proc/3446/fd/128
Beachten Sie, dass der Inode immer noch offen ist, aber jetzt die Länge 0 hat
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Antwort3
df
zeigt keinen reservierten Speicherplatz an root
(auch nicht bei Ausführung als root
):
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
So ändern Sie den „Prozentsatz reservierter Blöcke“
Reduzieren Sie den reservierten Speicherplatz auf 4 %
# tune2fs -m4 /dev/sda4
df -h
jetzt wurden 45 M frei angezeigt.
- Meine Dateien schnell gespeichert
Setzen Sie es auf 5 % zurück
# tune2fs -m5 /dev/sda4
Antwort4
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done
Erklärung:
Grep lsof
-Ausgabe, um nur gelöschte Dateien zu extrahieren. Sed extrahiert die Prozess-ID und die Dateideskriptor-ID aus jeder Zeile und erstellt eine Zeichenfolge im Format {pid}/fd/{fid}
. While-Schleife und gibt nichts in jede Datei aus und setzt sie auf leer.