Un article paru sur Apple Insider a éveillé ma curiosité. D’après son auteur, les développeurs auraient reçu de la part de la firme de Cuppertino une preview de ZFS sur Mac OS X. De là à en déduire que ZFS, le file system de SUN pour Solaris pourrait un jour remplacer HFS+ l’actuel file system d’OSx, il n’y a qu’un pas que certaines personnes n’ont pas hésité à faire.

Alors ça tombe bien, parce que j’ai justement eu l’occasion de jouer un peu avec ZFS ces derniers jours, et c’est vrai que le bébé est impressionnant. S’il ne révolutionne pas vraiment les technologies actuelles, il apporte une facilité d’administration sans commune mesure, une excellente sécurisation (miroir, raid5 et raid6) des données et des possibilités d’extensibilité presque infinies.

Pour vous donner une idée plus précise de la puissance du truc, je vous fais partager ci-dessous quelques manips/tests très simples que j’ai réalisées:

  • Voyons tout d’abord quels sont les disques physiques disponibles:

# cd /dev/dsk
# ls c?t?d?
c0t0d0 c0t4d0 c1t0d0 c1t4d0 c4t0d0 c4t4d0 c6t0d0 c6t4d0 c7t0d0 c7t4d0
c0t1d0 c0t5d0 c1t1d0 c1t5d0 c4t1d0 c4t5d0 c6t1d0 c6t5d0 c7t1d0 c7t5d0
c0t2d0 c0t6d0 c1t2d0 c1t6d0 c4t2d0 c4t6d0 c6t2d0 c6t6d0 c7t2d0 c7t6d0
c0t3d0 c0t7d0 c1t3d0 c1t7d0 c4t3d0 c4t7d0 c6t3d0 c6t7d0 c7t3d0 c7t7d0

>> ok, nous avons de quoi faire…

  • Création d’un storage pool simple (groupe de disques physiques, ici 1 seul disque):

# zpool create mypool1 c0t0d0
# df -h /mypool1
Système de fichiers taille utilisé dispo capacité Monté sur
mypool1 457G 1K 457G 1% /mypool1
# mkfile 1g /mypool1/foo
# df -h /mypool1
Système de fichiers taille utilisé dispo capacité Monté sur
mypool1 457G 1,0G 456G 1% /mypool1

>> nous constatons ici la simplicité de mise en oeuvre: pas de point de montage à créer, pas de montage à réaliser, pas de file system à initialiser, tout est automatique dès la création du storage pool.

  • Vérifions comment tout cela se présente:

# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
mypool1 464G 1,00G 463G 0% ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool1 1,00G 456G 1,00G /mypool1

>> donc, il y a un file system ZFS qui est automatiquement associé à notre storage pool

  • Jouons avec les file systems:

# zfs create mypool1/toto
# zfs create mypool1/titi
# zfs create mypool1/tutu
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool1 1,00G 456G 1,00G /mypool1
mypool1/titi 24,5K 456G 24,5K /mypool1/titi
mypool1/toto 24,5K 456G 24,5K /mypool1/toto
mypool1/tutu 24,5K 456G 24,5K /mypool1/tutu
# zfs set mountpoint=/users mypool1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool1 1,00G 456G 1,00G /users
mypool1/titi 24,5K 456G 24,5K /users/titi
mypool1/toto 24,5K 456G 24,5K /users/toto
mypool1/tutu 24,5K 456G 24,5K /users/tutu
# zfs set quota=20G mypool1/tutu
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool1 1,00G 456G 1,00G /users
mypool1/titi 24,5K 456G 24,5K /users/titi
mypool1/toto 24,5K 456G 24,5K /users/toto
mypool1/tutu 24,5K 20,0G 24,5K /users/tutu

>> nous créons toujours aussi simplement 3 file systems qui vont se partager le volume global du storage pool
>> puis nous modifions le point de montage associé au storage pool qui se répercute automatiquement sur les file systems
>> enfin, nous limitons à 20G le file system tutu… enfantin, non ?

  • Détruisons un peu:

# zfs destroy mypool1/tutu
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool1 1,00G 456G 1,00G /users
mypool1/titi 24,5K 456G 24,5K /users/titi
mypool1/toto 24,5K 456G 24,5K /users/toto
# zpool destroy mypool1
# zpool list
aucun pool disponible
# zfs list
aucun jeu de données disponible

>> on détruie d’abord uniquement le file system tutu
>> puis l’ensemble du storage pool mypool1, on constate alors que les file systems associés sont, de fait, détruits eux aussi

  • Créons un pool « mirroré »:

# zpool create mypool2 mirror c0t0d0 c1t0d0
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
mypool2 464G 52,5K 464G 0% ONLINE -
# zpool status -v mypool2
pool : mypool2
état : ONLINE
purger : aucun requis
configuration :
NAME STATE READ WRITE CKSUM
mypool2 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t0d0 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
erreurs : aucune erreur de données connue

>> nous créons ici ce qu’on appelle un miroir two-way: tout ce qui est écrit sur un élément du miroir est dupliqué de façon synchrone sur l’autre élément. (il est aussi possible de faire du three-way, même chose mais duplication sur 2 éléments au lieu d’un seul)
>> nous constatons donc que le volume total du file system est de 464G soit la taille d’un seul disque physique puisque le deuxième sert de copie

  • Augmentons nos espaces disponibles:

# zpool add mypool2 mirror c4t0d0 c6t0d0
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
mypool2 928G 3,00G 925G 0% ONLINE -
# zpool status -v mypool2
pool : mypool2
état : ONLINE
purger : aucun requis
configuration :
NAME STATE READ WRITE CKSUM
mypool2 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t0d0 ONLINE 0 0 0
c1t0d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c4t0d0 ONLINE 0 0 0
c6t0d0 ONLINE 0 0 0
erreurs : aucune erreur de données connue

>> nous attachons ici un autre miroir au premier. les données seront donc partagées (stripée) sur les 2 premiers éléments de chacun des miroirs.
>> le volume utile a doublé passant de 460 à 920Go

  • Créons un pool RAID:

# zpool create mypool3 raidz c0t1d0 c1t1d0 c4t1d0 c6t1d0 c7t1d0
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
mypool3 2,27T 137K 2,27T 0% ONLINE -
# zpool status -v mypool3
pool : mypool3
état : ONLINE
purger : aucun requis
configuration :
NAME STATE READ WRITE CKSUM
mypool3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c4t1d0 ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
erreurs : aucune erreur de données connue
# df -h /mypool3
Système de fichiers taille utilisé dispo capacité Monté sur
mypool3 1,8T 39K 1,8T 1% /mypool3
# zpool add mypool3 spare c0t2d0
# zpool status mypool3
pool : mypool3
état : ONLINE
purger : aucun requis
configuration :
NAME STATE READ WRITE CKSUM
mypool3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c4t1d0 ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
spares
c0t2d0 AVAIL
erreurs : aucune erreur de données connue
# zpool offline mypool3 c1t1d0
Mise hors ligne du périphérique c1t1d0
# zpool status mypool3
pool : mypool3
état : DEGRADED
état : un ou plusieurs périphériques ont été mis hors ligne par l'administrateur.
Il existe un nombre suffisant de répliques pour que le pool continue à fonctionner dans un a
état endommagé.
action : mettez en ligne le périphérique en utilisant 'zpool online' ou remplacez-le avec
'zpool replace'.
purger : aucun requis
configuration :
NAME STATE READ WRITE CKSUM
mypool3 DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
c0t1d0 ONLINE 0 0 0
c1t1d0 OFFLINE 0 0 0
c4t1d0 ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
spares
c0t2d0 AVAIL
erreurs : aucune erreur de données connue
# zpool replace mypool3 c1t1d0 c0t2d0
# zpool status mypool3
pool : mypool3
état : DEGRADED
état : un ou plusieurs périphériques ont été mis hors ligne par l'administrateur.
Il existe un nombre suffisant de répliques pour que le pool continue à fonctionner dans un a
état endommagé.
action : mettez en ligne le périphérique en utilisant 'zpool online' ou remplacez-le avec
'zpool replace'.
purger : resilver completed avec des erreurs 0 sur Tue Oct 9 16:23:24 2007
configuration :
NAME STATE READ WRITE CKSUM
mypool3 DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
c0t1d0 ONLINE 0 0 0
spare DEGRADED 0 0 0
c1t1d0 OFFLINE 0 0 0
c0t2d0 ONLINE 0 0 0
c4t1d0 ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
spares
c0t2d0 INUSE currently in use
erreurs : aucune erreur de données connue

>> création d’un storage pool en RAID5 (pour faire du RAID6, il suffit de remplacer raidz par raidz2 dans la commande de création)
>> nous constatons que la volumétrie totale du storage pool est de 2,27To mais que le volume utile n’est que de 1,8To, l’un des disques étant utilisé pour la parité (2 disques en RAID6)
>> nous ajoutons un disque de spare pour augmenter la sécurité et nous testons le tout en faisant tomber un disque… (ici la manip est manuelle, mais dans le cas d’une véritable erreur, la bascule sur le HotSpare est automatique)

Voila pour donner un premier aperçu des possibilités. Reste à voir comment tout cela sera implémenté dans OSx…

#os — #  #  #

Ajouter un commentaire

Return button