Economisez de l’espace disque avec OpenDedup

Je déduplique, tu dédupliques, il/elle déduplique … ça n’est pas encore dans le Petit Robert mais ça ne devrait plus tarder !

La déduplication est de plus en plus présente dans l’univers des solutions propriétaires de sauvegardes de données. Cependant une solution Open Source de déduplication montre le bout de son nez depuis quelques temps et commence à arriver à maturité : Opendedup.

Pour ceux qui auraient oublié ou qui ne connaissent pas cette technologie, je vous propose ma modeste traduction de la définition de Wikipedia :

« La déduplication des données est une forme spécifique de compression où les données redondantes sont éliminées, généralement pour améliorer l’utilisation du stockage.

Dans le processus de déduplication, les données dupliquées sont supprimées, ne laissant ainsi qu’une seule copie des données à stocker. La déduplication est capable de réduire la capacité de stockage puisque seules les données uniques sont stockées. Par exemple, un serveur de messagerie standard peut contenir 100 instances d’un même fichier joint de 1 Mo . Si cette plate-forme de messagerie est sauvegardée ou archivée, les 100 fichiers sont enregistrés, ce qui nécessite 100 Mo d’espace de stockage. Avec la déduplication des données, uniquement un seul fichier sera stocké. Chaque instance fait référence à la copie du fichier enregistré. Dans cet exemple, une demande 100 Mo de stockage pourrait être réduite à seulement 1 Mo. »

De plus, j’ajoute que pour optimiser cette déduplication, le stockage des données se fait le plus souvent au niveau des blocs de données comme le montre le schéma ci-dessous :

Les types d’applications qui fonctionnent très bien pour la déduplication

  • Les sauvegardes
  • Les machines virtuelles
  • Les partages réseau pour les données non structurées telles que des documents de bureau et PST
  • Toute demande avec une grande quantité de données dupliquées

Les types d’applications qui ne sont pas terribles pour la déduplication

  • Tout ce qui a des données uniques
  • Les photos
  • Les fichiers musicaux
  • Les films, les vidéos …
  • Les données chiffrées

La déduplication avec OpenDedup

SDFS s’appuie sur la déduplication des données pour le stockage primaire. Il agit comme un système de fichiers normal qui peut être utilisé pour des opérations IO typiquement similaires à EXT3, NTFS … La différence est que les blocs de données SDFS qui sont écrits dans le système de fichiers sont seulement ceux qui sont uniques sur le disque. Les blocs qui ne sont pas uniques font simplement référence aux données qui sont déjà sur le disque.

Les prérequis

Système

Package optionnel

  • attr – (setfattr and getfattr) pour paramétrer les attributs étendus des fichiers.

Installation (sur Debian 6)

Considérons que la distribution Debian 6 squeeze est déjà installée.

Opendedup

# wget http://opendedup.googlecode.com/files/sdfs-1.0.7.tar.gz
# tar -zxf sdfs-1.0.5.tar.gz
# mv sdfs-bin /opt/sdfs

Attr

# apt-get install attr

Fuse

# wget http://opendedup.googlecode.com/files/debian-fuse.tar.gz
# tar -zxf debian-fuse.tar.gz
# cd debian-fuse
# apt-get install  libselinux1-dev libsepol1-dev
# dpkg -i libfuse2_2.8.3-opendedup0_amd64.deb \\
# libfuse-dev_2.8.3-opendedup0_amd64.deb \\
# fuse-utils_2.8.3-opendedup0_amd64.deb

Java

# tar -zxf jdk-7-fcs-bin-b146-linux-x64-20_jun_2011.tar.gz
# mkdir /usr/lib/jvm
# mv jdk1.7.0 /usr/lib/jvm/jdk
# export JAVA_HOME=/usr/lib/jvm/jdk

Créer un système de fichiers SDFS

Pour connaître tous les paramètres possibles de la commande mkfs.sdfs : taper mkfs.sdfs –help

–volume-capacity et –volume-name sont obligatoires mais je conseille de mettre aussi –volume-maximum-full-percentage ce qui permettra de remonter une erreur quand le système de fichiers sera plein. Sinon la commande « df » affichera 100% mais l’espace de stockage continuera à augmenter. Par défaut, les données sont stockées dans /opt/sdfs/<volume name>.

# mv /opt/sdfs-bin /opt/sdfs
# cd /opt/sdfs
/opt/sdfs# ./mkfs.sdfs --volume-name=sdfs_vol1 --volume-capacity=500MB --volume-maximum-full-percentage=100
Attempting to create volume ...
Volume [sdfs_vol1] created with a capacity of [500MB]
check [/etc/sdfs/sdfs_vol1-volume-cfg.xml] for configuration details if you need to change anything

Monter le système de fichiers SDFS

/opt/sdfs# mkdir  /mnt/sdfs
/opt/sdfs# ./mount.sdfs -v sdfs_vol1 -m /mnt/sdfs
Running SDFS Version 1.0.7
reading config file = /etc/sdfs/sdfs_vol1-volume-cfg.xml

-f
/mnt/sdfs
-o
direct_io,big_writes,allow_other,fsname=sdfs_vol1-volume-cfg.xml
11:11:05.114     main  INFO [fuse.FuseMount]: Mounting filesystem

 

Tests

Copie de 2 fichiers identiques

Pour commencer, nous allons copier 2 fois le même fichier avec un nom différent sur la partition SDFS :

# du -hc /opt/sdfs/volumes/sdfs_vol1/
[...]
20K     total

# cp jdk-7-fcs-bin-b146-linux-x64-20_jun_2011.tar.gz /mnt/sdfs/

# df -h /mnt/sdfs/
Sys. de fichiers    Taille  Uti. Disp. Uti% Monté sur
sdfs_vol1-volume-cfg.xml
                      500M   91M  410M  19% /mnt/sdfs

# du -hc /opt/sdfs/volumes/sdfs_vol1/
[...]
91M     total

# cp jdk-7-fcs-bin-b146-linux-x64-20_jun_2011-copie.tar.gz /mnt/sdfs/

df -h /mnt/sdfs/
Sys. de fichiers    Taille  Uti. Disp. Uti% Monté sur
sdfs_vol1-volume-cfg.xml
                      500M  181M  319M  37% /mnt/sdfs
# du -hc /opt/sdfs/volumes/sdfs_vol1/
[...]
91M     total

Nous pouvons constater que l’espace disque occupé par le système de fichiers SDFS est bien resté le même. La commande « df » indique bien la somme des 2 fichiers.

Copie de 2 Fichiers dont le 2ème contient 2 fois les données du 1er

# ls -lh ldap*
-rw-r--r-- 1 root root 42M  8 juil. 13:56 ldap2x.ldif
-rw-r--r-- 1 root root 21M 14 mars   2006 ldap.ldif

# cp ldap*.ldif /mnt/sdfs/

# df -h /mnt/sdfs/
Sys. de fichiers    Taille  Uti. Disp. Uti% Monté sur
sdfs_vol1-volume-cfg.xml
                      500M   63M  438M  13% /mnt/sdfs

# du -hc /opt/sdfs/volumes/sdfs_vol1/
[...]
42M     total

Pour ce test le taux de déduplication est de 1/3.

Copie de 500 Mo de fichiers en vrac (text, jpg, pdf, mp3 …) jusqu’à saturation du système de fichiers monté

# ls -rlh /mnt/sdfs/
-rw-r--r-- 1 root root 7,8M 21 sept.  2010 Water - Evolution.mp3
-rw-r--r-- 1 root root 643K 10 juin  10:27 terrain vague.jpg
-rw-r--r-- 1 root root  34M  7 juin  09:48 squeezeboxserver_7.5.4_all.deb
[...]

# df -h /mnt/sdfs
Sys. de fichiers    Taille  Uti. Disp. Uti% Monté sur
sdfs_vol1-volume-cfg.xml
                      500M  500M     0 100% /mnt/sdfs
# du -hc /mnt/sdfs
[...]
564M    total

# du -hc /opt/sdfs/volumes/sdfs_vol1/
[...]
583M    total

Là, j’avoue, j’ai un peu de mal à interpréter ces résultats !

Performances

Pour le test, j’ai utilisé une machine virtuelle avec 4 G0 de RAM, 2 CPU et 3 disques virtuels, puis j’ai installé la distribution Linux Debian Squeeze 6.0.

# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 486 MB in  3.02 seconds = 160.71 MB/sec

# hdparm -t /dev/sdb
/dev/sdb:
Timing buffered disk reads: 484 MB in  3.00 seconds = 161.18 MB/sec

# hdparm -t /dev/sdc
/dev/sdc:
Timing buffered disk reads: 482 MB in  3.00 seconds = 160.43 MB/sec
  • Test de copie d’un fichier de 698 Mo :
Système de fichiers en s
ext3 13
ext4 6
sdfs 19

Sans surprise EXT4 mène la course en tête et SDFS est proche de la voiture balai.

  • Test avec dd

Test d’écriture

# time sh -c "dd if=/dev/zero of=/mnt/ext3/test bs=4096 count=175000 && sync"
# time sh -c "dd if=/dev/zero of=/mnt/ext4/test bs=4096 count=175000 && sync"
# time sh -c "dd if=/dev/zero of=/mnt/sdfs/test bs=4096 count=175000 && sync"

Dans cet exemple, on crée un fichier test sur chaque partition (ext3, ext4 et sdfs) dans lequel on va écrire 175 000 blocks de 4KB. Ce qui va nous donner un fichier de 717Mo. dd retournera ensuite la temps et la bande passante utilisée.

Système de fichiers en s en Mo/s
ext3 1,95 367
ext4 1,79 401
sdfs 8,36 86

SDFS est presque 4 fois plus lent que EXT3.

Test de lecture

time sh -c "dd if=/mnt/ext3/test of=/dev/null bs=4096 count=175000 && sync"
time sh -c "dd if=/mnt/ext4/test of=/dev/null bs=4096 count=175000 && sync"
time sh -c "dd if=/mnt/sdfs/test of=/dev/null bs=4096 count=175000 && sync"

On lit le même fichier test, (on l’envoie dans /dev/null). dd nous retournera les mêmes informations. Mais il s’agit maintenant de lecture disque.

Système de fichiers en s en Mo/s
ext3 0,34 2100
ext4 0,32 2200
sdfs 4,98 144

Dans ce 2ème test, l’écart est encore plus importants avec un ratio de 1/15 !

L’étape suivante est l’analyse de performances en utilisant le programme bonnie++. Ce programme analyse les accès de type base de données dans un fichier, ainsi que les créations, lectures, et destructions de petits fichiers simulant ainsi les utilisations faites par des programmes tels Squid, INN, ou les programmes utilisant le format Maildir (qmail).

# bonnie++ -d /mnt/ext3 -s 512 -r 256 -u0
# bonnie++ -d /mnt/ext4 -s 512 -r 256 -u0
# bonnie++ -d /mnt/sdfs -s 512 -r 256 -u0

La commande lance le test en utilisant 512 Mo dans le système de fichiers monté. Les autres options spécifient la quantité de mémoire utilisée (256 Mo), et l’utilisateur (-u0, c’est-à-dire l’administrateur).
Notez que les « +++++ » affichés dans certaines cases signifies que le test à durer moins de 500 ms et que le résultat n’a pu être calculé.

Écritures séquentielles Lectures séquentielles Accès aléatoires
Caractère Bloc Ré-écriture Caractère Bloc
SF Espace de test Ko/sec % CPU Ko/sec % CPU Ko/sec % CPU Ko/sec % CPU Ko/sec % CPU Ko/sec % CPU
ext3 512 Mo 633 97 128217 32 92074 13 3744 97 +++++ +++ 6071 32
ext4 512 Mo 689 99 153463 21 162631 28 3854 98 +++++ +++ 5941 28
sdfs 512 Mo 36 29 99782 11 71622 20 35 29 147618 7 3241 24

 

Créations séquentielles Créations aléatoires
Création Lecture Suppression Création Lecture Suppression
SF Nb fichiers / sec % CPU / sec % CPU / sec % CPU / sec % CPU / sec % CPU / sec % CPU
ext3 16 24219 37 +++++ +++ 5241 7 26500 47 +++++ +++ 3908 5
ext4 16 29919 60 +++++ +++ 8112 11 30659 62 +++++ +++ 5669 8
sdfs 16 340 3 3747 7 907 3 405 3 4076 8 771 2

L’ordre est respecté avec EXT4 qui est légèrement supérieur à EXT3 et SDFS en bon dernier très loin derrière les 2 autres.

Conclusion

Opendedup est une solution intéressante et certainement prometteuse. Cependant pour avoir des performances correctes, je pense qu’il faut l’utiliser avec des disques à 15000 tours/min et avec minimum 4 Go de RAM. Par ailleurs j’ai noté un problème d’encodage des noms de fichiers lorsqu’ils contiennent des caractères accentués. De plus la déduplication qui est censée se faire au niveau blocs de données n’a pas l’air très efficace. Certes la documentation n’est pas très abondante mais elle contient à priori les informations suffisantes. Alors j’ai certainement dû rater quelque chose … 😥

Vos commentaires sont les bienvenus si vous désirez approfondir ce sujet.

Références

Vus : 2563
Publié par Vince : 7