Existe-t-il un moyen de demander à ZFS de redistribuer un système de fichiers donné sur tous les disques de son zpool?
Je pense à un scénario où j'ai un volume ZFS de taille fixe qui est exporté en tant que LUN sur FC. Le zpool actuel est petit, seulement deux disques en miroir de 1 To, et le zvol est de 750 Go au total. Si je devais soudainement étendre la taille du zpool à, disons, 12 disques de 1 To, je pense que le zvol serait toujours effectivement «logé» sur les deux premières broches uniquement.
Étant donné que plus de broches = plus d'IOPS, quelle méthode pourrais-je utiliser pour «redistribuer» le zvol sur les 12 broches pour en tirer parti?
zfs send | zfs recv
Il n'y a aucune raison pour que le zvol soit stocké uniquement sur les périphériques initiaux. Si vous agrandissez le pool, ZFS couvrira les données mises à jour sur tous les périphériques sous-jacents disponibles. Il n'y a pas de partitionnement fixe avec ZFS.
la source
Ceci est une "continuation" de la réponse d'ewwhite:
J'ai écrit un script PHP ( disponible sur github ) pour automatiser cela sur mon hôte Ubuntu 14.04.
Il suffit d'installer l'outil PHP CLI avec
sudo apt-get install php5-cli
et d'exécuter le script, en passant le chemin d'accès aux données de votre pool comme premier argument. Par exemplephp main.php /path/to/my/files
Idéalement, vous devez exécuter le script deux fois sur toutes les données du pool. La première exécution équilibrera l'utilisation du lecteur, mais les fichiers individuels seront trop alloués aux lecteurs ajoutés en dernier. La deuxième exécution garantira que chaque fichier est "équitablement" distribué sur les disques. Je dis assez au lieu de même car il ne sera réparti uniformément que si vous ne mélangez pas les capacités du lecteur comme je le suis avec mon raid 10 de paires de tailles différentes (miroir 4 To + miroir 3 To + miroir 3 To).
Raisons d'utiliser un script
Comment savoir si une utilisation régulière du lecteur est atteinte?
Utilisez l'outil iostat sur une période de temps (par exemple
iostat -m 5
) et vérifiez les écritures. S'ils sont identiques, alors vous avez atteint une répartition uniforme. Ils ne sont pas parfaitement même dans la capture d'écran ci-dessous car j'utilise une paire de 4 To avec 2 paires de disques de 3 To en RAID 10, donc les deux 4 seront écrits un peu plus.Si l'utilisation de votre disque est "déséquilibrée", iostat affichera quelque chose de plus comme la capture d'écran ci-dessous où les nouveaux disques sont écrits de manière disproportionnée. Vous pouvez également dire que ce sont les nouveaux lecteurs car les lectures sont à 0 car ils ne contiennent aucune donnée.
Le script n'est pas parfait, seulement une solution de contournement, mais il fonctionne pour moi en attendant jusqu'à ce que ZFS implémente un jour une fonctionnalité de rééquilibrage comme BTRFS (doigts croisés).
la source
Eh bien, c'est un peu un hack mais étant donné que vous avez arrêté la machine en utilisant le zvol, vous pouvez zfs envoyer le système de fichiers vers un fichier local sur localhost appelé bar.zvol, puis vous recevez à nouveau le système de fichiers. Cela devrait rééquilibrer les données pour vous.
la source
la meilleure solution que j'ai trouvée était de dupliquer la moitié de vos données sur le pool étendu, puis de supprimer les données dupliquées d'origine.
la source