21 déc 2009
freebsd : découverte de ZFS
Ce tutoriel explique comment ajouter un système de fichiers ZFS sous FreeBSD 8.0. Pour ce faire, deux disques SATA de 500Go vont être ajoutés pour fonctionner en mirroring (RAID 1).
Les manipulations suivantes ont été l’occasion pour moi de découvrir ZFS et je dois avouer que la simplicité de mise en œuvre est étonnante. Une seule ligne de commandes pour créer un volume RAID 1 exploitable. On est loin des longues suites de commandes sous GNU/Linux pour avoir un équivalent – par équivalent, j’entends ce que j’avais sous Fedora, du LVM2 formaté en ext3 sur un RAID 1 logiciel (mdadm).
Principes généraux
L’architecture de ZFS repose sur 3 niveaux : un ou des système(s) de fichiers sont contenus dans un pool qui lui-même est fait de device(s). Et ceci s’administre avec seulement deux commandes : zpool et zfs.
Mise en œuvre
Deux disques de 500Go sont donc ajoutés à la machine. Un dmesg montre qu’ils sont reconnus comme ad4 et ad6 :
# dmesg ad4: 476940MB <WDC WD5000AAKS-65A7B0 01.03B01> at ata2-master SATA150 ad6: 476940MB <Seagate ST3500830AS 3.AFD> at ata3-master SATA150
On peut donc créer le pool ZFS – que je nommerai dataraid – comme ceci :
# zpool create dataraid raidz ad4 ad6
Et voilà. C’est fini :> Sérieusement, on peut s’arrêter là, le volume /dataraid monté à la racine est disponible et parfaitement exploitable. Voyons un peu son état avec l’option list de zpool qui permet de lister les pools :
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT dataraid 931G 159K 931G 0% ONLINE -
C’est plutôt lisible. dataraid d’une taille de 931Go (capacité totale des devices et non pas capacité utile), utilisé pour 159Ko (il est encore vide), il reste donc 931Go et le pool est en ligne.
Un df confirme qu’il est monté :
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 496M 174M 282M 38% / /dev/ad0s1e 496M 16K 456M 0% /tmp /dev/ad0s1f 71G 7.4G 57G 11% /usr /dev/ad0s1d 1.4G 204M 1.1G 15% /var dataraid 458G 0B 458G 0% /dataraid
Pour plus d’informations :
# zpool status dataraid pool: dataraid state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM dataraid ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad4 ONLINE 0 0 0 ad6 ONLINE 0 0 0 errors: No known data errors
Encore des informations bien utiles. Le nom du pool, son statut en ligne. scrub indique la dernière vérification de l’état du pool qui se fait à chaque écriture/modification. Et on voit la hiérarchie de notre pile ZFS, le pool dataraid, en RAID constitué de 2 disques physiques. La dernière ligne renvoie les erreurs s’il y a lieu.
Essayons de passer ce pool en mode dégradé en débranchant un disque SATA à chaud tant qu’il n’y a pas trop de données dessus. Le système chez moi ne bronche pas. Normal. Lorsque c’est fait, on revoit le statut du pool :
# zpool status dataraid pool: dataraid state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: http://www.sun.com/msg/ZFS-8000-4J scrub: scrub in progress for 0h0m, 29.73% done, 0h0m to go config: NAME STATE READ WRITE CKSUM dataraid DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 ad4 ONLINE 0 0 0 ad6 UNAVAIL 3 212 0 experienced I/O failures errors: No known data errors
Le statut est passé en mode dégradé, il nous indique qu’un disque est manquant (I/O failures). J’arrête la machine, je remets le disque :
$ sudo zpool status pool: dataraid state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM dataraid ONLINE 0 0 0 raidz1 ONLINE 0 0 0 ad4 ONLINE 0 0 0 ad6 ONLINE 0 0 0 errors: No known data errors
C’est reparti.
Le pool est en place, il faut maintenant le remplir avec un ou des systèmes de fichiers. Ceci s’opère avec la simple commande zfs. Dans l’exemple suivant, un système de fichiers zfsdata sera ajouté dans notre pool, on vérifiera sa disponibilité par un df :
# zfs create dataraid/zfsdata # df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 496M 174M 282M 38% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1e 496M 16K 456M 0% /tmp /dev/ad0s1f 71G 7.4G 57G 11% /usr /dev/ad0s1d 1.4G 204M 1.1G 15% /var dataraid 458G 128K 458G 0% /dataraid devfs 1.0K 1.0K 0B 100% /var/named/dev dataraid/backup 458G 128K 458G 0% /dataraid/backup dataraid/zfsdata 458G 128K 458G 0% /dataraid/zfsdata
Voilà, par ce simple zfs create on a un système de fichiers exploitable. Celui-ci pourrait être supprimé avec zfs destroy dataraid/zfsdata. Cette commande zfs permet beaucoup plus, notament d’avoir des informations – très – détaillées sur le système de fichiers, grâce à zfs get all :
# zfs get all dataraid/zfsdata NAME PROPERTY VALUE SOURCE dataraid/zfsdata type filesystem - dataraid/zfsdata creation Wed Dec 9 19:48 2009 - dataraid/zfsdata used 18K - dataraid/zfsdata available 458G - dataraid/zfsdata referenced 18K - dataraid/zfsdata compressratio 1.00x - dataraid/zfsdata mounted yes - dataraid/zfsdata quota none default dataraid/zfsdata reservation none default dataraid/zfsdata recordsize 128K default dataraid/zfsdata mountpoint /dataraid/zfsdata default dataraid/zfsdata sharenfs off default dataraid/zfsdata checksum on default dataraid/zfsdata compression off default dataraid/zfsdata atime on default dataraid/zfsdata devices on default dataraid/zfsdata exec on default dataraid/zfsdata setuid on default dataraid/zfsdata readonly off default dataraid/zfsdata jailed off default dataraid/zfsdata snapdir hidden default dataraid/zfsdata aclmode groupmask default dataraid/zfsdata aclinherit restricted default dataraid/zfsdata canmount on default dataraid/zfsdata shareiscsi off default dataraid/zfsdata xattr off temporary dataraid/zfsdata copies 1 default dataraid/zfsdata version 3 - dataraid/zfsdata utf8only off - dataraid/zfsdata normalization none - dataraid/zfsdata casesensitivity sensitive - dataraid/zfsdata vscan off default dataraid/zfsdata nbmand off default dataraid/zfsdata sharesmb off default dataraid/zfsdata refquota none default dataraid/zfsdata refreservation none default dataraid/zfsdata primarycache all default dataraid/zfsdata secondarycache all default dataraid/zfsdata usedbysnapshots 0 - dataraid/zfsdata usedbydataset 18K - dataraid/zfsdata usedbychildren 0 - dataraid/zfsdata usedbyrefreservation 0 -
Le détail de toutes ces informations peut être consulté à cette adresse chez Sun. A noter que les propriétés avec un tiret dans la colonne SOURCE, indiquent que celles-ci sont en lecture uniquement, alors que les autres peuvent être modifiées. Il y a trois types de SOURCE :
- default – la valeur ZFS par défaut
- local – la propriété a été modifiée localement pour ce système de fichiers
- inherited – la propriété est héritée d’un système de fichiers parent
Conclusion
Voilà une introduction à ZFS qui permet tout de même de commencer à le découvrir et l’exploiter rapidement. Une documentation complète peut être consultée ou téléchargée sur le site de Sun.
Sources :
Derniers Commentaires