ZFS Fuse sur Linux – test de la déduplication/compression 1

ZFS Fuse sur Linux – test de la déduplication/compression

L’objectif de cet article est de démontrer le bon fonctionnement de la compression/déduplication dans le port du système de fichier ZFS sous Linux Centos 6 (une VM hyper-V dans mon cas).

Tour à tour, je vais créer un volume ZFS sur lequel je vais activer ou pas la compression/ déduplication. Je vais ensuite créer au sein de ce système de fichier, un fichier de 50Mo et nous verrons comment évolue l’espace disque utilisé par ZFS.

Un système de fichier ZFS vide

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=off zfs-pool/zfs-volume

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 2

On constate que le dossier /zfs-pool/zfs-volume est vide! Le volume ZFS utilise 111K.

Un système de fichier ZFS avec un fichier de 50 Mo « vide »

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=off zfs-pool/zfs-volume

dd if=/dev/zero of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 3

Sans surprise, le volume ZFS consommé 50Mo de disque.

Un système de fichier ZFS « compressé » avec un fichier de 50 Mo « vide »

J’active cette fois l’option de compression du volume ZFS

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=on zfs-pool/zfs-volume

zfs set dedup=off zfs-pool/zfs-volume

dd if=/dev/zero of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 4

Le volume ZFS occupe seulement 110K alors qu’il contient un fichier de 50Mo. Comme ce fichier est plein de vide, il se compresse très bien.

Un système de fichier ZFS « dédupliqué » avec un fichier de 50 Mo « vide »

J’active cette fois l’option de déduplication du volume ZFS

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=on zfs-pool/zfs-volume

dd if=/dev/zero of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 5

Le volume ZFS occupe seulement 269K alors qu’il contient un fichier de 50Mo. Comme le fichier est plein de vide – donc de bloc identiques, il se déduplique très bien.

Un système de fichier ZFS « compressé & dédupliqué » avec un fichier de 50 Mo « vide »

J’active cette fois l’option de déduplication et de compression du volume ZFS

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=on zfs-pool/zfs-volume

zfs set dedup=on zfs-pool/zfs-volume

dd if=/dev/zero of=/zfs-pool/zfs-volume/sample bs=1M count=50

sync

sync

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 6

Le volume ZFS occupe seulement 110K alors qu’il contient un fichier de 50Mo. Comme ce fichier est plein de vide, il se compresse très bien. Après compression, il ne reste plus grand-chose à dédupliquer.

Un système de fichier ZFS avec un fichier de 50 Mo dont le contenu est aléatoire

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=off zfs-pool/zfs-volume

dd if=/dev/urandom of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 7

Sans surprise! Sans compression; sans déduplication, sur un fichier au contenu complètement aléatoire, ZFS occupe réellement 50Mo.

Un système de fichier ZFS « compressé» avec un fichier de 50 Mo dont le contenu est aléatoire

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=on zfs-pool/zfs-volume

zfs set dedup=off zfs-pool/zfs-volume

dd if=/dev/urandom of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 8

Rien à faire. Le contenu du fichier est totalement aléatoire; aucune chance de compression. ZFS occupe 50Mo.

Un système de fichier ZFS « dédupliqué» avec un fichier de 50 Mo dont le contenu est aléatoire

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=on zfs-pool/zfs-volume

dd if=/dev/urandom of=/zfs-pool/zfs-volume/sample bs=1M count=50

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 9

Rien à faire. Le contenu du fichier est totalement aléatoire; aucune chance de déduplication. ZFS occupe 50Mo.

Un système de fichier ZFS « dédupliqué» avec deux copies d’un même fichier de 50 Mo dont le contenu est aléatoire

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=off zfs-pool/zfs-volume

zfs set dedup=on zfs-pool/zfs-volume

dd if=/dev/urandom of=/zfs-pool/zfs-volume/sample bs=1M count=50

cp /zfs-pool/zfs-volume/sample /zfs-pool/zfs-volume/sample2

clear

ls -la /zfs-pool/zfs-volume

zdb -s zfs-pool

ZFS Fuse sur Linux – test de la déduplication/compression 10

Le système de fichier occupe bien 100Mo mais comme les deux fichiers sont identiques, seuls les 50Mo du premier fichier sont consommés.

Un système de fichier ZFS « compressé & dédupliqué » avec une copie de « /usr »

Pour cet exemple, afin de prendre un vrai jeu de données,je copie le contenu de « /usr » vers la volume ZFS.

clear

zpool destroy -f zfs-pool

zpool create zfs-pool mirror -f /dev/sda /dev/sdb

zfs create zfs-pool/zfs-volume

zfs set compress=on zfs-pool/zfs-volume

zfs set dedup=on zfs-pool/zfs-volume

cp -r /usr/ /zfs-pool/zfs-volume

clear

zfs get compressratio zfs-pool/zfs-volume

zpool list

ZFS Fuse sur Linux – test de la déduplication/compression 11

Oui, la compression et la déduplication fonctionnent bien!

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

[Projet] Stockage embarqué avec ZFSguru 12

[Projet] Stockage embarqué avec ZFSguru

On continue les recherches sur la meilleure solution de stockage embarquée, dont un des objectifs est de se créer son NAS perso. Etudions la solution ZFS guru, basée sur FreeBSD et administrable par une interface Web

Les commandes ZFS résumées 13

Les commandes ZFS résumées

Je vous propose deux sites résumant en une seule page web un condensé de toutes …