it-swarm.com.de

Weisen Sie fs an, JETZT Speicherplatz aus gelöschten Dateien freizugeben

Gibt es eine Möglichkeit, den Kernel anzuweisen, den freien Speicherplatz jetzt zurückzugeben? Wie ein Schreiben an etwas in/proc /? Verwenden von Ubuntu 11.10 mit ext4.

Dies ist wahrscheinlich ein altes und sehr wiederholtes Thema. Nachdem ich 0 Leerzeichen erreicht hatte, bemerkte ich nur, dass mein Editor geöffnete Quellcodedateien nicht speichern konnte, die zu meinem Entsetzen jetzt 0 Byte Größe in der Ordnerliste haben. Ich machte einen Löschversuch.

Ich habe Hunderte von MB großer Dateien sowohl vom Benutzer als auch vom Stamm gelöscht und auch einige Hardlinks erstellt.

Kurz bevor ich apt-get clean In/var/cache/apt/archives befanden sich über 900 MB, jetzt sind es nur noch 108 KB:

# du
108 /var/cache/apt/archives

Eine Stunde später immer noch kein freier Speicherplatz und kann meine im Editor geöffneten wertvollen Dateien nicht speichern, aber beachten Sie die folgenden Unterschiede:

# 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 soll, wer möglicherweise aktiv Speicherplatz belegt.

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
74
Marcos

Überprüfen Sie mit lsof, ob Dateien geöffnet sind. Der Speicherplatz wird erst freigegeben, wenn sie geschlossen sind.

Sudo /usr/sbin/lsof | grep deleted

wird Ihnen sagen, welche gelöschten Dateien noch offen gehalten werden.

119

Verwenden Sie lsof, um die gelöschte, aber geöffnete Datei zu finden, die noch Speicherplatz beansprucht:

lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome     3446       user  128u      REG              253,2              16400       2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)  

Finden Sie den Eintrag in /proc/<pid>/fd/, das 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)

Jetzt gerade cat /dev/null in die fd:

cat /dev/null > /proc/3446/fd/128

Beachten Sie, dass der Inode noch offen ist, aber jetzt die Länge 0 hat

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
38
BillQ

df zeigt keinen für root reservierten Speicherplatz an (auch wenn er als root ausgeführt wird):

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

So ändern Sie den "reservierten Blockprozentsatz"

  1. Reduzieren Sie den reservierten Speicherplatz auf 4%

    # tune2fs -m4 /dev/sda4

df -h zeigte jetzt 45M frei.

  1. Meine Dateien wurden schnell gespeichert
  2. Setzen Sie es zurück auf 5%

    # tune2fs -m5 /dev/sda4

13
Marcos

Wenn Sie in Ubuntu Dateien mit Ihrem Papierkorb gelöscht haben, wurden Ihre Dateien höchstwahrscheinlich nicht vollständig entfernt.

Auch nach dem Leeren Ihres Papierkorbs bleiben Ihre Dateien in ~/.local/share/Trash/expunged bis nach einem Neustart und vielleicht noch länger.

Ich habe keinen guten Grund dafür gefunden, aber wenn mir der Speicherplatz ausgeht, habe ich die gelöschten Papierkorbdateien immer manuell rm.

8
kwarrick
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

Erläuterung:
Grep lsof Ausgabe, um nur gelöschte Dateien zu extrahieren. Sed Extrahieren Sie die Prozess-ID und die Fileskriptor-ID aus jeder Zeile und erstellen Sie eine Zeichenfolge im Format {pid}/fd/{fid}. While-Schleife und Ausgabe nichts für jede Datei, setzen Sie sie auf leer.

6
Sepero

Ich frage mich, ob sync hier hilfreich ist - aber es sollte nicht sein, dass Dateisysteme, wie IIRC in den meisten ("vielen"?) Systemen, alle 30 s synchronisiert werden.

Ich würde das Kernel-Protokoll (also dmesg) überprüfen, um festzustellen, ob etwas Böses vor sich geht, und lsof ausführen, um festzustellen, ob noch eine große, gelöschte Datei geöffnet ist (ich denke tatsächlich, gelöschte Dateien wird in der Ausgabe von lsof so markiert).

Zwei Gründe (einer davon in der von Ihnen verlinkten Frage), die dazu führen können, dass gelöschte Dateien keinen Speicherplatz freigeben, sind:

  • dateien, die nicht tatsächlich gelöscht wurden: Sie haben eine Datei gelöscht, die an einer anderen Stelle fest verlinkt ist (genauer gesagt, Sie unlink() haben eine Datei mit mehr als einem Link bearbeitet).
  • dateien, die noch geöffnet sind: Geöffnete Dateien werden mit Dateien, Inodes selbst und nicht mit Verzeichniseinträgen gebucht. Wenn Sie den Eintrag löschen, bleibt der Inode dort, solange er noch geöffnet ist.

Aber ich kenne keinen spezifischen Grund, warum das bei so vielen Dateien passieren könnte ...

5
njsg

CentOS 6.3 erledigt auch das Nicht-Leeren des Mülleimers, wenn Sie den Mülleimer leeren. Ich konnte keinen Weg finden, den Speicherplatz zurückzugewinnen, bis ich einfach rm -rf ~/.local/share/Trash/expunged/. Verursachte viel Kopfkratzen.

1
Biggles