J'ai vu cette question au-dessus de stackoverflow, mais je n’ai aimé aucune des réponses, et c’est vraiment une question qui devrait être ici dans U & L de toute façon.
Fondamentalement, un inode est utilisé pour chaque fichier du système de fichiers. Donc, manquer d'inodes signifie généralement que vous avez beaucoup de petits fichiers qui traînent. La question devient alors: "quel répertoire contient un grand nombre de fichiers?"
Dans ce cas, le système de fichiers qui nous intéresse est le système de fichiers racine /
. Nous pouvons donc utiliser la commande suivante:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Cela produira une liste de chaque répertoire du système de fichiers préfixé par le nombre de fichiers (et de sous-répertoires) de ce répertoire. Ainsi, le répertoire avec le plus grand nombre de fichiers sera en bas.
Dans mon cas, cela se présente comme suit:
1202 /usr/share/man/man1
2714 /usr/share/man/man3
2826 /var/lib/dpkg/info
306588 /var/spool/postfix/maildrop
Donc, fondamentalement, /var/spool/postfix/maildrop
consomme tous les inodes.
Remarque, cette réponse comporte trois mises en garde auxquelles je peux penser. Il ne gère pas correctement les nouvelles lignes dans le chemin. Je sais que mon système de fichiers ne contient pas de fichiers avec des retours à la ligne, et comme il n'est utilisé que pour la consommation humaine, le problème potentiel ne vaut pas la peine d'être résolu (et on peut toujours remplacer le \n
avec par \0
et utiliser sort -z
ci-dessus). Il ne gère pas non plus si les fichiers sont répartis sur un grand nombre de répertoires. Ce n'est pas probable cependant, donc je considère le risque acceptable. Il comptera également les liens physiques vers un même fichier (si vous utilisez un seul inode) plusieurs fois. Encore une fois, peu de chances de donner de faux positifs
La raison principale pour laquelle je n’ai aimé aucune des réponses à la réponse de stackoverflow est qu’elles dépassent toutes les limites du système de fichiers. Comme mon problème concernait le système de fichiers racine, cela signifiait qu'il traverserait chaque système de fichiers monté. Lancer -xdev
les commandes de recherche ne fonctionnerait même pas correctement.
Par exemple, la réponse la plus votée est celle-ci:
for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
Si nous changeons cela à la place
for i in `find . -xdev -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
même s’il /mnt/foo
s’agit d’un montage, il s’agit également d’un répertoire sur le système de fichiers racine; il sera donc retourné find . -mount -type d
, puis transmis au ls -a $i
, qui plongera dans le montage.
Le find
dans ma réponse répertorie plutôt le répertoire de chaque fichier du montage. Donc, fondamentalement, avec une structure de fichier telle que:
/foo/bar
/foo/baz
/pop/tart
on se retrouve avec
/foo
/foo
/pop
Il suffit donc de compter le nombre de lignes en double.
/tmp
, puis que le système soit configuré pour monter un fichier tmpfs/tmp
. Dans ce cas, vous ne pourrez pas trouver les fichiersfind
seuls. Senario improbable, mais à noter.-printf
semble être une extension GNU à rechercher, car la version BSD disponible sous OS X ne la prend pas en charge.Ceci est republié d' ici à la demande du demandeur:
Et si vous voulez rester dans le même système de fichiers que vous faites:
Voici quelques exemples de résultats:
MAINTENANT AVEC LS:
Plusieurs personnes ont mentionné qu'elles n'avaient pas de coreutils à jour et que l'option --inodes n'était pas disponible pour elles. Alors, voici ls:
Si vous êtes curieux, le cœur de cette tâche fastidieuse
regex
consiste à remplacer les résultats de recherche récursifsfilename
de chacun desls's
résultats de recherche récursifs par le nom du répertoire dans lequel ils ont été trouvés. À partir de là, il suffit de serrer les numéros d'inode répétés, puis de compter les noms de répertoire répétés et de les trier en conséquence.Cette
-U
option est particulièrement utile pour le tri car elle ne trie pas et présente plutôt la liste de répertoires dans l’ordre original ou, en d’autres termes, parinode
numéro.Et bien sûr, cela
-1
est extrêmement utile dans la mesure où il garantit un seul résultat par ligne, quels que soient les retours à la ligne éventuellement inclus dans les noms de fichiers ou d’autres problèmes spectaculaires qui peuvent survenir lorsque vous essayez d’analyser une liste.Et bien sûr
-A
pour tous et-i
pour inode et-R
pour récursif et c’est tout.La méthode sous-jacente à ceci est que je remplace chacun des noms de fichiers de ls par son nom de répertoire contenu dans sed. Suite à cela ... Eh bien, je suis moi-même un peu floue. Je suis à peu près certain que les fichiers sont comptés avec précision, comme vous pouvez le voir ici:
Ceci me fournit des résultats à peu près identiques à la
du
commande:DU:
LS:
Je pense que la
include
chose dépend simplement du répertoire dans lequel le programme se penche en premier - car ce sont les mêmes fichiers et les liens fixes. Un peu comme la chose ci-dessus. Je peux toutefois me tromper à ce sujet - et je me réjouis de la correction ...DU DEMO
Faire un répertoire de test:
Quelques annuaires d'enfants:
Faire des fichiers:
Quelques liens durs:
Regardez les liens durs:
Ils sont comptés seuls, mais allez un répertoire en place ...
Puis j'ai couru mon script run d'en bas et:
Et Graeme's:
Donc, je pense que cela montre que le seul moyen de compter les inodes est par inode. Et comme le fait de compter les fichiers signifie de compter les inodes, vous ne pouvez pas compter deux fois les inodes - pour compter les fichiers avec précision, les inodes ne peuvent pas être comptés plus d'une fois.
la source
--inodes
? quelles "variantes" / "saveurs" / "posix-wannabes" / "implémentations" / quoi que vous ayez?J'ai utilisé cette réponse de SO Q & A intitulée: Où sont tous mes inodes utilisés? quand notre NAS a été épuisé il y a environ 2 ans:
Exemple
Vérification des inodes du périphérique
En fonction de votre NAS, il se peut qu’il ne propose pas une
df
commande complète . Donc, dans ces cas, vous pouvez utiliser à latune2fs
place:Franchir les limites du système de fichiers
Vous pouvez utiliser le
-xdev
commutateur directfind
pour limiter la recherche au périphérique sur lequel vous lancez la recherche.Exemple
Supposons que mon
/home
répertoire se monte automatiquement via des partages NFS à partir de mon NAS, dont le nom est mulder.Notez que le point de montage est toujours considéré comme local par rapport au système.
Maintenant quand j'initie
find
:Il
/home
n'a trouvé aucun contenu monté automatiquement car il se trouve sur un autre appareil!Types de système de fichiers
Vous pouvez utiliser le commutateur
find
,-fstype
pour contrôler le type de systèmes de fichiersfind
se penchera sur.Exemple
Quel système de fichiers ai-je?
Vous pouvez donc utiliser ceci pour contrôler le croisement:
seulement ext3
seulement nfs
ext3 et ext4
la source
/
était plein et que vous avez des systèmes de fichiers réseau montés, vous ne voulez pas vous plonger dans les systèmes de fichiers réseau.-fstype
àfind
.-xtype
les systèmes de fichiers sont exclus, mais le type de fichier. Je ne trouve que des exemples comme celui-ci:find . \( -fstype nfs -prune \)
find
dépasser les limites du système de fichiers. Dans son ex. il mentionne "Comme si / est rempli, et que vous avez des systèmes de fichiers réseau montés, vous ne voulez pas plonger dans les systèmes de fichiers réseau".Commande pour trouver l'inode utilisé:
la source
Pour répertorier l'utilisation d'inode détaillée pour
/
, utilisez la commande suivante:la source
Répondez certainement avec un maximum de votes positifs pour aider à comprendre le concept des inodes sous Linux et Unix, mais cela n’aide pas vraiment quand il s’agit de traiter le problème de la suppression ou de la suppression des inodes du disque. Une manière plus simple de le faire sur les systèmes basés sur Ubuntu consiste à supprimer les en-têtes et les images de noyau Linux indésirables.
Feriez-le pour vous. Dans mon cas, l'utilisation d'inodes était à 78% en raison de laquelle j'ai reçu une alerte.
Après exécution de la
sudo apt-get autoremove
commande, il était tombé à 29%C'était juste mon observation qui m'a sauvé le temps. Les gens peuvent trouver une meilleure solution que celle-là.
la source
Je trouve plus rapide et plus facile d’explorer en utilisant la commande suivante:
Vous pouvez ensuite accéder à,
var
par exemple, et voir quel est le gros inode utilisant des répertoires.la source
Jusqu'à présent, chaque réponse suppose que le problème concerne plusieurs fichiers dans un seul répertoire, au lieu de plusieurs sous-répertoires contribuant tous au problème. Heureusement, la solution consiste simplement à utiliser moins de drapeaux.
Ou avec des options plus courtes:
du --inodes -x | sort -n
. Malheureusement, toutes les versions dedu
l'option inodes ne sont pas disponibles .la source