So ändern Sie den „Prozentsatz reservierter Blöcke“

So ändern Sie den „Prozentsatz reservierter Blöcke“

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 cleanwaren ü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/nullins 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

dfzeigt 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“

  1. Reduzieren Sie den reservierten Speicherplatz auf 4 %

    # tune2fs -m4 /dev/sda4

df -hjetzt wurden 45 M frei angezeigt.

  1. Meine Dateien schnell gespeichert
  2. 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.

verwandte Informationen