J'ai un lecteur de disque où l'utilisation d'inode est de 100% (à l'aide de la df -i
commande). Cependant, après la suppression substantielle des fichiers, l'utilisation reste à 100%.
Quelle est la bonne façon de procéder alors?
Comment est-il possible qu'un lecteur de disque avec moins d'espace disque puisse avoir une utilisation Inode plus élevée qu'un lecteur de disque avec une utilisation d'espace disque plus élevée?
Est-il possible que le nombre de fichiers compressés réduise le nombre d'inodes utilisés?
linux
unix
memory-management
inode
neversaint
la source
la source
Réponses:
Il est assez facile pour un disque d'avoir un grand nombre d'inodes utilisés même si le disque n'est pas très plein.
Un inode est alloué à un fichier, donc, si vous avez des millions de fichiers, tous de 1 octet chacun, vous manquerez d'inodes bien avant de manquer de disque.
Il est également possible que la suppression de fichiers ne réduise pas le nombre d'inodes si les fichiers ont plusieurs liens durs. Comme je l'ai dit, les inodes appartiennent au fichier, pas à l'entrée de répertoire. Si un fichier a deux entrées de répertoire liées, la suppression d'une ne libérera pas l'inode.
De plus, vous pouvez supprimer une entrée de répertoire mais, si un processus en cours a toujours le fichier ouvert, l'inode ne sera pas libéré.
Mon premier conseil serait de supprimer tous les fichiers que vous pouvez, puis de redémarrer la boîte pour vous assurer qu'aucun processus ne laisse les fichiers ouverts.
Si vous faites cela et que vous avez toujours un problème, faites-le nous savoir.
Soit dit en passant, si vous recherchez les répertoires contenant de nombreux fichiers, ce script peut vous aider:
la source
>/tmp/count_em_$$
cela ne fonctionnera que si vous avez de la place ... si c'est le cas, voir la réponse de @ simon./tmp
n'affectera pas vos autres systèmes de fichiers.ls -A
au lieu dels -a
. Pourquoi voudriez-vous compter. et ..?Si vous n'avez pas de chance, vous avez utilisé environ 100% de tous les inodes et ne pouvez pas créer le scipt. Vous pouvez vérifier cela avec
df -ih
.Cette commande bash peut alors vous aider:
Et oui, cela prendra du temps, mais vous pouvez localiser le répertoire contenant le plus de fichiers.
la source
awk
pourrait conserver un hachage du répertoire et le nombre de fichiers sans unifier et trier un gazillion de lignes. Cela dit, voici peut-être une amélioration:find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
- cela ne trie que la dernière liste.sort
possible que tout ne soit pas conservé en mémoire et essaiera de revenir automatiquement à l'écriture d'un fichier temporaire. Un processus qui échouera évidemment ...sort
a échoué pour moi, mais j'ai pu donner--buffer-size=10G
ce qui a fonctionné.Ma situation était que je n'avais plus d'inodes et j'avais déjà supprimé tout ce que je pouvais.
Je suis sur un Ubuntu 12.04LTS et je n'ai pas pu supprimer les anciens noyaux Linux qui occupaient environ 400 000 inodes car apt était cassé à cause d'un paquet manquant. Et je n'ai pas pu installer le nouveau paquet parce que j'étais à court d'inodes donc j'étais coincé.
J'ai fini par supprimer quelques anciens noyaux Linux à la main pour libérer environ 10 000 inodes
C'était suffisant pour ensuite me laisser installer le paquet manquant et réparer mon apt
puis supprimez le reste des anciens noyaux Linux avec apt
les choses vont beaucoup mieux maintenant
la source
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
si je suis sûr que je n'utilise pas ce noyau?$ sudo apt-get autoremove
seul, a fait l'affaire pour moi.Ma solution:
Essayez de trouver s'il s'agit d'un problème d'inodes avec:
Essayez de trouver des dossiers racine avec un grand nombre d'inodes:
Essayez de trouver des dossiers spécifiques:
S'il s'agit d'en-têtes Linux, essayez de supprimer les plus anciens avec:
Personnellement, je les ai déplacés vers un dossier monté (car pour moi la dernière commande a échoué) et j'ai installé la dernière avec:
Cela a résolu mon problème.
la source
SpamAssasin-Temp
.find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
a fait le travail :) Merci!for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
montrer le top 10 du plus grand répertoireJ'ai eu le même problème, je l'ai résolu en supprimant les sessions d'annuaire de php
Il peut être inférieur
/var/lib/php5
si vous utilisez une ancienne version de php.Recréez-le avec l'autorisation suivante
L'autorisation par défaut pour le répertoire sur Debian a été montrée
drwx-wx-wt
(1733)la source
rm -rf /var/lib/php/sessions/*
serait probablement une meilleure commande - elle ne supprimera pas le répertoire de la session, juste son contenu ... Ensuite, vous n'avez pas à vous soucier de le recréerNous l'avons constaté sur un compte HostGator (qui place des limites d'inode sur tous leurs hébergements) suite à une attaque de spam. Il a laissé un grand nombre d'enregistrements de file d'attente dans /root/.cpanel/comet. Si cela se produit et que vous constatez que vous n'avez pas d'inodes libres, vous pouvez exécuter cet utilitaire cpanel via shell:
la source
Vous pouvez utiliser RSYNC pour SUPPRIMER le grand nombre de fichiers
Créez un dossier vierge avec 0 fichier et la commande synchronisera vos dossiers de test avec un grand nombre de fichiers (j'ai supprimé près de 5 millions de fichiers en utilisant cette méthode).
Merci à http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
la source
rm *
pour beaucoup de fichiers, en raison de l'expansion du caractère générique et de la transmission / du traitement de chaque argument, maisrm test/
c'est bien pour supprimer untest/
dossier contenant beaucoup de fichiers.eaccelerator pourrait être à l'origine du problème car il compile PHP en blocs ... J'ai eu ce problème avec un serveur Amazon AWS sur un site à forte charge. Libérez des inodes en supprimant le cache eaccelerator dans / var / cache / eaccelerator si vous continuez à rencontrer des problèmes.
(ou quel que soit votre répertoire cache)
la source
Nous avons récemment rencontré un problème similaire.Si un processus fait référence à un fichier supprimé, l'inode ne doit pas être libéré, vous devez donc vérifier lsof / et tuer / redémarrer le processus libérera les inodes.
Corrigez-moi si je me trompe ici.
la source
Comme indiqué précédemment, le système de fichiers peut manquer d'inodes, s'il y a beaucoup de petits fichiers. J'ai fourni quelques moyens pour trouver des répertoires contenant la plupart des fichiers ici .
la source
Réponse tardive: dans mon cas, c'était mes fichiers de session sous
qui utilisaient des inodes.
Je n'ai même pas pu ouvrir ma crontab ou créer un nouveau répertoire et encore moins déclencher l'opération de suppression. Depuis que j'utilise PHP, nous avons ce guide où j'ai copié le code de l'exemple 1 et mis en place un cronjob pour exécuter cette partie du code.
Si vous vous demandez comment ai-je réussi à ouvrir mon crontab, eh bien, j'ai supprimé certaines sessions manuellement via CLI.
J'espère que cela t'aides!
la source
vous pouvez voir cette info
la source
Jusqu'à présent, de nombreuses réponses à celle-ci et toutes les réponses ci-dessus semblent concrètes. Je pense que vous serez en sécurité en utilisant au
stat
fur et à mesure, mais selon le système d'exploitation, vous pouvez obtenir des erreurs d'inode sur vous. Donc, l'implémentation de votre proprestat
fonctionnalité d'appel en utilisant64bit
pour éviter tout problème de débordement semble assez compatible.la source
Si vous utilisez Docker, supprimez toutes les images. Ils ont utilisé beaucoup d'espace ....
Arrêtez tous les conteneurs
Supprimer tous les conteneurs
Supprimer toutes les images
Fonctionne pour moi
la source