2017-04-03 1 views
3

Je trouve souvent mes réponses sur ce site sans, mais à cette occasion j'ai besoin d'une assistance plus personnalisée. J'espère que quelqu'un peut me diriger dans la bonne direction.File Age Reporting

J'ai essayé de dessiner un rapport sur mon système NAS pour obtenir des statistiques sur l'âge des données et la taille des données afin que je puisse essayer de fournir une solution Charge Back/Show back.

J'ai réussi à le faire avec la plupart du temps en utilisant Powershell get-childitem et je l'ai même essayer de puiser dans .net en utilisant [System.IO.Directory] :: EnumerateDirectories, et d'autres commandes. Toutes ces solutions fonctionnent, mais je semble obtenir des temps très lents à obtenir cette information, surtout si je compare cela à Jam TreeSize qui pêche cette information assez rapidement. J'ai même essayé le multi-threading en PowerShell, en pensant que si je pouvais collecter les données à partir de divers points, il collecterait toutes les données plus rapidement, mais j'ai largement mélangé les résultats. J'espère que quelqu'un d'autre a abordé ce genre de projet avant et a réussi à obtenir une bonne manière rapide de le faire. Je suis même ouvert à d'autres langues abordant cela.

Notes rapides, je le fais dans powershell v5. J'ai également commencé à apprendre un peu de python, donc si quelqu'un a des suggestions, ce serait un bon endroit pour moi d'apprendre.

Edit:

OK Voici quelques exemples. fois: Treesize prend 10 secondes Powershell Get-ChildItem prend environ 2 minutes Powershell actions dotnet prend environ 2 minutes

Nombre d'objets compté 60 000 objets, la taille 120Go. Get-childitem avec recurse vous obtiendra tous les objets fichiers dans un emplacement spécifié, y compris leurs attributs, tels que le dernier temps et la taille en octets dotnet vous devez utiliser une combinaison de EnumerateFiles etc, puis en boucle avec FileInfo qui est obtenir les objets du fichier à l'emplacement donné et ensuite inspecter leurs attributs respectivement

En termes de multithreading je vais vous pointer vers des liens que j'ai utilisés, ce sera trop à ajouter ici, mais j'ai essayé de créer un espace d'exécution , mais j'ai également essayé manuellement deux espaces de course séparés pour comparer les résultats et ils étaient à peu près les mêmes. pourquoi je suis obsédé par les temps, alors que le répertoire de test que j'utilise ci-dessus est à seulement 2 minutes, mon NAS dans quelques volumes a des millions de fichiers. Le test que j'ai fait a duré une heure et demie, et si je devais le faire avec d'autres volumes, cela prendrait des heures. Je veux juste trouver des vitesses plus proches de Treesize

Edit: J'ai marqué solution robocopy comme la réponse, si vous avez des suggestions sur une autre langue et de la procédure s'il vous plaît ne hésitez pas à commenter et ce sera quelque chose que je se penchera sur l'avenir

+3

Pouvez-vous poster le code que vous avez utilisé, quel temps prennent-ils, quelles informations essayez-vous d'obtenir? –

+0

Alors que le sujet pourrait être intéressant, la question est trop large. – LotPings

+0

Les commentaires ne sont pas destinés à étendre les informations qui appartiennent à votre question de première main. S'il vous plaît modifier votre question afin que les lecteurs de suivi n'ont pas besoin de lire à travers tout cela. (Je n'ai pas et je n'ai pas l'intention de) – LotPings

Répondre

3

J'ai été là, et pour obtenir ce que vous voulez est ... difficile, au moins: TreeSize lit les informations directement à partir de la table MFT, tandis que Get-ChildItem agit à un niveau supérieur , déjà dans l'OS. Par conséquent, la vitesse varie beaucoup. Donc, si vous voulez accélérer votre rapport, vous devez vraiment passer sous le capot et coder quelque chose à des niveaux inférieurs.Pour moi, même si ce n'était pas la solution la plus rapide, j'ai obtenu un compromis et utilisé robocopy /l /log:c:\mylog.txt (qui ne copie pas un octet, et enregistre simplement les fichiers à mylog.txt), puis je l'ai analysé. Vous pouvez jouer avec l'option multithreading (/MT:[N], où N est 8 par défaut) pour l'accélérer. Ce que je trouve utile avec cette méthode, c'est que si j'ai besoin de plus d'investigations, j'ai toutes les données dont j'ai besoin dans un fichier et donc il sera plus rapide de l'interroger. Statique, pas mis à jour, mais quand vous parlez de millions de fichiers, une photo d'un certain moment est une bonne approche, je pense.

+0

Merci curropar, je vais donner un coup demain et voir comment je viens avec elle. Merci pour la suggestion –

+3

TreeSize utilise MFT uniquement lorsqu'il est démarré en tant qu'administrateur et uniquement lors de l'analyse d'un lecteur local complet. MFT est plus rapide en particulier sur les vieux disques durs, l'augmentation de la vitesse sur les disques SSD est négligeable. TreeSize Professional offre des options de ligne de commande que de nombreux clients utilisent, par ex. générer une statistique d'âge de fichier. Divulgation complète: Je suis l'auteur de TreeSize, faites-nous savoir si une fonctionnalité manquante est nécessaire pour vos rapports. –

+0

Merci pour la clarification, @JoachimMarder! Je travaille en tant qu'administrateur système, et je le lance normalement avec les droits d'administrateur, et contre la racine du volume, normalement pour trouver pourquoi le volume est presque plein, ce qui explique mon expérience. À propos de devenir professionnel, eh bien, ce n'est pas ma décision, malheureusement. – curropar