GNU/Linux >> Tutoriels Linux >  >> Linux

Comment "rééquilibrer" les données dans zfs ? (Assurez-vous que les données sont réparties sur tous les miroirs rayés)

Seules les données nouvellement écrites (ajoutées) sont réparties entre tous les vdevs actuellement actifs, il n'y a pas d'opération de rééquilibrage explicite dans ZFS.

Deux solutions possibles :

  1. Attendez que toutes les anciennes données soient à nouveau écrites (à cause de CoW, cela peut prendre très longtemps, dans le pire des cas le double du temps qu'il faudrait pour écrire complètement le disque).
  2. Supprimez toutes les données et réécrivez-les (zfs send/recv est utile pour récupérer toutes les données du pool et les récupérer sans rien perdre). Il n'est pas nécessaire de tout faire en une seule fois, et cela peut être fait sur le même pool.

Pour être plus précis, je choisirais la deuxième solution et transférerais chaque système de fichiers séparément aux moments où la charge du système est faible (par exemple la nuit) :

  • Prendre un instantané (zfs snapshot -r ) d'un système de fichiers de taille décente (et des systèmes de fichiers descendants, récursivement)
  • Utilisez zfs send | zfs recv avec les options appropriées pour envoyer l'instantané à un système de fichiers temporaire nouvellement créé (peut être sur le même pool si l'espace le permet) ; ce système de fichiers doit se trouver au même emplacement dans la hiérarchie que l'ancien
  • Une fois la copie terminée (cela peut prendre un certain temps, car les disques doivent lire et écrire), zfs destroy l'ancien instantané et l'ancien système de fichiers
  • zfs rename le système temporaire à l'ancien nom
  • Vérifiez et modifiez les points de montage avec zfs mount , en réorganisant la situation précédente pour votre système de fichiers remplacé
  • Répéter jusqu'à ce que tous les systèmes de fichiers soient déplacés

3ème solution possible (comme mentionné par SirMaster dans ce post du forum FreeNAS) :

  • ajouter de nouveaux disques à zpool
  • copier de nombreux fichiers dans un autre nouveau répertoire /mnt/pool/temp/
  • supprimer les fichiers d'origine :rm -rf original/
  • renommer le répertoire :mv temp/ original/

Cela fonctionne car ZFS placera proportionnellement les écritures sur le vdev qui a le plus d'espace libre, dans ce cas les tout nouveaux disques qui étaient vides. (à partir de la version 0.7, zfs favorisera les disques plus rapides pour les écritures, mais supposons que vos 2 nouveaux disques ont des performances identiques ou supérieures à celles des disques d'origine)

C'est probablement plus lent que zfs send | zfs recv , mais plus simple car vous n'avez pas à créer/détruire des instantanés.

Vous pouvez exécuter zpool list -v avant et après pour voir chaque utilisation de vdev.

En outre, j'ai trouvé un script php qui effectue la procédure de copie/suppression/renommage fichier par fichier. Cela était lié à une réponse d'une question similaire (mais zvol) quelques années plus tôt. (n'a pas testé ce script personnellement)


Linux
  1. Comment ajouter une nouvelle ligne à la fin d'un fichier ?

  2. Comment être sûr qu'un répertoire ou un fichier est réellement supprimé ?

  3. Afficher tout le fichier jusqu'au match ?

  4. Linux - À quelle fréquence le système de fichiers Proc est-il mis à jour sous Linux ?

  5. Comment puis-je trouver toutes les extensions de fichiers distinctes dans une hiérarchie de dossiers ?

Comment rendre un fichier exécutable sous Linux

Comment faire pour que Iconv remplace le fichier d'entrée par la sortie convertie ?

Comment rendre la barre d'activités Gnome Shell petite tout le temps ?

Comment rediriger la sortie de system() vers un fichier ?

Comment ça marche ? Que fait rm ?

Comment rendre un fichier NON modifiable ?