LessFs: la déduplication en ligne sous Linux (2/3) 1

LessFs: la déduplication en ligne sous Linux (2/3)

Installation de LessFs sur Debian/Ubuntu

LessFS est disponible soit sous la forme de paquets RPM compatibles avec les distributions type RedHat ou sous la forme qu’une archive tar.gz contenant le code source. C’est cette option que nous allons choisir pour compiler LessFS sous Linux Ubuntu 8.10 32bits. Par conséquent, nous n’allons pas pouvoir utiliser les commande “apt-get”.

LessFS requière une version de TokyoCabinet et Fuse qui n’est pas disponible parmi les paquets référencés à la date de rédaction de cet article. . Nous allons également compiler TokyoCabinet et Fuse à partir de leurs sources.

Pour des raisons de simplicités, passons en utilisateur “root”.

sudo su –

Tout d’abord, assurons nous que le système est bien à jour.

apt-get update

apt-get -y upgrade

Téléchargeons maintenant les différents outils de compilation et les librairies dont nous aurons besoins.

apt-get -y install build-essential pkg-config zlib1g-dev libbz2-dev libssl-dev

apt-get -y install libselinux-dev autotools-dev debhelper dpatch

Nous allons compiler la version 2.8 de FUSE. Vous trouverez sur le site http://techarcana.net/hydra/zfs-installation/ toute la procédure (assez longue et complexe) pour mettre à jour puis compiler les sources de FUSE et « patcher » le noyau. Heureusement, l’auteur du site propose une archive contenant les sources préparés par ses soins.

Plaçons nous à la racine de “/root”.

cd ~/

Supprimons une éventuelle copie existante de l’archive de source.

rm fuse_2.8.0-pre2-0techarcana0.tar.gz

Téléchargeons l’archive depuis http://zfs-fuse.googlegroups.com.

wget -O fuse_2.8.0-pre2-0techarcana0.tar.gz http://zfs-fuse.googlegroups.com/web/fuse_2.8.0-pre2-0techarcana0.tar.gz?gda=SCT_PlUAAAC2hC-yLWWQCgpk5MOk7RotcZuOkwcfbxBR2WQqa6arlZSarwQRh0Flmbn4J5pisUJsF5ePIqHJUe3Zphr8NcmwybqAEZdwsVcJWCD5_nV3XhrtYix3qocOGWUY90Yyf_g

rm -R fuse-2.8.0-pre2

Il nous reste à décompresser cette archive.

tar zxvf fuse_2.8.0-pre2-0techarcana0.tar.gz

Plaçons dans le sous dossier contenant les sources.

cd fuse-2.8.0-pre2

La commande “dpkg-buildpackage” va compiler puis créer un paquet “.deb” dans le dossier “/root” pour FUSE.

dpkg-buildpackage -rfakeroot -uc -us -D -j5

Il ne reste plus qu’à installer le paquet debian que nous venons de générer.

dpkg -i ../*.deb

Nous allons maintenant procéder à la compilation de la version 1.4 de TokyoCabinet en suivant la procédure décrite sur http://gissolved.blogspot.com/2009/07/installating-tokyo-cabinet-and-ruby-on.html.

Retournons dans le dossier “/root”

cd ~/

Nous y supprimons une éventuelle copie de l’archive de source.

rm tokyocabinet-1.4.35.tar.gz

Nous pouvons maintenant lancer le téléchargement des sources de TokyoCabinet.

wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.35.tar.gz

Il faut décompresser cette archive.

tar zxvf tokyocabinet-1.4.35.tar.gz

Plaçons dans le dossier contenant les sources et lançons la compilation.

cd tokyocabinet-1.4.35

./configure –enable-off64 –prefix=/usr

make clean

make

L’option “–enable-off64” est nécessaire pour utiliser une base de données de plus de 2G sous un système 32bits comme le notre.

Une fois l’application compilée, il nous reste à l’installer.

make install

Nous allons maintenant aborder la compilation et et l’installation de LessFS 9.0. Les étapes qui sons décrites ci-dessous en sont très similaires à celles requises pour TokyoCabinet aussi nous ne les détaillerons pas à nouveau.

cd ~/

rm lessfs-0.8.3.tar.gz

wget http://downloads.sourceforge.net/project/lessfs/lessfs/lessfs-0.8.3/lessfs-0.8.3.tar.gz

rm -R lessfs-0.8.3

tar zxvf lessfs-0.8.3.tar.gz

cd lessfs-0.8.3

./configure

make clean

make

make install

Par défaut, LessFS est compilé pour utiliser les Tiger Hash. Si vous souhaites utiliser les “Blue Midnight Whish hash”, il faudra remplacer “./configure” par “./configure –with-sha3” dans la séquence précédente.

Les sources de LessFS sont livrées avec un fichier de configuration standard que nous allons copier dans le répertoire “/etc”.

cp etc/lessfs.cfg /etc/lessfs.cfg

La composition de ce fichier est décrite dans le listing 1:

[shell]# Enable informational messages about compression.

DEBUG = 2

# The (chopped) hashlen in bytes, minimum is 20.

HASHLEN = 20

BLOCKDATA_IO_TYPE=file_io

BLOCKDATA_PATH=/data/dta/blockdata.dta

#BLOCKDATA_PATH=/data/dta

#BLOCKDATA_BS=1048576

#

BLOCKUSAGE_PATH=/data/mta

BLOCKUSAGE_BS=1048576

#

DIRENT_PATH=/data/mta

DIRENT_BS=1048576

#

FILEBLOCK_PATH=/data/mta

FILEBLOCK_BS=1048576

#

META_PATH=/data/mta

META_BS=1048576

#

HARDLINK_PATH=/data/mta

HARDLINK_BS=1048576

#

SYMLINK_PATH=/data/mta

SYMLINK_BS=1048576

#

# The freelist database is only used

# with the file_io backend

#

FREELIST_PATH=/data/mta

FREELIST_BS=1048576

#

# CACHESIZE in MB

CACHESIZE=900

# Flush data to disk after X seconds.

COMMIT_INTERVAL=30

#

LISTEN_IP=127.0.0.1

LISTEN_PORT=100

# Not more then 2 on most machines.

MAX_THREADS=2

#DYNAMIC_DEFRAGMENTATION on or off, default is off.

DYNAMIC_DEFRAGMENTATION=off

COREDUMPSIZE=256000000

# Consider SYNC_RELAX=1 or SYNC_RELAX=2 when exporting lessfs with NFS.

SYNC_RELAX=0

# Requires openssl and lessfs has to be configured with –with-crypto

ENCRYPT_DATA=off

# ENCRYPT_META on or off, default is off

# Requires ENCRYPT_DATA=on and is otherwise ignored.

ENCRYPT_META=off[/shell]

Listing1: Fichier de configuration de LessFS

La taille de la clef de hachage est définie par le champs HASHLEN. Plus la ligne est petite (minimum=20), plus le coût de stockage par bloc de données sera réduit. Par contre, la probabilité de collision augmente.

Les lignes en “xxxx_path” définissent l’emplacement des fichiers de la base de données TokyoCabinet. Les lignes “xxxx_BS” caractérisent le comportement de la base de données. A titre d’information, pour un million d’éléments à stocker, la valeur de BS doit être d’un demi million. Pour plus d’information, il faut consulter la documentation de TokyoCabinet http://tokyocabinet.sourceforge.net/spex-en.html.

Les paramètres LISTEN_IP et LISTEN_PORT spécifient l’adresse IP sur laquelle les outils d’administration de LessFS seront à l’écoute (defragmentation…).

Le paramètre MAX_THREADS doit être à 1 ou 2, selon le nombre de processeurs disponibles

CACHESIZE définie le nombre de bloc qui sont conservés en mémoire à des fin d’optimisation.

Toutes les COMMIT_INTERVAL secondes, le cache est écrits sur le disque.

Le paramètre MINSPACEFREE précise le pourcentage d’espace disque qui soit être disponible pour que LessFS accepte de se lancer.

Si SYNC_RELAX est à 0 (valeur par défaut) définie avec quelles précisions les caches et la base de données sont écrites sur le disques.

Il est possible de crypter le contenu de la base de données. Pour cela, les paramètres ENCRYPT_DATA et/ou ENCRYPT_META peuvent mis à “on”. Pour que cette fonctionnalité puisse être activée, LessFS doit avoir été compilé avec l’option “./configure –with-crypto”. Si ENCRYPT_DATA est activé, alors un mot de passe sera demandé lors de l’initialisation du système de fichiers avec la commande “mklessfs”. De même, le montage du système de fichier de type LessFS demandera la saisie d’un mot de passe.

Si l’on souhaite ne pas utiliser TokyoCabinet pour stocker la base de blocs, il faut commenter les paramètres “BLOCKDATA_xxx” et décommenter les paramètres suivantes:

#BLOCKDATA_PATH=/data/dta

#BLOCKDATA_BS=1048576

BLOCKDATA_IO_TYPE=file_io

BLOCKDATA_PATH=/data/dta/blockdata.dta

Le fichier “/data/dta/blockdata.dta” sera utilisé en lieu et place de la base de données TokyoCabinet.

Dans ce cas, les paramètres “FREELIST_xxx” seront utilisés pour la gestion des blocs de données supprimés. Ainsi, les espaces libres dans “/data/dta/blockdata.dta” seront utilisés en priorité, évitant ainsi la trop rapide fragmentation de la base de blocs.

# The freelist database is only used

# with the file_io backend

FREELIST_PATH=/data/mta

FREELIST_BS=1048576

Selon l’auteur de LessFS, les performances du mode ” file_io” peuvent être supérieures à celles de la base de données TokyoCabinet si de très gros fichiers sont archivés et que le système hôte dispose de beaucoup de mémoire.

Si est possible, mais pour l’instant non recommandé, de faire pointer BLOCKDATA_PATH vers un raw device (c’est à dire un disque physique non partition).

Pour des raisons de performances, il est recommandé de stocker les données et les métadonnées sur des disques différents. De même, l’auteur suggère de placer BLOCKUSAGE_PATH et FILEBLOCK_PATH sur des disques séparés.

Pensez à créer les répertoires de stockages des fichiers de base de données requis par LessFS et le point de montage du système de fichier.

mkdir /data

mkdir /data/dta

mkdir /data/mta

mkdir /media/lessfs

Dès que le fichier de configuration est paramétré, la commande “mklessfs” va créer le système de fichier.

mklessfs /etc/lessfs.cfg

Il faut noter que “mklessfs” refusera de s’exécuter sur le fichier “blockdata.tch” existe déjà.

Désormais, il ne reste plus qu’à monter le système de fichier dédupliqué.

lessfs /etc/lessfs.cfg /media/lessfs

La taille de bloc a également un grande influence sur les performances en lecture/écriture sur le système de fichier de type LessFS. La taille des blocs de données par défaut est de 4K. Cette taille génère énormément de lecture/écriture et stocke beaucoup de métadonnées. Une taille de bloc de 64K ou 128K améliore grandement les performances en I/O mais peux réduire le facteur de déduplication si les données sont peu redondantes. Pour monter LessFs avec une taille de bloc de 128K, nous utiliserons plutôt la commande suivante:

lessfs /etc/lessfs.cfg /media/lessfs -o negative_timeout=0, entry_timeout=0,attr_timeout=0,use_ino,readdir_ino, default_permissions,allow_other,big_writes, max_read=65536,max_write=65536

On peux s’assurer le le système de fichier Lessfs est bien actif en lançant la commande:

mount -l |grep lessfs

lessfs on /media/lessfs type fuse.lessfs (rw,nosuid,nodev)

Le fichier de journal “/var/log/syslog” nous renseigne également sur les paramètres pris en compte par LessFS lors de son lancement.

lessfs[32400]: The selected data store is file_io.

lessfs[32400]: Lessfs uses a 20 bytes long hash.

lessfs[32400]: Lessfs fsync does not sync the databases to the disk when fsync is called on an inode

lessfs[32400]: cache 7200 data blocks

lessfs[32400]: The Blue Midnight Wish hash has been selected.

La taille initiale de la base de données de bloc peux être mesurée avec la commande “du”:

du -h /data

64M    /data/mta

4.0K    /data/dta

64M    /data/

La taille initiale de la base de données est de 64M.

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

Memento - Centos revenir en arrière après un yum update 2

Memento – Centos revenir en arrière après un yum update

Depuis quelques mois, j’utilise un serveur dédié chez EvxOnline, un très bon hébergeur et très …

Memento - Problème https et certificate error 3

Memento – Problème https et certificate error

J’utilise depuis plus d’un an un outil d’administration de sites web appelé i-MSCP (pour Internet …