5 votes

Comment puis-je savoir si la déduplication/compression ZFS (zfs-fuse) est appliquée à un fichier particulier ?

J'ai une partition formatée en zfs en utilisant zfs-fuse pour linux (Ubuntu).

Je l'ai utilisé pendant un certain temps, puis j'ai activé la déduplication et la compression (zfs set compression=on/dedup=on). Maintenant je pense que j'ai des fichiers qui sont dédupliqués et compressés, et des fichiers qui ne le sont pas encore.

C'était bien, mais parfois j'étais confus. Voyons voir, la commande suivante consommerait presque 4GB de mon stockage zfs :

cp oldfile.4GB newfile.4GB

.. et cela consommerait presque zéro :

cp newfile.4GB newfile.4GB.2

C'est parce que l'ancien fichier n'est pas encore compressé, donc la déduplication n'a pas eu lieu, je pense.

Mon idée est la suivante : si je peux trouver d'anciens fichiers qui ne sont pas encore déduits/compressés, je peux les copier/renommer/supprimer par lots pour éliminer les doublons et les redondances. Mais comment puis-je vérifier cela ?

Je sais que je peux recopier le contenu entier de mon stockage si cela fonctionne (encore mieux avec la vérification de l'horodatage de chaque fichier), mais je serais plus heureux si j'avais zfsstat -qui affiche certaines propriétés des fichiers.


EDIT : Vérifié le conseil de jlliagre sur mon environnement.

First, made some dataset and directories:
$ sudo zfs create zfs/test
$ sudo install -d -m 1777 /zfs/test/orig /zfs/test/copy

Created some files:
$ yes > /zfs/test/orig/yes.1s & sleep 1; kill %1
$ dd if=/dev/zero of=/zfs/test/orig/zero.1M bs=1K count=1024
$ dd if=/dev/urandom of=/zfs/test/orig/rand.1M bs=1K count=1024

Turned compression on, and copy above files:
$ sudo zfs set compress=on  zfs/test
$ cp /zfs/test/orig/* /zfs/test/copy

Now the directories look like:
$ ls -hil /zfs/test/*
/zfs/test/copy:
total 1.5K
10 -rw-r--r-- 1 kimura kimura 1.0M Mar  2 01:30 rand.1M
11 -rw-r--r-- 1 kimura kimura  40M Mar  2 01:30 yes.1s
12 -rw-r--r-- 1 kimura kimura 1.0M Mar  2 01:30 zero.1M

/zfs/test/orig:
total 42M
9 -rw-r--r-- 1 kimura kimura 1.0M Mar  2 01:29 rand.1M
7 -rw-r--r-- 1 kimura kimura  40M Mar  2 01:29 yes.1s
8 -rw-r--r-- 1 kimura kimura 1.0M Mar  2 01:29 zero.1M

And zdb tool shows some information:
kimura@kimura-desktop:~$ sudo zdb zfs/test 
Dataset zfs/test [ZPL], ID 196, cr_txg 108306, 44.2M, 12 objects

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
         0    7    16K    16K    16K    16K   37.50  DMU dnode
        -1    1    16K    512     1K    512  100.00  ZFS user/group used
        -2    1    16K    512     1K    512  100.00  ZFS user/group used
         1    1    16K    512     1K    512  100.00  ZFS master node
         2    1    16K    512     1K    512  100.00  ZFS delete queue
         3    1    16K    512     1K    512  100.00  ZFS directory
         4    1    16K    512     1K    512  100.00  ZFS directory
         5    1    16K    512     1K    512  100.00  ZFS directory
         6    1    16K    512     1K    512  100.00  ZFS directory
         7    3    16K   128K  39.8M  39.8M  100.00  ZFS plain file
         8    2    16K   128K  1.00M     1M  100.00  ZFS plain file
         9    2    16K   128K  1.00M     1M  100.00  ZFS plain file
        10    2    16K   128K  1.00M     1M  100.00  ZFS plain file
        11    3    16K   128K  1.41M  39.8M  100.00  ZFS plain file
        12    2    16K   128K      0   128K    0.00  ZFS plain file

Je peux voir que "oui" et "zéro" sont bien compressés.

5voto

jlliagre Points 13539

Vous pouvez obtenir des statistiques globales sur la déduplication avec la fonction zdb -D poolname commandement.

Pour l'état de la compression par fichier, ce n'est pas très simple mais vous pouvez utiliser ceci :

zdb dataset | grep plain

Cela produira des lignes ressemblant à celles-ci :

     8    2    16K   128K  3.03M  5.00M  100.00  ZFS plain file
     9    2    16K   128K  3.03M  5.00M  100.00  ZFS plain file
    10    2    16K   128K  5.00M  5.00M  100.00  ZFS plain file
    11    2    16K   128K  3.03M  6.00M   83.33  ZFS plain file

La première colonne est le numéro d'inode, les colonnes 5 et 6 représentent la taille sur le disque et la taille du fichier, et la colonne 7 le pourcentage du fichier qui existe réellement. Tout fichier ayant des valeurs différentes en 6 et 7 et 100% en 8 est compressé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X