Changer les disques d'un miroir ZFS/Changing disks of a ZFS mirror

J’héberge un mini serveur HP Proliant Gen10.

J’ai mis à la place du lecteur de CD (non-fourni) un SSD de 250Go pour le système.

J’ai opté pour FreeNAS pour animer le tout.

Je ne vous parlerais pas de FreeNAS de ces possibilités, etc.

English version below

La genèse

J’avais, à l’origine, recyclé des disques de 3To et de 2 To. J’en avais 2 de chaque taille, parfait pour faire 2 zpools.

Et puis un jour, j’ai décidé de commander deux disques de 6To chacun (de marques différentes) pour remplacer les deux disques de 3To.

Le matériel

Outre les nouveaux disques et le serveur, j’ai eu besoin d’une station d’accueil double disques. J’ai choisi ce modèle, mais d’autres vous conviendrait peut-être mieux.

La procédure

Nous allons procéder par étape simple qui peuvent prendre du temps, la patience est donc votre amie.

Ajout des disques neufs

Nous allons, grâce à la station d’accueil, ajouter nos deux disques neufs au miroir déjà existant, dans mon cas le zpool Pool.

Ces manipulations ne peuvent de faire avec l’interface web de FreeNAS, il va falloir utiliser la ligne de commande. Je vous recommande la connexion ssh, même s’il est possible d’avoir un shell dans les outils d’administration de FreeNAS.

Une fois connecté, il est important de retrouver les disques ajoutés avec la commande dmesg (ceux qui sont dans la station d’accueil). extrait de la sortie de dmesg1

Nos disques sont donc vu comme périphériques da0 et da1.

Il faut ensuite repérer le miroir auquel nous désirons ajouter ces disques. Avec la commande zpool status Pool, nous obtenons les informations nécessaires: ![la commande zpoo status pool](/assets/images/FreeNAS/zpool-status-1.png]

La série de chiffres et de lettres qui commence par gptid est imporante, elle identifie le miroir et sera utile à la prochaine étape (elle dépend de votre installation).

Avec la commande zpool attach nous allons attacher les deux nouveaux disques à notre miroir existant, créant ainsi un miroir à quatre faces.

zpool attach Pool gptip/<série-étrange> /dev/da1
zpool attach Pool gptip/<série-étrang> /dev/da2

Commence alors la phase de resilver qui copie les données des deux premiers disques sur les nouveaux :

resilver en cours

  Cette phase peut-être longue, soyez patient

Détacher les anciens disques

Une fois le resilver terminé, nous allons pouvoir, avec l’interface web de FreeNAS2.

Nous allons déclarer les deux premiers disques du miroir à quatre faces comme détaché du miroir. Aucun risque de perte de données, il nous reste les 2 nouveaux disques dans le miroir.

Cela se fait dans la rubrique stockage. En cliquant sur le petit engrenage (⚙) on accède à un menu contextuel dans lequel on choisit le dernier item status.

À droite de ligne de chaque ancien disque on clique sur les trois points verticaux (⋮) pour faire apparaître un nouveau menu contextuel. On y choisit l’option Détacher.

Retirer physiquement les disques

Une fois l’opération terminée, vous pouvez éteindre votre NAS, la station d’accueil.

Il faut ensuite remplacer les anciens disques par ceux de la station d’accueil, refermer la boite et repartir. N’ayez pas d’inquiètude, ZFS saura retrouver ces petits et remonter le miroir.

Conclusion

Cette opération est simple et facile à réaliser, elle demande juste de la méthode. Elle est plus compliquée à faire avec une station d’accueil à un seul disque, mais c’est faisable.

Les deux anciens disques étant plus important que les deux disques de mon autre miroir, j’ai réalisé la même opération pour augmenter la taille de mon autre zpool

English version

I own a HP Proliant Micro Server Gen10.

And it run FreeNAS.

I put at the not deliverd CD device, a 250GB SSD for the system and 4 disks for the data. 2×3TB and 2×2TB. Perfect to make two differents zpool.

On day I decided to change the both 3TB disks by 2 6TB disks. Here is how-to make this change.

Hardware

In addition of the server and the disks I used a double devices dock station.

The process

This process cannot by made with the FreeNAS web interface. It’s better to use a ssh connexion of the shell acces from the admin tool of the FreeNAS interface.

Attach the new disks

Once the dock station is plug-in with the two disks, we use the command dmesg to see them a have the devices names: Extract of the dmesg command3

As you can see our new disks are in da0 and da1.

Where gonna to make a 4 faces mirror.

The zpool status Pool give use information about the existing mirror: The command zpoo status Pool

The gptid/<dummy_characters> will be useful for the next step.

To add our new disks to the pool we use those commands:

zfs attach Pool gptid/<dummy_characters> /dev/da0
zfs attach Pool gptid/<dummy_characters> /dev/da1

As we can see on the next image, the resilver process start. In fact it copy the data from the 2 firsts disk of the mirroir to the 2 new disks:

resilver in progress

  This step could take a long time, be patient.

Once the reliver process is finished we can go to the next step.

Detach the old disks

We gonna use the FreeNAS we interface in order to detech the old disk form the mirror.4

On the storage part, click on the gear icon (⚙) the have a contextual menu and choose status.

At the end of each old disks of the mirror, click on the three verital dot (⋮) in order to have another contextual menu and choose Detach. There is no risk, the new disks are in the mirror.

Removing the old disk

Once the old disk are not even part of the mirror, stop the server, and swap the new disks form the dock to the place of the old disks in the server. You can safelly restart the server, ZFS will find all the piece of the mirror.

To conclude

This manipulation is easy but must be made with method. You can make it with a one device only dock station, but it will be more difficult and take more time.

I recycled the old 3TB disks and replace the 2TB disks by them, using the same method.


  1. Moi non plus je n’aime pas les images pour les résultats de ligne de commande, mais il n’y a rien à copier/coller et je n’ai pas pensé à la rédaction d’un article au moment où je faisais la manipulation. [return]
  2. Cela se fait avec l’interface web parce que FreeNAS utilise une base de données internes et qu’il serait dommange de mettre de la confusion dans cette base. [return]
  3. Like you I did not like images for commands lines output. But there is not copy/paste to do and I did not think avout this article when I made this intervention. [return]
  4. We use the FreeNAS web interface because FreeNAS use an internal database. It will be very dommageble to have a garbage database. [return]