Question df sous linux ne montrant pas l’espace libre correct après la suppression du fichier


J'ai des serveurs de fichiers qui servent à stocker des fichiers. Les fichiers peuvent y résider pendant une semaine ou un an. Malheureusement, quand je supprime des fichiers du serveur, df La commande ne reflète pas l'espace libéré. Donc, finalement, le serveur est plein (df indique 99%), et mon script n’envoie plus de fichiers là-bas, à l’exception de quelques dizaines de Go d’espace libre.

j'ai eu noatime drapeau sur les partitions montées si cela fait une différence.


107
2018-02-08 07:36


origine


Est-ce que cela se produit sur une seule partition ou sur toutes les partitions? - Khaled
Eh bien, cela se produit sur ma partition de données principale, qui est la seule qui m’intéresse, puisque je n’écris / supprime que des fichiers dessus.
Veuillez m'éclairer avec la solution ou un lien vers une solution.
Quel (s) système (s) de fichiers? DF fait une statistique du superbloc, il se peut que votre système de fichiers ne mette pas à jour l’inode sb. Avez-vous essayé de vider la cache? - beans
Utiliser ext4. Comment videz-vous les caches?


Réponses:


La suppression du nom de fichier ne supprime pas réellement le fichier. Un autre processus maintient le fichier ouvert, ce qui empêche sa suppression. redémarrez ou tuez ce processus pour libérer le fichier.

Utilisation

lsof +L1

pour savoir quel processus utilise un fichier supprimé (non lié).


181
2018-02-08 07:48



Les fichiers supprimés n'ont pas été utilisés depuis plus d'un mois et le seul processus qui y accède est nginx, c'est donc douteux.
+1 De plus, "lsof + L1" vous indiquera quel programme maintient les fichiers ouverts. - pehrs
En tant que root, exécutez "fichier lsof -n | grep", vous seriez surpris de la durée de conservation des fichiers en raison de processus les maintenant ouverts pour une raison quelconque. Si tout échoue, redémarrez, je me sens mal de le suggérer, mais cela garantira que rien ne retient le fichier. Par exemple, lsof + L1 est probablement la meilleure solution. - ScottZ
Tu viens de me sauver! Supprimé un fichier journal 93G, ne récupérant pas l’espace et ne pouvant comprendre pourquoi. Merci. - Luke Cousins
Dans le même ordre d'idées et si cela peut aider les autres, j'ai effacé un fichier nginx access.log volumineux, mais je n'ai pu récupérer de l'espace qu'après avoir redémarré nginx: service nginx restart - Nick


Comme Ignacio le mentionne, la suppression du fichier ne libèrera pas d'espace tant que vous ne supprimerez pas les processus dont le descripteur est ouvert.

Néanmoins, vous pouvez récupérer l'espace sans tuer les processus. Tout ce que vous avez à faire est de supprimer les descripteurs de fichier.

Première exécution de lsof | grep supprimé pour identifier le processus contenant le fichier

[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted
java       8859   hudson    1w      REG              253,0 3662503356    7578206 /crucible/data/current/var/log/fisheye.out (deleted)

Puis exécutez:

cd /proc/PID/fd

puis

[hudson@opsynxvm0055 fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb  7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)

Le "1" sera le descripteur de fichier. Maintenant, tapez "> FD" pour récupérer cet espace

> 1

Vous devrez peut-être répéter l'opération s'il existe d'autres processus contenant le fichier.


21
2018-02-07 01:24



Que fait le > FD faire? - Pred
il supprime le descripteur de fichier - Adrián Deccico
est ce que ca > commande a un nom? Je devais passer de zsh à bash pour pouvoir l'utiliser. Est-il possible de l'exécuter sur zsh? - ariera
il s'agit d'une redirection de sortie et par conséquent tronque le fichier. Le long de serait "echo -n> 1" ou "true> 1". Cela ne supprime pas vraiment le FD, il pointe simplement sur un fichier vide par la suite. - eckes


Une possibilité est que le ou les fichiers que vous avez supprimés aient plus de références dans le système de fichiers. Si vous avez créé des liens durs, plusieurs noms de fichiers pointeront sur les mêmes données. Les données (le contenu réel) ne seront pas marquées comme étant libres / utilisables tant que toutes les références ne seront pas supprimées. Avant de supprimer des fichiers, faites-les statuer (Entrée nommée Links) ou faites-leur ls -l (cela devrait être la deuxième colonne).

S'il s'avère que les fichiers sont référencés ailleurs, je suppose que vous devrez ls -i le (s) fichier (s) pour trouver le numéro d'inode, puis faire une recherche avec -inum <numéro d'inode> pour trouver le d'autres références à ce fichier (vous voudrez probablement aussi utiliser -mount pour rester dans le même système de fichiers).


8
2018-02-08 10:01





Le fichier est toujours verrouillé par le processus d'ouverture. Pour libérer de l'espace, procédez comme suit:

  1. Courir sudo lsof | grep deleted et voir quel processus contient le fichier. Exemple de résultat:

    $ sudo lsof | grep deleted
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
    cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)
    
  2. Tuer le processus en utilisant sudo kill -9 {PID}. Dans l'échantillon ci-dessus, le PID est 1623.

    $ sudo kill -9 1623
    
  3. Courir df pour vérifier si l'espace est déjà libéré. S'il est toujours plein, vous devrez peut-être attendre quelques secondes et vérifier à nouveau.


3
2018-02-16 05:31





Si la partition a été configurée pour réserver une partie de l’espace disque à la racine, df n'inclura pas cet espace comme disponible.

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

Même après que l'espace ait été récupéré en supprimant des fichiers / répertoires, l'utilisateur non root ne pourra pas écrire sur une partition particulière.

Vous pouvez facilement vérifier si c'est votre cas en essayant de créer un fichier sur un périphérique en tant qu'utilisateur root et non root.

De plus, vous pouvez vérifier la configuration du système de fichiers en exécutant

tune2fs -l <device> | egrep "Block count|Reserved block count

et en calculant le% réel par vous-même.

Pour changer le disque% réservé à l'usage de la racine seulement, exécutez

tune2fs -m <percentage> <device>

2
2018-05-08 10:31





Les autres réponses sont correctes: si vous supprimez un fichier et que l’espace n’est pas libéré, c’est généralement soit parce que le fichier est toujours ouvert, soit qu’il contient d’autres liens en dur.

Pour vous aider à résoudre les problèmes, utilisez un outil qui vous indique où l’espace disque est utilisé: Vous pouvez utiliser du pour avoir une vue d'ensemble de l'endroit où l'espace va. Encore mieux, utilisez un outil graphique comme xdiskusage (il y en a beaucoup comme ça) pour traquer le coupable. xdiskusage et ses amis vous permettent d’explorer les plus gros porcs de l’espace pour savoir où va l’espace.

De cette façon, vous trouverez rapidement les fichiers qui occupent encore de l'espace à cause d'un deuxième lien permanent. Il montrera également l'espace occupé par les fichiers supprimés mais ouverts (en tant que (permission refusée), je crois, car il ne peut pas lire le nom du fichier).


1
2018-02-08 10:11





Depuis que je sais que beaucoup d’entre vous le font pour RedHat dans /var et gzipping des fichiers s’attendant à une réduction du FS, mais au lieu de cela, le nombre de fichiers augmente, assurez-vous simplement que vous entretenez le redémarrage de Syslog. et

lsof -v file

vous montrerait cela de toute façon.


1
2018-03-23 15:02



Cela n'ajoute pas grand chose. la réponse acceptée couvrait la logique de celle qui prévalait en 2001. Lorsque vous avez 50 répétitions, utilisez des commentaires si vous souhaitez ajouter des qualificatifs aux réponses existantes. - Andrew B


Une autre option: le disque est peut-être saturé à cause d'un processus qui crée en permanence des données: journaux, cœurs, etc. Il est possible que l'espace soit réellement libéré mais qu'il soit immédiatement rempli. J'ai effectivement vu un tel cas. df dans ce cas, ne donne simplement pas l'image du trou. Utilisation du pour apprendre plus.


0
2017-07-17 12:01