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

73

Existe-t-il un moyen de demander au noyau de libérer de l'espace disque maintenant? Comme écrire dans quelque chose dans / proc /? Utiliser Ubuntu 11.10 avec ext4.

C'est probablement un thème ancien et très répété. Après avoir touché 0 espace seulement remarqué lorsque mon éditeur n'a pas pu enregistrer les fichiers de code source que j'ai ouverts, qui à ma grande horreur ont maintenant une taille de 0 octet dans la liste des dossiers, je me suis lancé dans 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 durs.

Juste avant, il apt-get cleany avait plus de 900 Mo dans / var / cache / apt / archives, il n’ya plus que 108 Ko:

# du
108 /var/cache/apt/archives

Une heure plus tard, toujours pas d'espace libre et je ne peux pas sauvegarder 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 fermé certains services / processus, mais je ne sais pas comment vérifier qui pourrait manger 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
Marcos
la source
4
Le système de fichiers libère immédiatement l'espace. Cependant, la fonctionnalité de blocs réservés à la racine de ext [234] et la façon dont le noyau garde les fichiers ouverts réservés comme réservés peuvent donner l’apparence d’un espace perdu.
Hhaamu
Si vous avez plusieurs systèmes de fichiers (patitions), libérer de l’espace sur l’un ne servira à rien sur l’autre.
vonbrand
Pourquoi ai-je pu remplir la partition avant que les blocs 5Go "réservés" se récupèrent?
Psddp

Réponses:

117

Vérifiez avec lsofpour voir s'il y a des fichiers tenus ouverts. L'espace ne sera pas libéré jusqu'à ce qu'ils soient fermés.

sudo /usr/sbin/lsof | grep deleted

vous dira quels fichiers supprimés sont encore ouverts.

Aleksandar Ivanisevic
la source
Bien. M'a montré des mysqldverrous dans / tmp, mais de nombreuses apport-gtutilisations de fichiers éteints dans / var / lib / apt / lists / partial / qui se sont apparemment accumulées. Donc, je pourrais killall apport-gtmais allons enquêter en premier.
Marcos
1
Marquer comme la réponse la plus proche, bien qu’il n’ait jamais vraiment "rendu" l’espace immédiatement après la fermeture des descripteurs de fichiers / processus les utilisant. Recherche d'autres approches basées sur le noyau / proc / fs.
Marcos
18
Vous pouvez également utiliser lsof +L1(sélectionnez les fichiers ouverts non liés).
Martin Fido
Les informations contenues dans cette réponse sont correctes, mais le problème rencontré par l’opérateur n’était probablement pas dû à cela, mais à l’espace réservé réservé par la racine (auquel une autre réponse répond).
marcelm
37

Utilisez lsofpour rechercher le fichier supprimé, mais ouvert, qui utilise 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/cette liste 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/nulldans le fd:

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

Notez que l'inode est toujours ouvert, mais maintenant sa longueur est 0

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
BillQ
la source
5
Utilisation superflue de catpour tronquer. Dans Bourne shell, > /proc/3446/fd/128ça ira.
200_success
2
Ne le faites PAS si votre programme doit réellement relire une partie du fichier à l’avenir qui peut être ou ne pas être disponible dans le cache de page.
Michael R. Hines
13

dfne montrera pas d'espace réservé pour 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éduire l'espace réservé à 4%

    # tune2fs -m4 /dev/sda4

df -h maintenant montré 45M libre.

  1. Enregistré mes fichiers rapidement
  2. Remettre à 5%

    # tune2fs -m5 /dev/sda4

Marcos
la source
2
L’espace réservé à la racine est presque toujours trop grand de nos jours. Vous pouvez le réduire à quelques pour cent. dfaffiche le pour l'espace utilisable par l'utilisateur normal. Comme apt est exécuté en tant que root, l’espace réservé n’est utile que pour se protéger contre les pleins causés par des utilisateurs non-root (= utilisateurs normaux et services ayant leur propre utilisateur).
Jofel
Je suis d'accord; un mkfsces jours devraient réserver par exemple. 5% ou 300 Mo, selon le nombre le moins élevé . Il suffit de réajuster certains de mes serveurs à 2% et de libérer les Go!
Marcos
3
@ Jofel, non, ce n'est pas. Chaque fois que vous dépassez l'utilisation à 90%, vous commencez à avoir beaucoup de fragmentation. Vous devez libérer de l'espace supplémentaire et ne pas vous rapprocher de l'utilisation à 100%.
Psusi
@ psusi Vous êtes vrai, merci pour votre commentaire. Mais la possibilité d'utiliser (temporairement) presque tout l'espace disponible en tant qu'utilisateur normal pourrait être vraiment pratique et avec ext4, les choses ne sont plus si mauvaises, voir unix.stackexchange.com/a/7965/15241
jofel
7

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

Même après avoir vidé votre corbeille, vos fichiers resteront ~/.local/share/Trash/expungedaprès le 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 rmles fichiers de la corbeille supprimés.

Kwarrick
la source
1
Bon point. Même si je fais partie de ceux qui vivent et meurent en ligne de commande, ils utilisent rarement le gestionnaire de fichiers graphique. Je n'ai pas encore remarqué que ce dossier expurgé était une cachette: un clic sur la corbeille vide avait toujours été définitif et avait rendu mon espace disque en cas de besoin.
Marcos
6
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: La sortie
Grep permet lsofd'extraire uniquement les fichiers supprimés. Il extrait l’identificateur de processus et l’identificateur filedescriptor de chaque ligne et crée une chaîne au format {pid}/fd/{fid}. Alors que la boucle et rien ne sort à chaque fichier, les définissant à vide.

Sepero
la source
3
J'ai une erreur "erreur de syntaxe près du jeton inattendu` ('"
Majid Golshadi
5

Je me demande s’il syncest d’une quelconque aide ici - mais cela ne devrait pas être le cas, comme dans la plupart des systèmes ("nombreux"?), Les systèmes de fichiers sont synchronisés toutes les 30 s.

Je vérifierais dans le journal du noyau (donc dmesg) pour voir si quelque chose de désagréable se passe et lancerais-le lsofpour voir si un gros fichier supprimé est encore ouvert (en fait, je pense que les fichiers supprimés seront marqués comme tels dans la lsofsortie).

Deux raisons (l’une de celles-ci pointées dans la question que vous associez) qui peuvent empêcher les fichiers supprimés de ne libérer aucun espace sont:

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

Mais je ne connais pas de raison particulière pour laquelle cela pourrait se produire avec autant de fichiers ...

njsg
la source
syncjamais aidé. En ce qui concerne les journaux, il s’agit d’un système Ubuntu, donc c’est plutôt bogué, alors ils sont généralement bruyants. apporta souvent été déployé parce que tous les soirs, apt-get update plante, bien que / var / crash ne dispose que de 77 Mo. Nous atdavons également remarqué atd[8892]: File a0015c0152ab76 is in wrong format - abortingque le fichier / var / log / syslog était inondé de lignes répétitives, comme probablement car les quelques fichiers de / var / spool / cron / atspool étaient tous de taille 0, ce qui rend le problème circulaire bien sûr
Marcos
1

CentOS 6.3 permet également de ne pas vider réellement la poubelle lorsque vous videz la poubelle. Je ne pouvais pas trouver un moyen de récupérer l'espace avant de courir rm -rf ~/.local/share/Trash/expunged/. Causé beaucoup grattant la tête.

Biggles
la source