omnomnomnomnom

Au boulot, j’ai mis en place un NAS. À force de lire les louanges de ZFS, je me suis dit que c’était l’occasion idéale d’utiliser réellement ses capacités, et plus simplement comme “le filesystem de Solaris/OpenSolaris”.

Nous sommes partis de l’hypothèse suivante :

  • Nous utiliserons les fonctions RAID de ZFS, et non pas le RAID5 natif fourni par le controlleur du serveur de disques; en effet, après moult lectures, il apparait que le mode RAID-Z de ZFS est non seulement plus flexible, plus rapide, mais également plus sur (voir par exemple ici ou ici)
  • La partition de boot/root fonctionnera, elle, en mode mirror et sera disponible sur tous les disques
  • Le reste de la place disponible formera un pool raidz. Nous aurions pu choisir raidz2, mais ce dernier nous aurait coûté de l’espace en moins.

Le serveur que nous utilisons pour ce setup comporte une carte HP de type Smart Array g6, dont le firmware ne permet pas de mode JBOD, aussi, chaque disque formera une unité logique RAID0.

Les disques ont une taille de 1To; le système occuppant moins de 10Go, nous spécifions à l’installation que nous ne souhaitons utiliser “que” 30Go pour le système, le reste sera affecté au raidz.

Une fois OpenSolaris installé sur le disque logique numero 1, nous mettons en place le mirroring sur chaque unité logique. Pour ce faire, nous allons préparer un premier disque à l’aide de la commande format puis dupliquer la table de partitions du disque 1 sur ce second disque à l’aide des commandes prtvtoc et fmthard :

Pour rappel, le slice numero 2 (s2) représente l’intégralité du disque.

Intervient à cet instant une astuce particulière relative à notre setup. J’ai dit plus haut que nous avons pris le parti de mirrorer la partition système sur tous les disques, cela signifie que sur chacun d’eux, nous devons disposer de deux slices, or, le disque numero 1, en cours d’utilisation, ne peut être manipulé de la sorte. Nous allons donc :

  • Créer un deuxième slice sur le second disque
  • Intégrer le slice 1 du second disque au pool système
  • Détacher le disque 1 du pool système
  • Effacer le slice système du disque numero 1
  • Re-formatter le disque numero 1
  • Importer la table de partition du disque 2 vers le disque 1

Notez que la valeur du cylindre de départ est égale au prochain cylindre disponible. Dans notre cas, le dernier cylindre de la partition système était 1954.

On attache le 1er slice du second disque à rpool

On attend que le mirroring soit effectué (quelques secondes), puis on détache le premier disque :

On détruit maintenant le partitionnement du disque 1

On exporte la table de partitions du disque 2 vers le disque 1

Puis on rattache le slice 1 du disque 1 à rpool :

Voila !

Nous pouvons maintenant préparer et importer la table des partitions sur les disques suivants grâce au même combo utilisé pour le disque 2 (format>fdisk, prtvtoc et fmthard). Ainsi, il est maintenant possible d’attacher l’ensemble de nos slices au pool système :

Une fois ceci effectué, il est indispensable d’installer grub sur l’ensemble des disques, de façon que notre NAS puisse booter indifféremment sur n’importe lequel.

On constate le succès de l’opération grâce à la commande zpool :

Désormais, tous nos disques disposent également d’un second slice, s3, qui sera lui affecté à un pool raidz, nous effectuons l’opération de cette façon :

Ce qui nous donne :

On peut dès lors utiliser les commandes ZFS pour créer un filesystem sur notre pool raidz :

Placer un quota :

Ou encore exporter un autre système de fichiers en NFS :

Trop dur.

Un petit df pour la route :

Merci à nico pour ses nombreux conseils.