Tag Archives: snapshot

Installer ZFS sur Ubuntu

Zfs-linux

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