Nous utilisons rsnapshot pour les sauvegardes. Il conserve de nombreux instantanés du fichier sauvegardé, mais il supprime les anciens. C'est bon. Cependant, cela prend environ 7 heures pour faire une rm -rf
sur une arborescence de répertoires massive. Le système de fichiers est XFS. Je ne sais pas combien de fichiers il y a, mais cela se chiffre probablement en millions.
Y a-t-il de toute façon une accélération? Y a-t-il une commande qui fait la même chose rm -rf
et ne prend pas des heures et des heures?
find . -delete -name directory
et c'est beaucoup plus rapide querm -rf
.Réponses:
Non.
rm -rf
effectue une traversée récursive en profondeur de votre système de fichiers, en appelantunlink()
chaque fichier. Les deux opérations qui ralentissent le processus sontopendir()
/readdir()
etunlink()
.opendir()
etreaddir()
dépendent du nombre de fichiers dans le répertoire.unlink()
dépend de la taille du fichier en cours de suppression. La seule façon d'accélérer le processus consiste à réduire la taille et le nombre de fichiers (ce que je soupçonne peu probable) ou à changer le système de fichiers en un système avec de meilleures caractéristiques pour ces opérations. Je crois que XFS est bon pour unlink () sur de gros fichiers, mais pas si bien pour les grandes structures de répertoires. Vous pourriez trouver que ext3 + dirindex ou reiserfs est plus rapide. Je ne sais pas dans quelle mesure JFS se porte bien, mais je suis sûr qu'il existe de nombreuses références de performances différentes du système de fichiers.Edit: Il semble que XFS soit terrible pour supprimer des arbres , alors changez définitivement votre système de fichiers.
la source
unlink
cela ne fait rien au contenu réel mais pour effectuer ununlink
appel système, le code du système de fichiers a néanmoins plus de travail à faire si le lien supprimé est le dernier du fichier et s'il n'est pas actuellement ouvert. Cela dépend bien sûr du système de fichiers, mais il peut alors y avoir une différence très perceptible lorsque le fichier supprimé est énorme.Sinon, déplacez le répertoire de côté, recréez-le avec le même nom, les mêmes autorisations et la même propriété et redémarrez toutes les applications / services qui se soucient de ce répertoire.
Vous pouvez ensuite "nice rm" le répertoire d'origine en arrière-plan sans avoir à vous soucier d'une panne prolongée.
la source
Assurez-vous que les bonnes options de montage sont définies pour XFS.
En utilisant -ologbufs = 8, logbsize = 256k avec XFS va probablement tripler vos performances de suppression.
la source
Si vous effectuez le rm efficacement au niveau du fichier, cela prendra beaucoup de temps. C'est pourquoi les instantanés basés sur des blocs sont si bons :).
Vous pouvez essayer de diviser le rm en zones séparées et d'essayer de le faire en parallèle, mais je ne m'attendrais pas à ce qu'il apporte une amélioration. XFS est connu pour avoir des problèmes de suppression de fichiers et si c'est une grande partie de ce que vous faites, alors peut-être un système de fichiers différent serait une idée.
la source
Il est bon d'utiliser ionice pour des opérations gourmandes en E / S comme celle-ci, quel que soit le système de fichiers utilisé.
Je suggère cette commande:
Il jouera bien pour les opérations en arrière-plan sur le serveur avec une charge IO élevée.
la source
Je sais que c'est vieux, mais je pensais que je jetterais une suggestion. Vous supprimez ces fichiers séquentiellement, l'exécution d'opérations rm parallèles peut accélérer les choses.
http://savannah.nongnu.org/projects/parallel/ parallel peut généralement être utilisé à la place de xargs
donc si vous supprimez tous les fichiers dans deltedir
Cela vous laisserait des structures de répertoires vides à supprimer.
Remarque: Vous rencontrerez probablement toujours les limitations du système de fichiers comme indiqué ci-dessus.
la source
Une autre option serait-elle de séparer les données de manière à ce que vous puissiez supprimer et reconstruire le système de fichiers réel au lieu de faire le rm?
la source
Que diriez-vous de diminuer la gentillesse de la commande? Comme:
la source