Aperçu de ZFS sous FreeBSD 8.1
Rédigé par Xavier - - Aucun commentaire
ZFS est un système de fichiers développé à l'origine par Sun pour Solaris, et spécialisé dans le stockage de données en Datacenter.

ZFS offre de très nombreux avantages qui le font surpasser presque tous ses concurrents:
- N'utilise pas les partitions mais un système logique de pool
- Un pool peut regrouper plusieurs disques et fonctionner en RAID, sans couche logicielle supplémentaire
- Détection et correction des erreurs
- Hotspare, remplacement de disque à chaud
- Monitoring
- Possibilité de créer des "tranches" dans un pool, par exemple une pour / et une pour /usr
- Il n'y a pas de taille à spécifier pour ces tranches
- Possibilité de compression des tranches
- Attributs sur les tranches, par exemple interdiction d’exécuter des programmes
- Snapshots hautement paramétrables
Donc ZFS est le système idéal pour les redimensionnements/déplacements de données (même entre machines), la sécurisation (par redondance ou algorithmes de contrôles) et la continuité de service. Une fois son administration prise en main, on est littéralement libéré des contraintes des vieux systèmes de partitions utilisés par exemple avec NTFS ou EXT4.
Note: Bien que ZFS soit développé pour OpenSolaris/Solaris à la base, il est disponible sur FreeBSD, NetBSD, et partiellement sur Linux. Sa licence (CDDL) incompatible avec la GPLv2 fait qu'il ne sera jamais intégré dans le noyau Linux. Néanmoins il existe des portages tiers et une implémentation dans FUSE. Oracle développe btrfs spécialement pour Linux, et qui devrait offrir des fonctionnalités similaires à ZFS.
Matériel pour essai
Actuellement je dispose d'un serveur de fichiers équipé d'un unique disque dur de 1To. Pour assurer la sécurité de mes données, je me suis procuré un second disque identique et ait entrepris de monter un système de mirroir (RAID1). Ma carte mère ne gère pas le RAID et je n'ai pas vraiment envie d'acheter une carte pour ça. Donc je me suis tourné vers le RAID logiciel.
Une solution consiste à installer Debian puisque l'installeur de cette dernière permet de paramétrer un RAID logiciel. Mais étant dans une période "FreeBSD" et ayant beaucoup entendu parler de ZFS, je voulais essayer. Configuration du serveur:
- Carte mère Intel D945GSEJT équipée d'un Atom simple coeur + hyperthreading à 1,6 GHz
- Une barrette de 512MB de mémoire PC5300 (DDR2)
- Deux disques Samsung Spinpoint F3 de 1To, 7200 tr/min
- Une alim ATX branchée en fils volants
La version de FreeBSD est la dernière stable, c'est à dire la 8.1-RELEASE en version i386, puisque l'atom ne supporte pas le 64 bits.
L'installation
La procédure pour installer FreeBSD sur un système de fichiers ZFS est disponible ici. Ce qui est pénible c'est de devoir télécharger la version DVD qui pèse 2Gio, alors que le système installé au final fera moins de 200Mio. Mais il faut le DVD pour pouvoir profiter à la fois des paquetages d'installation et du mode "Livefs" qui permet d'avoir une console et tous les outils Unix pour travailler. Le wiki décrit une procédure nous faisant construire un système divisé en tranches: /var/log /var/mail etc... certaines étant compressées. Si on suit la procédure minutieusement sans se précipiter et en lisant calmement, cela doit fonctionner. Si comme moi vous survolez les instructions vous vous retrouverez avec un système qui ne boote pas.
Découverte et essais
Une fois que l'on a réussi à booter en dur, on peut s'amuser à faire quelques essais. La commande:
# zpool status
Retourne l'état de vos pool. Vous pouvez ainsi contrôler qu'il n'y a pas d'erreur et que les disques sont bien fonctionnels. Voici par exemple un status issu de la doc de Sun:
zpool status tank pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 0 0 0 cannot open errors: No known data errors
Là on voit que le fonctionnement n'est pas optimal, et en lisant on s'aperçoit que le disque "c1t1d0" est absent. J'ai moi même débranché un de mes disques (à froid) et ait pu constater que le système boote toujours, et que l'erreur est signalée.
Vitesse de transfert
Mon serveur étant utilisé pour stocker des fichiers, il devait être capable de transférer à haut débit avec mon ordinateur de bureau, sur un réseau 1000Mbps (Gigabit). Un protocole de transfert réseau léger et simple est le FTP que j'utilise pour sa rapidité. Sur FreeBSD on peut utiliser le serveur FTP de référénce (FTPd) ou installer VSFTPd via les ports ou packages.
Seulement voilà, la grosse surprise est que les débits de transfert sont vraiment très faibles, et régulièrement interrompus par des micro-coupures. Je ne dépassais pas les 12 Mo/s alors que le débit attendu pour un réseau Gigabit est de 60 Mo/s environ (limité par la vitesse d'écriture des disques). La vitesse de 12Mo/s correspond à la vitesse d'un réseau 100Mbps, je me suis donc demandé si ce n'était pas un problème de carte réseau. Malheureusement un ifconfig me confirme qu'elle est bien réglée en 1000, tout comme mon switch et sa LED verte qui indique la même chose. Ce n'est donc pas un problème de carte réseau.
Après divers essais de paramétrage du ZFS, aidé par la doc, je n'ai obtenu aucun résultat probant et ait même fini par casser mon OS... impossible de booter. J'ai réinstallé FreeBSD mais cette fois avec un seul disque et avec les options par défaut (système UFS, pas ZFS). Et là aucun problème, débit de transfert maximum. Donc mes problèmes venaient bien de ZFS.
Explication: Il semblerait que ZFS nécessite une machine relativement puissante, notamment en raison de son utilisation de la mémoire RAM comme cache. Ainsi, sur la documentation de Solaris, il est conseillé de tourner sur un système 64 bits avec au moins 1 Go de RAM. Les différentes personnes ayant rapporté faire fonctionner un NAS sous ZFS avaient au moins un processeur double cœur épaulé par plusieurs Go de mémoire.
Les problèmes de performances sont-ils dus à mon matériel trop "primitif" pour le supporter de manière correcte? Possible, mais pas 100% certain. Car il semblerait que l'implémentation de ZFS sur FreeBSD souffre d'un retrait important de performances par rapports à OpenSolaris. Des benchmark publiés sur cette page ont confronté FreeNAS (=FreeBSD), OpenSolaris et Nexenta. Je vous laisse regarder les graphiques mais la différence de rapidité au niveau des opérations par seconde peut varier d'un facteur de 10.
Conclusion
Le but de mes essais était de savoir si FreeBSD+ZFS offrait un réel avantage par rapport à UFS ou EXT sous Linux. La réponse est oui, sans conteste, une plus grande souplesse dans l'administration. Néanmoins, à la question "vais-je le garder?" la réponse est non puisqu'il y a un sérieux problème de performances.
La suite?
Essais avec OpenSolaris (même si plus supporté) et Nexenta. Si aucun ne donne satisfaction, ce sera retour sur Debian GNU/Linux avec RAID avec dmraid.