Tag Archives: ZFS

Flash sur la carte IBM M1015: passthrough pour un nas !

raid controler ibm m1015

Suite à l’expansion de mon serveur NAS maison, j’ai décidé de modifier ma configuration et de supprimer ma carte contrôleur RAID LSI MegaRAID SAS 8708EM2 pour une carte IBM M1015 qui supporte jusqu’à 8 disques, voir 16 disques via un expandeur.

La carte IBM M1015 est la carte parfaite pour faire du raid logiciel ou étendre le nombre de disques d’une configuration.

La carte IBM M1015 est lowcost par son prix mais pas par ses fonctionnalités. Nous allons voir comment flasher une carte IBM M1015 afin de profiter pleinement des possibilités qu’elle nous offre.

Automount de vos partitions ZFS sous Linux

Aujourd'hui j'ai voulu mettre en automount mes différents raidz afin qu'ils se montent automatiquement au démarrage de mon serveur Linux.

Pour cela, il suffit d'éditer le fichier /etc/default/zfs 

~$ cat /etc/default/zfs 
# Automatically run `zfs mount -a` at system startup if set non-empty. 
ZFS_MOUNT='yes' 
#ZFS_MOUNT='' 
 
# Automatically run `zfs unmount -a` at system shutdown if set non-empty. 
ZFS_UNMOUNT='yes' 
#ZFS_UMOUNT=''

Améliorer les performances de ZFS

L'ensemble de mes données sensibles sont stockées sur un système ZFS dans plusieurs zpool (qui est l'équivalent d'un RAID5).

Après plusieurs semaines d'utilisation je me suis aperçu que les vitesses d'écriture et de lecture n'étaient vraiment pas rapide.

J'ai donc effectué des recherches afin de trouver des astuces pour améliorer les performances de mon système ZFS.

Utiliser un processeur 64 Bits et de la mémoire

Une des particularités de ZFS est de consommer pas mal de mémoire car il bufferise pas mal.

Dans mon cas, j'utilise 1Go de mémoire par téraoctet d'espace disque utile. Ainsi si votre zpool fait 8To, je vous conseille d'utiliser 8Go de ram.

J'ai également lu qu'un processeur 64 Bits était préférable pour utiliser ZFS. Personnellement je n'ai pas pu testé ZFS sous un système 32 Bits mais il est fort probable que l'utilisation d'un système d'exploitation 64 Bits a un impact direct sur l'utilisation de la mémoire.

Utiliser des disques durs similaires

Souvent il n'est pas conseillé d'utiliser les mêmes références de disques durs au sein d'un raid car si un disque vient à défaillir on peut supposer que les disques identiques auront le même problème.

Toutefois pour ZFS, il est conseillé d'utiliser des disques durs de même capacité, de même vitesse et ayant la même mémoire tampon (buffer) et le même nombre de secteurs.

Activer la compression

ZFS peut compresser les données afin de gagner en espace disque. Cette fonctionnalité est coûteuse en processeur et en mémoire.

Je vous conseille donc de ne compresser que les zpool qui contiennent des données à fort taux de compression.
Par exemple, il est intéressant d'activer la compression pour la sauvegarde de fichiers bureautique (fichiers texte, word, excel, …) mais il n'est pas intéressant d'activer la compression pour des données de média (mp3, avi, divx, …).

Désactiver les fonctions inutiles

Par défault, ZFS active toute sorte de fonctionnalités qui ne vous seront pas forcément utiles.

Pour récupérer la liste de fonctionnalités activées par ZFS, il faut utiliser la commande suivante:

zfs get all

Vous pourrez alors modifier les options en utilisant la commande "set". Voici un exemple qui désactive le contrôle du checksum pour le zpool nom_du_zpool:

zfs set checksum=off nom_du_zpool

Mettre à jour votre version de ZFS

ZFS est constamment en cours de développement. De nouvelles fonctionnalités et de nombreux correctifs sont apportés régulièrement.

Je vous recommande donc de garder votre version de ZFS à jour en utilisant les commandes:

zfs upgrade nom_du_zpool
zpool upgrade nom_du_zpool

ZFS et SSD Caching

Le SSD Caching permet d'utiliser la rapidité d'un SSD pour stocker certaines logs et mettre en cache les données.

Ainsi pour améliorer les performances en lecture, il faut utiliser la commande:

zpool add 'nom_du_zpool' cache 'nom_du_device_ssd'

Pour améliorer les performances en écriture, il faut utiliser la commande:

zpool add 'nom_du_zpool' log 'nom_du_device_ssd'

Veillez noter qu'il est strictement impossible à l'heure actuelle de retirer un disque ssd utilisé pour améliorer les performances en écriture. Il est donc préférable d'utiliser le SSD en tant que disque mirroir:

zpool add 'nom_du_zpool' log mirror /dev/log_ssd

Augmenter le nombre de disques

ZFS est beaucoup plus rapide si vous utilisez 2 disques de 2To qu'un seul disque de 4To.

En effet, ZFS utilise ainsi les performances propres à chaque disque afin d'augmenter les vitesses en lecture et écriture.

Je vous conseille donc d'utiliser le maximum de disques possible.

Désactiver la déduplication

La déduplication est une technologie qui permet de ne stocker physiquement qu'une seule fois un fichier même s'il est présent plusieurs fois (logiquement).

La déduplication stocke des index en mémoire afin de savoir si le fichier existe ou pas. Dans la documentation ZFS, il est précisé que si la déduplication est activée, il faudra avoir au minimum 2Go de mémoire pour 1To de données.

La plupart du temps, la déduplication ZFS n'est pas intéressante et pas nécessaire. Je vous conseille donc de la désactiver via la commande:

zfs set dedup=off nom_du_zpool

Conclusion

Les améliorations énoncées ci-dessus dépendent de votre configuration matérielle, de vos besoins et de la nature de vos données. ZFS est performant à condition qu'il soit bien configuré.

N'hésitez pas à poster des commentaires si vous avez d'autres astuces.

Renommer un zraid sous Linux

J'utilise ZFS comme système de fichiers pour sauvegarder mes données. Ce système semble être relativement intéressant car il est performant, peu consommateur en ressources et totalement libre.

Au cours de mes tests et essais divers j'ai été amené à renommer mon pool zraid. Voici donc un petit tutoriel pour renommer un zraid.

Tout d'abord voila un récapitulatif de mon zpool qui se nomme dataz:

$ zpool status -v
pool: dataz
state: ONLINE
scan: scrub repaired 0 in 1h6m with 0 errors on Sat Mar 24 01:03:16 2012
config:

	NAME        STATE     READ WRITE CKSUM
	dataz       ONLINE       0     0     0
	  raidz1-0  ONLINE       0     0     0
		sdb     ONLINE       0     0     0
		sdc     ONLINE       0     0     0
		sdd     ONLINE       0     0     0
		sde     ONLINE       0     0     0
		sdf     ONLINE       0     0     0

errors: No known data errors

La première chose à faire est d'exporter le zpool:

zpool export dataz

Ensuite il faut réimporter le zpool en lui donnant le nouveau nom souhaité:

zpool import dataz newdataz

J'ai décidé de renommer mon zpool en "newdataz". Une fois la commande exécutée, vous zpool est opérationnel et se nomme bien newdataz :

$ zpool status -v
pool: newdataz
state: ONLINE
scan: scrub repaired 0 in 1h6m with 0 errors on Sat Mar 24 01:03:16 2012
config:

	NAME        STATE     READ WRITE CKSUM
	newdataz       ONLINE       0     0     0
	  raidz1-0  ONLINE       0     0     0
		sdb     ONLINE       0     0     0
		sdc     ONLINE       0     0     0
		sdd     ONLINE       0     0     0
		sde     ONLINE       0     0     0
		sdf     ONLINE       0     0     0

errors: No known data errors

Enjoy 🙂

Installer ZFS sur Ubuntu

Après mon puisant échec d'utilisation de RAID5 sur Ubuntu, j'ai décidé de repartir sur un système plus souple et performant appelé ZFS (Z File System).

Développé par Sun, ZFS est Open Source et un portage est disponible sur Ubuntu. Ce système a été développé pour pouvoir utiliser des capacités de stockage relativement importantes. Il n'est pas rare de voir des sociétés utiliser ZFS pour des systèmes de plusieurs Pétabytes.

Mais ZFS a également séduit le grand public car il permet de réaliser des snapshots à la volée, et surtout car il est robuste et performant. 

De nombreux systèmes utilisent ce système de fichier. On pourra ainsi citer FreeNas qui est basé sur FreeBsd et ZFS.

Juste pour information, il faut savoir que ZFS utilise des zpools qui contiennent des zraid (equivalent de raid5) ou des zraid2 (équivalent de raid6). Chaque conteneur (zpool) peut avoir plusieurs grappes de disques (zraid). Pour plus d'informations théoriques, rendez vous sur wikipédia :).

Le gros avantages est que les différents calculs de checksum et parité se font sur les grappes (raidz) et non sur l'intégralité du zpool. 

Par exemple, si vous avez un zpool qui contient 4 zraids et qu'un des zraids vient à défaillir, alors le rebuild ne portera que sur ce zraid et pas sur tout le zpool.

ATTENTION: si vous perdez un raidz, alors tout votre zpool sera perdu.

Veuillez noter que tous mes tests ont été faits sur Oneiric.

Installation de ZFS sur Ubuntu

Pour installer ZFS sur Ubuntu, il faut installer les packets suivant:

aptitude install build-essential gawk alien fakeroot linux-header-$(uname –r) install zlib1g-dev uuid-dev libblkid-dev libselinux1-dev python-software-properties

Ensuite il faut ajouter dépôt ppa pour pouvoir installer zfs en mode natif (il existe zfsonlinux et zfs-fuse):

add-apt-repository ppa :zfs-native/stable
aptitude update
aptitude install ubuntu-zfs

Vous n'avez plus qu'à rebooter votre Ubuntu et ZFS est installé 🙂

Préparation des disques durs pour ZFS

Dans notre exemple, nous allons créer un zpool contenant un raidz de 5 disques de 2To.

La première chose à faire est de formatter et préparer les disques pour ZFS. Les commandes suivantes sont à exécuter pour chaque disque (sdb, sdc, sdb, sde et sdf):

parted /dev/sdb   
mklabel gpt

Création du zpool et du zraid

Pour créer le zpool et le zraid c'est super facile. Il suffit de taper la commande suivante:

zpool create -o ashift=12 dataz raidz /dev/sd[bcdef]

ATTENTION: il faut mieux utiliser les id de disques:

ls -l /dev/disk/by-id
zpool create -o ashift=12 zfilms raidz /dev/disk/by-id/scsi-SATA_ST2000DL003-9VT5YD6Y15B /dev/disk/by-id/scsi-SATA_ST2000DL003-9VT5YD718LS /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0KV78 /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0KX6L /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0LE5T

Vous noterez que mon zpool s'appellera "dataz" et qu'il contiendra un raidz de 5 disques. 

L'argument "-o ashift=12" permet de forcer un alignement des partitions sur 4k, ce qui est nécessaire pour certains disques durs (les WD 2to green par exemple).

Par defaut ZFS crée un point de montage du même nom que le zpool. En faisant un "df -H" vous devrez voir votre nouveau point de montage (dataz dans mon exemple)

root@jhdserver:/home/jhd/Downloads# df -H
Filesystem             Size   Used  Avail Use% Mounted on
/dev/sda1              489G    19G   446G   4% /
udev                   2.0G   4.1k   2.0G   1% /dev
tmpfs                  778M   1.6M   777M   1% /run
none                   5.3M   4.1k   5.3M   1% /run/lock
none                   2.0G   103k   2.0G   1% /run/shm
dataz                  7.9T   608G   7.3T   8% /dataz

Quelques commandes utiles

Pour surveiller votre zpool, il existe plusieurs commandes pratiques:

  • zfs list : liste les pools 
  • zpool status -v : donne l’état de chacun des pools. Cette commande détaille les erreurs lorsqu’il y en a. 
  • zpool iostat -v dataz 15: affichage des statistiques d’entrées/sorties des pools tout en  indiquant la répartition des données et de ces entrées/sorties sur  chacun des fichiers ou périphériques constituant le pool. 
  • zpool scrub dataz : sert a verifier les checksums des données et à corriger les erreurs sur l'array. Je vous conseille de lancer cette commande une fois par mois.

Astuce

ZFS utilise principalement de la mémoire. Si votre machine ne dispose pas d'une grande quantité de RAM, il peut être intéressant de limiter son utilisation via la commande suivante:

set zfs:zfs_arc_max:536870912

Cette commande va alors limiter l'utilisation de la mémoire par ZFS à 512Mo