web-dev-qa-db-fra.com

Comment accélérer rsync / tar de grands Maildir?

J'ai un très gros Maildir que je copie sur une nouvelle machine (plus de 100BASE-T) avec rsync. La progression est lente. TRÈS LENT. Comme 1 Mo/s lent. Je pense que c’est parce que beaucoup de petits fichiers sont lus dans un ordre qui est essentiellement aléatoire par rapport à l’emplacement où les blocs sont stockés sur le disque, ce qui provoque une tempête de recherche massive. J'obtiens des résultats similaires en essayant de tarer le répertoire. Existe-t-il un moyen de faire en sorte que rsync/tar soit lu dans l'ordre des blocs de disque ou de résoudre ce problème?

Edit: j’ai essayé tar cf/dev/zero Maildir/et sur l’ancien système, cela prenait 30 minutes! Sur le nouveau système, une fois le rsync terminé, le même test a pris 18 minutes. Le vidage du même répertoire sur l'ancien système a pris 8 minutes et sur le nouveau système, les vidages -0f/dev/zero -b 1024/home/psusi/Maildir/se sont terminés en 30 secondes seulement.

7
psusi

J'ai fini par écrire un petit script python pour calculer la corrélation entre les noms de répertoires et les inodes, les inodes et les blocs de données et les noms de répertoires en blocs de données. Il s'avère que ext4 a tendance à avoir une corrélation plutôt faible entre l'ordre dans lequel les noms de fichiers apparaissent dans le répertoire et leur emplacement sur le disque. Après en avoir discuté sur la liste de diffusion ext4, il s’avère que c’est le résultat des index de répertoire hachés utilisés pour accélérer les recherches dans les grands répertoires. Les noms sont stockés dans un ordre de hachage, ce qui brouille leur ordre par rapport à autre chose.

Il me semble, à au moins un autre commentateur, qu’il s’agit là d’une lacune à régler. Ted Ts'o (le mainteneur du poste) estime qu'il serait trop difficile de le faire dans le fs et que les bons outils (comme rsync et tar) devraient avoir la possibilité de trier le répertoire par numéro d'inode avant de lire les fichiers.

Il semble donc que les demandes d’amélioration des fonctionnalités doivent être archivées pour rsync et tar.

7
psusi

Quelques points à considérer:

  • De combien de fichiers parle-t-on? find /path/to/your/maildir/ | wc -l devrait vous donner une indication approximative. Des centaines de milliers devraient aller bien. Des centaines de millions de personnes pourraient vous suggérer d'élaguer, d'archiver et de nettoyer en général.

  • Le disque est-il lent? Il existe de nombreux tests disponibles, du bonnie++ complet au benchmark rapide et simple de l'Utilitaire de disque. Exécuter un et voir si vous souffrez.

    • Cela peut poser des problèmes matériels - remplacer plus rapidement
    • Problèmes liés au système de fichiers - utilisez-vous quelque chose que l’on sait très lent à des IOPS à lecture aléatoire élevée?

Mais finalement, tarring, puis le transfert devrait vous donne le meilleur débit global au coût d’être nécessaire pour configurer le transfert une fois que vous avez généré le fichier tar.

2
Oli

Essayez de désactiver le suivi atime ou d’utiliser un temps relatif sur la nouvelle partition de disque. Cela limitera les frais généraux. Le passage d'un système de fichiers non journalisé tel qu'ext2 à un système de fichiers journalisé tel qu'ext3 ou ext4 générera des succès

Lorsque j'ai déplacé Maildirs, j'ai effectué une rsync préparatoire afin que tous les répertoires soient en place à l'avance. Ensuite, il n'y avait que des mises à jour à faire.

Lorsque vous êtes prêt à faire le vrai mouvement, vous pouvez vous assurer que les répertoires sont stables.

  • placez le démon SMTP en mode file d'attente uniquement,
  • désactiver les files d'attente lancées par le démon SMTP, et
  • désactiver l'accès par l'utilisateur.

Réactiver après le déplacement du fichier.

EDIT: Je pense que vous avez identifié le problème. Tar et rsync parcourent les répertoires. En raison de changements de fichiers normaux dans Maildir, les fichiers de chaque répertoire finiront par être éparpillés sur le disque. Un outil tel que dump lirait la partition dans l’ordre des blocs, mais reproduirait le problème sur la nouvelle partition. Un deuxième rsync devrait courir beaucoup plus vite que le second.

1
BillThor