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
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.
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)
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
...
Réduisez l'espace réservé à 4%
# tune2fs -m4 /dev/sda4
df -h
affichait désormais 45M de libre.
Remettez-le à 5%
# tune2fs -m5 /dev/sda4
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.
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.
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
unlink()
avez édité un fichier avec plus d'un lien)Mais je ne connais pas de spécifique raison pour laquelle cela pourrait arriver avec autant de fichiers ...
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.