web-dev-qa-db-fra.com

Déplacer un système de fichiers ZFS d'une piscine à une autre

J'extruit un serveur Solaris 10 U8 avec un pool de stockage supplémentaire en plus de la racine ROCOOL.

Quel est le moyen le plus efficace/simple/fiable de déplacer un ou plusieurs systèmes de fichiers ZFS de RPOOL à ce nouveau pool de stockage?

Peut-il être fait en ligne ou devrais-je fermer les services en utilisant d'abord ces pools?

18
Asgeir S. Nilsen

La question sur les services invalidants dépend essentiellement des services eux-mêmes:

  • Est-ce qu'ils écrivent activement au système de fichiers que vous envisagez de vous déplacer?
  • Sont-ils stockés des données persistantes que vous voulez garder.

Dans tous les cas, l'envoi d'un système de fichiers ZFS peut prendre beaucoup de temps. Il est possible de minimiser l'indisponibilité des services en les gardant en ligne la plupart du temps de cette façon:

  • créer un instantané
  • envoyez cet instantané comme indiqué précédemment, mais en gardant tous les services actifs
  • lorsque la FS est reçue sur l'autre pool, désactivez les limites des services critiques sur ce système de fichiers. Assurez-vous que le nouveau système de fichiers sur le pool de destination n'est pas modifié car les modifications seront supprimées ultérieurement de toute façon.
  • créer un deuxième instantané (E.G. Snapshot2)
  • envoyez ce second instantané de manière incrémentielle, ce qui sera beaucoup plus rapide que le transfert précédent. par exemple.:

    zFS Envoyer -i RPOOL/FileSystem @ Snapshot RPOOL/FileSystem @ Snapshot2 | ZFS RECEVOIR -F DestinationPool/Système de fichiers

  • une fois terminé, déplacez le point de montage du système de fichiers de l'ancien jeu de données vers le nouveau. par exemple.:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    

    zFS Set MountPoint =/Application/Directory Destination/Système de fichiers

Vous devez vous assurer qu'aucun processus n'est lié à /application/filesystem (E.G.: Accéder aux fichiers ou l'avoir comme répertoire actuel) pour atteindre cela.

  • réactivez le (s) service (s) et vous avez terminé.
15
jlliagre

Je répète une grande partie de ce que Jlliagre a dit, mais avec des ajouts pour les systèmes de fichiers descendants. (Surtout donc j'ai une référence quand j'oublie.)

Si vous avez des systèmes de fichiers sous-fichiers, vous voudrez utiliser le -r Drapeau sur la commande ZFS Snapshot, et le -r ou -R Drapeau sur le zfs send commande. La majuscule -R Déplace tout Propriétés, instantanés et clones.

Pour déplacer une piscine entière:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool

ensuite, pour synchroniser les modifications pour une période de migration plus courte, arrêtez Samba, NFS

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool

Si vous créez plusieurs instantanés intermédiaires pour la migration, lisez la page Homme de la zfs send -I changer.

10
Dan Buhler

Vous trouverez également des avantages dans l'utilisation d'un outil comme "Mbuffer" dans le pipeline; Apparemment, les performances d'envoi/RECV ZFS améliorent considérablement si les deux extrémités peuvent principalement diffuser des données de manière continue et sans mbuffer (ou quelque chose de similaire), vous obtenez un effet de ping-pong où l'on bloque continuellement de l'autre.

4
Adam Thompson