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:
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.