Un de mes clients a donc reçu un courrier électronique de Linode indiquant que son serveur faisait exploser le service de sauvegarde de Linode. Pourquoi? Trop de fichiers. J'ai ri puis j'ai couru:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Merde. 2,4 millions d'inodes utilisés. Qu'est-ce qui s'est passé?
J'ai cherché les suspects évidents ( /var/{log,cache}
et le répertoire où tous les sites sont hébergés) mais je ne trouve rien de vraiment suspect. Quelque part sur cette bête, je suis certain qu'il existe un répertoire contenant quelques millions de fichiers.
Pour un contexte de mes mes serveurs occupés utilise 200K inodes et mon bureau (une ancienne installation avec plus de 4 To de stockage utilisé) est seulement un peu plus d' un million. Il ya un problème.
Donc ma question est, comment puis-je trouver où le problème est? Y a-t-il un du
pour les inodes?
la source
Réponses:
Vérifiez
/lost+found
au cas où il y aurait un problème de disque et que de nombreux fichiers indésirables aient été détectés sous forme de fichiers séparés, éventuellement à tort.Vérifiez
iostat
si une application produit toujours des fichiers aussi dingues.find / -xdev -type d -size +100k
vous dira s'il existe un répertoire qui utilise plus de 100 Ko d'espace disque. Ce serait un répertoire qui contient beaucoup de fichiers, ou contenait beaucoup de fichiers dans le passé. Vous voudrez peut-être ajuster la taille.Je ne pense pas qu’il existe une combinaison d’options permettant à GNU
du
de compter 1 par entrée de répertoire. Vous pouvez le faire en produisant la liste des fichiersfind
et en comptant un peu dans awk. Voici undu
pour les inodes. Minimalement testé, n'essaye pas de gérer les noms de fichiers contenant des sauts de lignes.Utilisation:
du-inodes /
. Imprime une liste de répertoires non vides avec le nombre total d'entrées qu'ils contiennent et leurs sous-répertoires de manière récursive. Rediriger la sortie vers un fichier et le réviser à votre guise.sort -k1nr <root.du-inodes | head
vous dira les plus grands délinquants.la source
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Vous pouvez vérifier avec ce script:
Ceci affiche les 10 meilleurs sous-répertoires par nombre de fichiers. Si vous voulez un top x, changez
head
avechead -n x
, oùx
est un nombre naturel supérieur à 0.Pour des résultats sûrs à 100%, exécutez ce script avec les privilèges root:
la source
10: read: Illegal option -d
... récuré le-d
drapeau de l'read
espoir qu'il ne se passera rien de mal. Je vous ferai savoir quand il aura fini de courir ...Souvent plus rapide que find, si votre base de données de localisation est à jour:
Cela vide la totalité de la base de données de localisation, supprime tout ce qui se trouve après le dernier '/' dans le chemin, puis le tri et "uniq -c" vous donnent le nombre de fichiers / répertoires par répertoire. "sort -n" va vous chercher les dix répertoires contenant le plus de choses.
la source
find /path/to/parent -xdev > filelist
premier, puis demandez à sed de lire les entrées de cette liste.Une autre suggère:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Utilisez ces recherches pour trouver les fichiers les plus volumineux sur votre serveur.
Trouver des fichiers de plus de 1 Go
Trouver des fichiers de plus de 100 Mo
Trouver des fichiers de plus de 10 Mo
La première partie est la commande de recherche utilisant l'indicateur "-size" pour rechercher des fichiers de différentes tailles, mesurés en kilo-octets.
Le dernier bit à la fin commençant par "-exec" permet de spécifier une commande que nous voulons exécuter sur chaque fichier trouvé. Ici, la commande "ls -lh" doit inclure toutes les informations apparaissant lors de la liste du contenu d'un répertoire. Le h vers la fin est particulièrement utile car il imprime la taille de chaque fichier dans un format lisible par l'homme.
la source
Cela a fonctionné pour moi lorsque l'autre a échoué sur Android via le shell:
la source
J'aime utiliser quelque chose comme
du --inodes -d 1
trouver un répertoire qui contient des fichiers de manière récursive ou directe.J'aime aussi cette réponse: https://unix.stackexchange.com/a/123052
la source