2010-11-29 10 views
5

quel est le meilleur et le plus rapide moyen de calculer les tailles de répertoires? Par exemple, nous aurons la structure suivante:Le moyen le plus rapide pour calculer les tailles d'annuaire

/users 
     /a 
     /b 
     /c 
     /... 

Nous avons besoin que la sortie soit par répertoire utilisateur:

a = 1224KB 
b = 3533KB 
c = 3324KB 
... 

Nous prévoyons d'avoir des dizaines peut-être même des centaines de milliers de répertoires sous/utilisateurs. La commande shell suivante fonctionne:

du -cms /users/a | grep total | awk '{print $1}' 

Mais, nous devrons l'appeler N nombre de fois. Le point entier, est-ce la sortie; la taille de chaque répertoire d'utilisateurs sera stockée dans notre base de données. En outre, nous aimerions qu'il soit mis à jour aussi souvent que possible, mais sans bloquer toutes les ressources sur le serveur. Est-il même possible de le faire calculer la taille du répertoire des utilisateurs chaque minute? Que diriez-vous toutes les 5 minutes?

Maintenant que j'y pense un peu plus, est-ce qu'il serait logique d'utiliser node.js? De cette façon, nous pouvons calculer la taille des répertoires, et même les insérer dans la base de données en une seule transaction. Nous pourrions le faire aussi bien en PHP et en Python, mais pas sûr que ce soit aussi rapide.

Merci.

+0

de Merci, je suis retourné et des réponses marquées. – Justin

+0

Aucune des réponses n'est marquée comme acceptée. – JigarGandhi

Répondre

4

Pour quelle raison avez-vous besoin de cette information? Si c'est seulement pour rappeler aux utilisateurs que leurs répertoires personnels sont trop gros, vous devez ajouter quota limites au système de fichiers. Vous pouvez définir le quota à 1000 Go si vous voulez juste les numéros sans vraiment limiter l'utilisation du disque.

Les chiffres sont généralement précis chaque fois que vous accédez à quelque chose sur le disque. Le seul inconvénient est qu'ils vous disent quelle est la taille des fichiers qui sont appartenant par un utilisateur particulier, au lieu de la taille des fichiers ci-dessous son répertoire personnel sont. Mais peut-être que tu peux vivre avec ça.

+0

Nous en avons besoin pour la facturation. Nous facturons l'utilisation du disque. De plus, nous voulons que les utilisateurs puissent voir l'espace disque qu'ils utilisent dans leur panneau de contrôle, en temps réel, autant que possible. – Justin

+2

Dans ce cas, je m'appuierais sur les chiffres donnés par le système de quota de disque. Et si vous ne leur faites pas confiance, vous pouvez toujours calculer l'utilisation réelle du disque une fois par jour pour voir si les deux nombres diffèrent.Mais sachez que des choses telles que des liens durs peuvent rendre difficile le calcul précis de l'utilisation du disque. Le système de quota de disque intégré prend déjà soin de tout cela. –

4

Je pense que ce que vous recherchez est:

du -cm --max-depth=1 /users | awk '{user = substr($2,7,300); 
>         ans = user ": " $1; 
>         print ans}' 

Les nombres magiques 7 enlève la sous-chaîne/utilisateurs/et 300 est juste un grand nombre arbitraire (awk n'est pas une de mes meilleures langues = D, mais je devine que cette partie ne va pas être écrite dans awk de toute façon.) C'est plus rapide puisque vous n'impliquez pas de greping pour le total et la boucle est contenue dans du. Je parie que cela peut être fait plus rapidement, mais cela devrait être assez rapide.

5

Pourquoi ne pas simplement:

du -sm /users/* 

(La partie la plus lente est encore susceptible d'être du traversant le système de fichiers pour calculer la taille, cependant).

1

pas lent, mais vous montrer la taille des dossiers: du s/*> total.size.files.txt

Questions connexes