web-dev-qa-db-fra.com

Dites à fs de libérer de l'espace des fichiers supprimés MAINTENANT

Existe-t-il un moyen de dire au noyau de redonner maintenant l'espace disque libre? Comme écrire sur quelque chose dans/proc /? Utilisation d'Ubuntu 11.10 avec ext4.

C'est probablement un ancien et thème très répété. Après avoir frappé 0 espace, je n'ai remarqué que lorsque mon éditeur ne pouvait pas enregistrer les fichiers de code source que j'avais ouverts, qui, à mon horreur, ont maintenant une taille de 0 octet dans la liste des dossiers, je suis allé sur une suppression effrénée.

J'ai supprimé des centaines de Mo de fichiers volumineux à la fois de l'utilisateur et de la racine, et j'ai également fait des liens fixes.

Juste avant moi apt-get clean il y avait plus de 900 Mo dans/var/cache/apt/archives, maintenant il n'y a plus que 108 Ko:

# du
108 /var/cache/apt/archives

Une heure plus tard, il n'y a toujours pas d'espace libre et je ne peux pas enregistrer mes précieux fichiers ouverts dans l'éditeur, mais notez la disparité ci-dessous:

# sync; df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             13915072  13304004         0 100% /

Aucune suggestion? J'ai arrêté certains services/processus mais je ne sais pas comment vérifier qui pourrait consommer activement de l'espace disque.

Plus d'informations

# 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

Vérifiez avec lsof pour voir s'il y a des fichiers ouverts. L'espace ne sera pas libéré tant qu'ils ne seront pas fermés.

Sudo /usr/sbin/lsof | grep deleted

vous indiquera quels fichiers supprimés sont toujours maintenus ouverts.

119

Utilisez lsof pour trouver le fichier supprimé, mais ouvert, qui consomme toujours de l'espace:

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

Recherchez l'entrée dans /proc/<pid>/fd/ qui correspond au descripteur de fichier:

ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

Maintenant juste cat /dev/null dans le fd:

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

Notez que l'inode est toujours ouvert, mais qu'il est maintenant de longueur 0

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

df n'affichera pas l'espace réservé à root (même lorsqu'il est exécuté en tant que root):

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

Comment changer le "pourcentage de bloc réservé"

  1. Réduisez l'espace réservé à 4%

    # tune2fs -m4 /dev/sda4

df -h affichait désormais 45M de libre.

  1. J'ai enregistré mes fichiers rapidement
  2. Remettez-le à 5%

    # tune2fs -m5 /dev/sda4

13
Marcos

Dans Ubuntu, si vous supprimiez des fichiers à l'aide de votre corbeille, vos fichiers n'étaient probablement pas supprimés complètement.

Même après avoir vidé votre corbeille, vos fichiers resteront dans ~/.local/share/Trash/expunged jusqu'à après un redémarrage et peut-être même plus longtemps.

Je n'ai pas trouvé de bonne raison à cela, mais si je manque d'espace, j'ai toujours manuellement rm les fichiers de corbeille supprimés.

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

Explication:
Grep lsof sortie pour extraire uniquement les fichiers supprimés. Sed extraire l'ID de processus et l'ID de descripteur de fichier de chaque ligne, et créer une chaîne au format {pid}/fd/{fid}. Alors que boucle et n'affiche rien dans chaque fichier, les mettre à vide.

6
Sepero

Je me demande si sync est d'une quelconque utilité ici - mais il ne devrait pas l'être, comme IIRC dans la plupart des ("nombreux"?) Systèmes, les systèmes de fichiers sont synchronisés toutes les 30 s.

Je vérifierais le journal du noyau (donc dmesg) pour trouver si quelque chose de méchant se passe et exécuter lsof pour voir si un gros fichier supprimé est toujours ouvert (en fait, je pense que les fichiers supprimés sera marqué comme tel dans la sortie lsof).

Deux raisons (dont l'une pointée dans la question que vous liez) qui peuvent faire en sorte que les fichiers supprimés ne libèrent pas d'espace sont

  • des fichiers qui n'ont pas été réellement supprimés: vous avez supprimé un fichier qui est lié ailleurs (plus précisément, vous unlink() avez édité un fichier avec plus d'un lien)
  • les fichiers qui sont encore ouverts: les fichiers ouverts sont conservés en utilisant, eh bien, les fichiers, inodes eux-mêmes, pas les entrées de répertoire, si vous supprimez l'entrée, l'inode restera là aussi longtemps qu'il sera ouvert.

Mais je ne connais pas de spécifique raison pour laquelle cela pourrait arriver avec autant de fichiers ...

5
njsg

CentOS 6.3 fait également la chose qui ne vide pas réellement la corbeille quand vous videz la corbeille. Je n'ai pas trouvé de moyen de récupérer l'espace tant que je n'ai pas couru rm -rf ~/.local/share/Trash/expunged/. Causé beaucoup de grattage de tête.

1
Biggles