Tag Archives: administrer

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

Configuration ultime pour Conky

conky

 Afin de pouvoir monitorer et superviser plus facilement mon serveur Ubuntu, j'ai décidé d'utiliser le logiciel Conky.

Celui ci permet d'afficher sur le fond d'ecran de votre bureau plusieurs informations relatives à votre pc tels que la mémoire utilisée, la capacité de vos disques, l'utilisation de votre processeur, etc…

Ce logiciel est bien conçu car il est totalement configurable, sans limite et qu'il consomme très peu de ressources systèmes.

Je vous partage donc la configuration que j'utilise.

Pour l'utiliser, il faut éditer le fichier "~/.conky"

# conky configuration

# set to yes if you want Conky to be forked in the background
background no

# X font when Xft is disabled, you can pick one with program xfontsel
#font 5x7
#font 6x10
#font 7x13
#font 8x13
#font 9x15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

# Use Xft?
use_xft yes

# Xft font when Xft is enabled
xftfont Bitstream Vera Sans Mono:size=9

# Text alpha when using Xft
xftalpha 0.8

# Update interval in seconds
update_interval 1.0

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window no

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 300 0
maximum_width 350

# Draw shades?
draw_shades yes

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders no
draw_graph_borders yes

# Stippled borders?
stippled_borders 8

# border margins
border_margin 4

# border width
border_width 1

# Default colors and also border colors
default_color white
default_shade_color black
default_outline_color white

# own window options
own_window              yes
own_window_transparent  yes
own_window_type         override
own_window_hints        undecorated,below,sticky,skip_taskbar,skip_pager

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 10
gap_y 35

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer right

# colours
color1 white
color2 orange

text_buffer_size 2048

# variable is given either in format $variable or in ${variable}. Latter
# allows characters right after the variable and must be used in network
# stuff because of an argument

# stuff after 'TEXT' will be formatted on screen

TEXT
${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}System${font}  ${hr}
Host: ${color1}$nodename${color2} Uptime: ${color1}${uptime}${color2}
OS: ${color1}$sysname $kernel${color2} on ${color1}$machine

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}CPU${font}  ${hr}
${color1}${execi 1000 cat /proc/cpuinfo | grep 'model name' | sed -e 's/model name.*: //'}
${freq}MHz   ${color2}Load: ${color1}${loadavg}   ${color2}Temp: ${color1}${acpitemp}°C
${color2}CPU Bar:  ${color1}$cpubar
${color2}Load Bar: ${color1}${cpugraph FFFFFF ffffff}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Memory${font}  ${hr}
${color2}RAM:      ${color1}$memperc% used ${membar 6}${color2}
${color2}Swap:     ${color1}$swapperc% used ${swapbar 6}${color2}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Disks${font}  ${hr}
${color2}Root:     ${color1}${fs_free_perc /} % free  ${fs_bar 6 /}
${color2}Freebox:  ${color1}${fs_free_perc /freebox} % free  ${fs_bar 6 /freebox}
${color2}Data:     ${color1}${fs_free_perc /data} % free  ${fs_bar 6 /data}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Raid Status${font}  ${hr}
${color2}MdStat:   ${execi 60 tail -n3 /proc/mdstat | fold -w46}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Networks${font}  ${hr}
${color2}Net IP:   ${color1}${execi 3600 wget -O - http://www.whatismyip.org/ | tail}
${color2}Router:   ${color1}${addr eth0}
${color2}Down:     ${color1}${downspeed eth0} k/s ${offset 53}${color2}Up:${color1}   ${upspeed eth0} k/s
${color2}TDown:    ${color1}${totaldown eth0}     ${offset 53}${color2}TUp:${color1}  ${totalup eth0}
${downspeedgraph eth0 25,145 FFFFFF ffffff} ${upspeedgraph eth0 25,145 FFFFFF ffffff}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Processing${font}  ${hr}
NAME            PID       CPU%      MEM%${color1}
${top name 1} ${top pid 1}   ${top cpu 1}    ${top mem 1}
${top name 2} ${top pid 2}   ${top cpu 2}    ${top mem 2}
${top name 3} ${top pid 3}   ${top cpu 3}    ${top mem 3}
${top name 4} ${top pid 4}   ${top cpu 4}    ${top mem 4}

${offset -5}${color2}${font StyleBats:size=12}q ${voffset -2}${font Bitstream Vera Sans Mono:style=Bold:size=11}Logs${font}  ${hr}
${color1}${execi 30 tail -n3 /var/log/messages | fold -w46}
${color2}${stippled_hr 1}

Voila le rendu sur mon serveur:

Conky Configuration

Avec les infos que j'affiche je sais ainsi en 2 temps 3 mouvements si mon processeur est utilisé à 100%, si mon RAID est opérationnel, si mes disques durs sont pleins et j'en passe.

Pour moi, Conky est juste INDISPENSABLE.