Journal : Zfs sous linux
Posté par briaeros007 () le 14 janvier 2007
Le 26 décembre, Ricardo Correia annoncait sur son blog [1] la sortie d'une alpha de zfs sous fuse.
Force est de constater que c'est assez prometteur :
La compilation est aisé il suffit de :
- avoir un noyau avec le support de fuse
- récupérer les sources [2]
- installer fuse-utils, les librairies de développement de fuse, et scons.
- aller dans le répertoire des source et tapé scons puis su -c 'scons install' .
Et voila c'est fait.
Ensuite pour se servir de zfs il suffit d'aller dans le répertoire zfs-fuse (qui est dans le répertoire des sources) et de lancer
Il ne faut pas oublié de mettre fuse dans le noyau si on l'a compilé en module :
et voila on peut utiliser les commandes de zfs.
Si on ne veut pas abimer ses dd, on peut le tester sur des fichiers (15 petit disques dur pour tester ;) ):
l'avantage de zfs est de gérer les disques dur directement. Pas besoin d'avoir un lvm et ou de gérer le raid à coté.
On peut créer un pool de stockage de façon extremement simplement, y compris en se basant sur du raidz2 (comme du raid5 mais avec 2 disques de redondances, et pas le write hole du raid5 qui obligeait à utiliser de la nvram).
(il faut donner le chemin complet, sinon il cherche dans /dev je crois )
et on peut observer que tout est bien pris en compte avec un
si plus tard on veut rajouter des disques dur on peut faire
et comme on est prévoyant, on décide de mettre 5 disques en spare pour le pool de stockage :
on regarde ce qui est disponible avec un petit
on peut créer plusieurs files systems dans ce pool (il faut voir qu'il est aussi simple de faire un fs qu'un répertoire avec zfs. Ils sont un peu plus difficile a gérer en ce qui concerne le renommage (il faut passer par zfs) mais permettent d'attribuer la réservation, quota, snapshot etc... facilement)
Supposons qu'on ai deux utilisateur : miu et shigure (private joke)
donc on peut créer leurs répertoires utilisateurs :
A noter , supposons que j'avais déjà fait zfs test/users mais que je l'ai démonté (avec zfs umount ) , lorsque je crée le home de miu, zfs va me monter automatiquement users pour pouvoir créer et monter miu.
Bien entendu on peut ajouter quelques caractéristiques aux différents fs
On constate qu'il ne change pas la taille disponible. Mais si je fais:
La il prend bien en compte la reservation.
Faire un snapshot est aussi très aisé :
voila c'est fait !
récupérer d'un snapshot est aussi très simple : il suffit d'utiliser la commande rollback
Bon on vois que l'administration d'un tel système est pas franchement compliqué. Et que tout est centralisé en deux commande (plus d'options sont disponibles avec zfs help ou zpool help , ou simplement regarder la documentation [3])
Maintenant supposons que l'on ai écris quelquechose sur une partition , et qu'un problème disque survienne ... par exemple :
un premier
Mais si on essaie de lire par exemple
On peut bien entendu utiliser les spares avec un simple
Après que le resilver soit bien fait, un
ensuite (je suis même pas sur qu'on ai besoin de mettre offline si le disque est marqué unavail) on peut changer le disque dur (refaire un dd zero sur /zfs/zfs4) .
puis un
permet de remettre le disque spare dans l'ensemble de disque de spare, et de conserver zfs4. (note , j'avais des problèmes de checksum après cela, mais normalement après un changement de dd , zfs le remarque et agis en conséquence. C'est peut etre que je me suis trompé , ou alors qu'il a des problèmes avec les fichiers à la place des dd. Pour réparé ce problème un simple
Si bien entendu on souhaite conserver le spare dans le nouveau raidz2 et ne plus entendre parlé de /zfs/zfs4 on peut faire
Il enlevera /zfs/zfs11 de l'ensemble de spare pour qu'il reste tout le temps dans le raidz2 ayant des problème
enfin une fois que tout est fait un petit
Il y a un guide d'adminitration bien fait pour zfs en [3].
Ce que j'en ai pensé , bien que je n'ai pas vraiment pu testé les performance, j'ai trouvé
- ce projet est vraiment bien avancé, bien que certains bugs subsistent (on ne peut pas lancé un executable sous fuse ou quelquechose comme ca) , le code , lors de mon test, était très stable, bien plus que le code de 'pre release' de certains projets.
- le fait de pouvoir ajouté du raidz,du raidz2 , des miroir (raid1) , ou de simple disque au même pool (en gros de faire un raid0 par dessus) , et ce de facon dynamique m'a bien plus (je n'ai jamais toutefois touché au raid , donc ce n'est pas du tout pour comparer avec les solution actuelles)
- l'intuitivité des commandes : les deux commandes utilisé sont bien pensé. L'aide est facilement accessible (zpool help , zfs help. voir par exemple pour rajouter des caractéristiques : zfs set help etc... ) , et la doc sur le site de sun [3] bien faite aussi je trouve.
Bref, amha, c'est quelquechose a suivre ;)
[1] http://zfs-on-fuse.blogspot.com/
[2] http://developer.berlios.de/project/showfiles.php?group_id=6(...)
[3] http://opensolaris.org/os/community/zfs/docs/
Force est de constater que c'est assez prometteur :
La compilation est aisé il suffit de :
- avoir un noyau avec le support de fuse
- récupérer les sources [2]
- installer fuse-utils, les librairies de développement de fuse, et scons.
- aller dans le répertoire des source et tapé scons puis su -c 'scons install' .
Et voila c'est fait.
Ensuite pour se servir de zfs il suffit d'aller dans le répertoire zfs-fuse (qui est dans le répertoire des sources) et de lancer
./run.shIl ne faut pas oublié de mettre fuse dans le noyau si on l'a compilé en module :
modprobe fuseet voila on peut utiliser les commandes de zfs.
Si on ne veut pas abimer ses dd, on peut le tester sur des fichiers (15 petit disques dur pour tester ;) ):
for i in `seq 1 15`; do dd if=/dev/zero of=/zfs/zfs0 bs=1M count=128; done
l'avantage de zfs est de gérer les disques dur directement. Pas besoin d'avoir un lvm et ou de gérer le raid à coté.
On peut créer un pool de stockage de façon extremement simplement, y compris en se basant sur du raidz2 (comme du raid5 mais avec 2 disques de redondances, et pas le write hole du raid5 qui obligeait à utiliser de la nvram).
zpool create test raidz2 /zfs/zfs{1,2,3,4,5}(il faut donner le chemin complet, sinon il cherche dans /dev je crois )
et on peut observer que tout est bien pris en compte avec un
zpool list . On voit que le pool de stockage test a bien été crée. (La taille indiqué est la taille physique et ne tient pas compte de la redondance crée par le raidz2. Voir plus loin comment l'avoir ;) )si plus tard on veut rajouter des disques dur on peut faire
zpool add test raidz2 /zfs/zfs{6,7,8,9,10}et comme on est prévoyant, on décide de mettre 5 disques en spare pour le pool de stockage :
zpool add test spare /zfs/zfs{11,12,13,14,15}on regarde ce qui est disponible avec un petit
zpool statuson peut créer plusieurs files systems dans ce pool (il faut voir qu'il est aussi simple de faire un fs qu'un répertoire avec zfs. Ils sont un peu plus difficile a gérer en ce qui concerne le renommage (il faut passer par zfs) mais permettent d'attribuer la réservation, quota, snapshot etc... facilement)
Supposons qu'on ai deux utilisateur : miu et shigure (private joke)
donc on peut créer leurs répertoires utilisateurs :
zfs create test/users
zfs create test/users/miu
zfs create test/users/shigure
zfs list permet de savoir si les fs sont bien monté, leurs statut etc...A noter , supposons que j'avais déjà fait zfs test/users mais que je l'ai démonté (avec zfs umount ) , lorsque je crée le home de miu, zfs va me monter automatiquement users pour pouvoir créer et monter miu.
Bien entendu on peut ajouter quelques caractéristiques aux différents fs
zfs set compression=on test/users #active la compression
zfs set checksum=on test/users #active les sommes de controles
zfs quota=60M test/users/shigure
zfs quota=120M test/users
zfs list
On constate qu'il ne change pas la taille disponible. Mais si je fais:
zfs reservation=60M test/users/miu
zfs list
La il prend bien en compte la reservation.
Faire un snapshot est aussi très aisé :
zfs snapshot test/users/miu@snap1
voila c'est fait !
récupérer d'un snapshot est aussi très simple : il suffit d'utiliser la commande rollback
zfs rollback test/users/miu@snap1Bon on vois que l'administration d'un tel système est pas franchement compliqué. Et que tout est centralisé en deux commande (plus d'options sont disponibles avec zfs help ou zpool help , ou simplement regarder la documentation [3])
Maintenant supposons que l'on ai écris quelquechose sur une partition , et qu'un problème disque survienne ... par exemple :
shred /zfs/zfs4
un premier
zpool status ne détecte rien (pas de lecture sur le disque).Mais si on essaie de lire par exemple
find test -type f alors, bien que les données soient toujours correct , un zpool status nous informe des problèmes (et de quel type de problème ), ainsi que le mode de fonctionnement (online , dégradé, unavailable, ...).On peut bien entendu utiliser les spares avec un simple
zpool replace test /zfs/zfs4 /zfs/zfs11 . Il s'occupe de tout .Après que le resilver soit bien fait, un
zpool offline -t test/zfs/zfs4ensuite (je suis même pas sur qu'on ai besoin de mettre offline si le disque est marqué unavail) on peut changer le disque dur (refaire un dd zero sur /zfs/zfs4) .
puis un
zpool online test /zfs/zfs4
zpool detach test /zfs/zfs11
permet de remettre le disque spare dans l'ensemble de disque de spare, et de conserver zfs4. (note , j'avais des problèmes de checksum après cela, mais normalement après un changement de dd , zfs le remarque et agis en conséquence. C'est peut etre que je me suis trompé , ou alors qu'il a des problèmes avec les fichiers à la place des dd. Pour réparé ce problème un simple
zpool scrub test permet de tout resynchroniser)Si bien entendu on souhaite conserver le spare dans le nouveau raidz2 et ne plus entendre parlé de /zfs/zfs4 on peut faire
zpool detach test /zfs/zfs4Il enlevera /zfs/zfs11 de l'ensemble de spare pour qu'il reste tout le temps dans le raidz2 ayant des problème
enfin une fois que tout est fait un petit
zpool clear test permet de supprimer les erreurs .Il y a un guide d'adminitration bien fait pour zfs en [3].
Ce que j'en ai pensé , bien que je n'ai pas vraiment pu testé les performance, j'ai trouvé
- ce projet est vraiment bien avancé, bien que certains bugs subsistent (on ne peut pas lancé un executable sous fuse ou quelquechose comme ca) , le code , lors de mon test, était très stable, bien plus que le code de 'pre release' de certains projets.
- le fait de pouvoir ajouté du raidz,du raidz2 , des miroir (raid1) , ou de simple disque au même pool (en gros de faire un raid0 par dessus) , et ce de facon dynamique m'a bien plus (je n'ai jamais toutefois touché au raid , donc ce n'est pas du tout pour comparer avec les solution actuelles)
- l'intuitivité des commandes : les deux commandes utilisé sont bien pensé. L'aide est facilement accessible (zpool help , zfs help. voir par exemple pour rajouter des caractéristiques : zfs set help etc... ) , et la doc sur le site de sun [3] bien faite aussi je trouve.
Bref, amha, c'est quelquechose a suivre ;)
[1] http://zfs-on-fuse.blogspot.com/
[2] http://developer.berlios.de/project/showfiles.php?group_id=6(...)
[3] http://opensolaris.org/os/community/zfs/docs/
> Lire le journal (34 commentaires, moyenne: 3,1).
Vous avez demandé le commentaire #794281.



perf
Et niveau perf ca donne quoi ?
Parce que avec fuse on est obligé de faire des aller retour user/kernel : user (appli qui veut ecrire) -> kernel (fuse) -> user (fs fuse) -> kernel (operation sur le support physique).
[^]Re: perf
Je cite : Performance sucks right now, but should improve before 0.4.0 final, when a multi-threaded event loop and kernel caching support are working (both of these should be easy to implement, FUSE provides the kernel caching).
Traduction approximative :
Les performances sont lamentables actuellement, mais devraient s'améliorer avant la version 0.4.0 finale, quand une boucle d'évènements multi-threads et le support du cache seront fonctionnels (ils devraient être simples à implémenter, FUSE fournissant le cache)
[^]Re: perf
j'ai pas testé car j'ai pas de dd libre. J'ai testé sur des fichiers la.
Mais je pense que le commentaire au dessus de moi à raison ;)
Il y a quelques benchs de fait avec l'utilisation de fuse si ca t'intéresse:
http://www.csamuel.org/2006/12/30/zfs-on-linux-works/
http://www.csamuel.org/2007/01/01/zfs-disk-mirroring-stripin(...)
;)
Subete ga wakatta toki…watashi ga anta wo korosu.
[^]Re: perf
on parle des performances là, mais au niveau robustesse, est-ce que c'est bon ?
Je présume que zfs sur solaris, cela doit être au top, en plus que c'est sans doute parfaitement intégré.
Là c'est en dehors du noyau, est-ce que cela ne risque pas d'être moins fiable (sous entendu, parce que cela ajoute une couche d'abstraction supplémentaire) ? Est-ce qu'à terme c'est prévu d'être dans le noyau ?
Car vu ce que cela gère, c'est plutôt ultra critique et pointu comme utilisation...
You can't grep dead trees...
[^]Re: perf
au fait, je n'ai pas pensé à dire : félicitation pour ce journal très complet !
Et également une autre question, est-ce qu'à terme il serait envisageable d'utiliser zfs en système de fichiers principal, comme sous solaris ? Car si cela arrive dans bsd, linux, et macosx, cela permettrait de pouvoir travailler plus facilement sur des partitions issues d'OS différents (sur une même machine bien entendu)
You can't grep dead trees...
[^]Re: perf
au fait, je n'ai pas pensé à dire : félicitation pour ce journal très complet !
Merci beaucoup :)
est-ce qu'à terme il serait envisageable d'utiliser zfs en système de fichiers principal, comme sous solaris ?
Actuellement zfs n'est pas utilisable en tant que fs principal , en tout cas pour le boot, car grub ne peut pas encore lire de partition zfs.
En plus tant qu'il sera en fuse , je ne crois pas qu'on ne pourras l'utiliser réelement en tant que partition principale.
Mais il est sans doute possible d'avoir une partition / minimaliste qui sert juste à lancé init , le daemon zfs , et ensuite à monter la véritable partition. Enfin on y est pas encore ;)
En tout cas pour l'instant :
le portage sur bsd est en cours de meme que celui de linux ;).
Macos le portage semble etre déja fait :
http://loop.worldofapple.com/archives/2006/12/17/zfs-file-sy(...)
solaris ... ben on sait déja :D
Sans oublier que le chiffrement du fs est en cours, et une version HA devrait peut etre voir le jour (la version HA devrait permettre d'utiliser , à ce que j'en ai compris, plusieurs ordinateur sur les memes disques dur (un SAN , et plusieurs NAS raccordé au SAN pour équilibrer la charge) ).
Subete ga wakatta toki…watashi ga anta wo korosu.
[^]Re: perf
> Actuellement zfs n'est pas utilisable en tant que fs principal , en tout cas pour le boot, car grub ne peut pas encore lire de partition zfs.
J'ai entendu dire que même sous Solaris, on ne pouvait pas booter sur ZFS, et qu'il avait donc besoin d'un /boot dans un autre système de fichiers. Ce qui ne pose pas vraiment de problème, en fait : mon répertoire /boot est toujours sur une petite partition en ext2,ro, elle n'a pas besoin d'être protégée comme le reste du système, et c'est facile à restaurer en cas de problème.
« Le savoir, n'est-ce pas, est un bien précieux. Trop précieux pour ne pas être partagé. »
- Battologio d'Epanalepse, in De Cape et de Crocs, Acte VII (Ayroles & Masbou)
[^]Re: perf
je confirme, solaris ne boot pas sur zfs.
[^]Re: perf
Pour la fiabilité intrinsèque :
zfs permet de faire du checksum sur chaque stripe, cad que meme les modifications , jusqu'à présent silencieuse, peuvent être détecté.
(c'est partis du constat qu'on utilisait des mémoires ECC mais pas de fs ECC ;))
Par rapport au rajout d'une couche, je ne pense pas que ce soit intrinsèquement moins sur (mais je ne suis pas un expert non plus ;))
Quand à l'inclusion dans le noyau, je ne pense pas qu'elle arrivera de sitot, en tout cas pas tant que le code est sous CDDL et pas gplv2.
Subete ga wakatta toki…watashi ga anta wo korosu.
[^]Re: perf
> (c'est partis du constat qu'on utilisait des mémoires ECC mais pas de fs ECC ;))
Pas vraiment je crois.
Les disque durs ont depuis longtemps des codes de correction d'erreur en hardware, mais le constat de départ de ZFS, c'est plutôt que ces checksums n'étaient pas suffisants, et qu'il fallait que l'OS y mette aussi son grain de sel.
[^]Re: perf
ils ont des codes correcteurs d'erreur ... sur les données dans les disques ???
c'est la première fois que j'entend ca (mais j'ai jamais dis que je savais tout ;) )
(le fameux coup du rayon cosmique qui touche le plateau et transforme un 1 en 0 il marche plus ?
)
En tout cas dans une de leurs présentations ils font clairement le parallèle :
Subete ga wakatta toki…watashi ga anta wo korosu.
[^]Re: perf
En fait le problème est simple.
Ton disque dur est stupide...
Il peux faire trois choses :
- se planter de positionnement de la tête => corruption collatérale
- écrire n'importe comment (coupure de courant, etc) => corruption
- avoir des soucis de surface => perte de donnée (puisque le secteur sera seulement repositionné)
Dans les deux premiers cas le disque dur sera incapable de récupérer les données perdues, il faut donc que quelqu'un se charge de rattraper sa connerie...
Dans le troisième cas le disque dur y peux pas grand chose, il peux juste repositionner le secteur défectueux...
Bref, le but de ZFS est de partir du principe que la corruption arrivera pas forcément en même temps, et qu'avec un pool de disque dur tu limite les risque
(bien que tu sois soumis au paradoxe des anniversaires et que les chances d'avoir deux problème sont tout de même grande)
L'intérêt que je vois dans ce système serait d'agglomérer tes disque dur en raid5 de manière transparente avec tes spares et compagnie.
La seule différence par rapport a maintenant est que tu ne te prend plus la tête avec les agrandissement de système de fichiers et réduction de ces derniers vu que ZFS te rend ceci bien facile.
(genre tu est samedi matin, tu a plus de spare, une application critique a pas perdre, tu a la place d'au moins un des disque dans le système de fichier, hop tu retire le disque en question de l'espace dispo et tu le met en spare ;)
Bon l'intérêt serait que le système de fichier devienne natif, parce que bon un tel système de fichier non natif a un intérêt proche de zero
(vu que tu va toujours devoir te taper une chaîne de chargement qui ne sera pas protégée par ton raid5/ZFS ou similaire ???raidz2???)
site perso : http://rapsys.free.fr/
[^]Re: perf
> ils ont des codes correcteurs d'erreur ... sur les données dans les disques ???
Je ne suis pas absoluement sur de moi, mais il me semble bien que oui. Mais ça ne te protège que contre un nombre limité d'erreur, et en particulier pas celles dues au contrôleur.