Système de fichiers de compression transparent conjointement avec ext4

26

J'essaie de tester un projet qui nécessite un stockage compressé avec l'utilisation du système de fichiers ext4 car l'application que j'utilise repose sur des fonctionnalités ext4.

Existe-t-il des solutions de production / stables pour une compression transparente sur ext4?

Ce que j'ai essayé:

Ext4 sur le volume ZFS avec compression activée. Cela a en fait eu un effet négatif. J'ai essayé de créer un volume ZFS avec la compression lz4 activée et de créer un système de fichiers ext4 sur / dev / zvol / ... mais le volume zfs montrait le double de l'utilisation réelle et la compression ne semblait pas avoir d'effet.

# du -hs /mnt/test
**1.1T**    /mnt/test
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
pool       15.2T  2.70G   290K  /pool
pool/test  15.2T  13.1T  **2.14T**  -

Commandes de création ZFS

zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test

Fusecompress: Semblait fonctionner mais pas stable à 100%. Recherche d'alternatives.

LessFS: Est-il possible d'utiliser Lessfs en conjonction avec ext4? Je n'ai pas encore essayé mais je serais intéressé par les informations des utilisateurs.

Un problème majeur: pas une vraie transparence

Un problème que j'ai vu avec fusecompress était les quotas. Par exemple, si j'active la compression sur le système de fichiers, je souhaiterais que mon système bénéficie de la compression, pas nécessairement l'utilisateur final. Si j'activais un quota de 1 Go pour un utilisateur, avec un taux de compression de 1,5, il serait en mesure de télécharger 1,5 Go de données, plutôt que 1 Go de données et le système bénéficiant de la compression. Cela semble également apparaître sur df -h. Existe-t-il une solution pour que la compression soit transparente aux quotas?

user235918
la source
Sûr. Pouvez-vous énumérer le système d'exploitation / distribution / version et des détails sur la nature des données que vous avez l'intention de stocker?
ewwhite
Également des détails matériels.
ewwhite
1
@ewwhite 8x3TB dans un RAID6 logiciel. Les données seront des sauvegardes synchronisées à partir d'autres serveurs, donc des types de données mixtes et divers utilisateurs finaux, documents, etc. CentOS 6.5 x64.
user235918
Voulez-vous vraiment en avoir besoin? Avez-vous de nombreux fichiers volumineux et clairsemés? L'espace disque est bon marché de nos jours.
Andrew Schulman
@AndrewSchulman: Profiter de la compression est la meilleure méthode de mon calcul. Le coût des disques et contrôleurs supplémentaires qui les prennent en charge est supérieur au coût du processeur.
user235918

Réponses:

27

J'utilise ZFS sous Linux comme gestionnaire de volume et comme moyen de fournir des protections et des fonctionnalités supplémentaires aux systèmes de fichiers traditionnels. Cela inclut la création d'instantanés au niveau du bloc, la réplication, la déduplication, la compression et la mise en cache avancée sur les systèmes de fichiers XFS ou ext4.

Voir: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ pour une autre explication.

Dans mon cas d'utilisation le plus courant, j'utilise la fonction ZFS zvol pour créer un volume clairsemé sur un zpool existant. Les propriétés de zvol peuvent être définies comme celles d'un système de fichiers ZFS normal. À ce stade, vous pouvez définir des propriétés telles que le type de compression, la taille du volume, la méthode de mise en cache, etc.

La création de ce zvol présente un périphérique de bloc pour Linux qui peut être formaté avec le système de fichiers de votre choix. Utilisez fdiskou partedpour créer votre partition et mkfsle volume fini.

Montez cela et vous avez essentiellement un système de fichiers soutenu par un zvol et avec toutes ses propriétés.


Voici mon flux de travail ...

Créez un zpool composé de quatre disques:
vous aurez besoin de la ashift=12directive pour le type de disques que vous utilisez. Le nom zpool est "vol0" dans ce cas.

zpool create -o ashift = 12 -f vol0 miroir scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 miroir scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044

Définir les paramètres initiaux de zpool:
je définis autoexpand=onau niveau de zpool au cas où je remplacerais les disques par des disques plus gros ou étendrais le pool dans une configuration de miroirs ZFS . Je n'utilise généralement pas ZFS raidz1 / 2/3 en raison de performances médiocres et de l'impossibilité d'étendre le zpool.

zpool set autoexpand=on vol0

Définissez les propriétés initiales du système de fichiers zfs:
veuillez utiliser l' lz4algorithme de compression pour les nouvelles installations ZFS. Il est normal de le laisser allumé tout le temps.

zfs set compression=lz4 vol0
zfs set atime=off vol0

Créer ZFS zvol:
Pour ZFS sous Linux, il est très important d'utiliser une grande taille de bloc. -o volblocksize=128kest absolument essentiel ici. L' -soption crée un zvol clairsemé et ne consomme pas d'espace de pool tant qu'il n'est pas nécessaire. Vous pouvez engager trop ici, si vous connaissez bien vos données. Dans ce cas, j'ai environ 444 Go d'espace disque utilisable dans le pool, mais je présente un volume de 800 Go à XFS.

zfs create -o volblocksize=128K -s -V 800G vol0/pprovol

Périphérique de partition zvol:
( devrait être / dev / zd0 pour le premier zvol; / dev / zd16, / dev / zd32, etc. pour les zvols suivants )

fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)

Créez et montez le système de fichiers:
mkfs.xfs ou ext4 sur la partition nouvellement créée, / dev / zd0p1.

mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1

Saisissez l'UUID avec blkidet modifiez /etc/fstab.

UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro       xfs     noatime,logbufs=8,logbsize=256k 1 2

Montez le nouveau système de fichiers.

mount /ppro/

Résultats...

[root@Testa ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde2        20G  8.9G  9.9G  48% /
tmpfs            32G     0   32G   0% /dev/shm
/dev/sde1       485M   63M  397M  14% /boot
/dev/sde7       2.0G   68M  1.9G   4% /tmp
/dev/sde3        12G  2.6G  8.7G  24% /usr
/dev/sde6       6.0G  907M  4.8G  16% /var
/dev/zd0p1      800G  398G  403G  50% /ppro  <-- Compressed ZFS-backed XFS filesystem.
vol0            110G  256K  110G   1% /vol0

Liste des systèmes de fichiers ZFS.

[root@Testa ~]# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
vol0           328G   109G   272K  /vol0
vol0/pprovol   326G   109G   186G  -   <-- The actual zvol providing the backing for XFS.
vol1           183G   817G   136K  /vol1
vol1/images    183G   817G   183G  /images

Liste ZFS zpool.

[root@Testa ~]# zpool list -v
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol0   444G   328G   116G    73%  1.00x  ONLINE  -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322043      -      -      -         -
    scsi-AccOW140403AS1322042      -      -      -         -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322013      -      -      -         -
    scsi-AccOW140403AS1322044      -      -      -         -

Propriétés ZFS zvol ( prendre note de referenced, compressratioetvolsize ).

[root@Testa ~]# zfs get all vol0/pprovol
NAME          PROPERTY               VALUE                  SOURCE
vol0/pprovol  type                   volume                 -
vol0/pprovol  creation               Sun May 11 15:27 2014  -
vol0/pprovol  used                   326G                   -
vol0/pprovol  available              109G                   -
vol0/pprovol  referenced             186G                   -
vol0/pprovol  compressratio          2.99x                  -
vol0/pprovol  reservation            none                   default
vol0/pprovol  volsize                800G                   local
vol0/pprovol  volblocksize           128K                   -
vol0/pprovol  checksum               on                     default
vol0/pprovol  compression            lz4                    inherited from vol0
vol0/pprovol  readonly               off                    default
vol0/pprovol  copies                 1                      default
vol0/pprovol  refreservation         none                   default
vol0/pprovol  primarycache           all                    default
vol0/pprovol  secondarycache         all                    default
vol0/pprovol  usedbysnapshots        140G                   -
vol0/pprovol  usedbydataset          186G                   -
vol0/pprovol  usedbychildren         0                      -
vol0/pprovol  usedbyrefreservation   0                      -
vol0/pprovol  logbias                latency                default
vol0/pprovol  dedup                  off                    default
vol0/pprovol  mlslabel               none                   default
vol0/pprovol  sync                   standard               default
vol0/pprovol  refcompressratio       3.32x                  -
vol0/pprovol  written                210M                   -
vol0/pprovol  snapdev                hidden                 default
ewwhite
la source
Pourquoi partitionner le zvol? Ne peut-il pas être utilisé directement?
Michael Hampton
3
@MichaelHampton Principalement pour l'alignement et la cohérence. De plus, je veux de la flexibilité si j'augmente le volume sous-jacent. Il y a plusieurs couches d'abstraction ici. Il est similaire à l'argument de l'utilisation de /dev/sdbversus /dev/sdb1.
ewwhite
1
Merci pour ton information. Beaucoup de bons conseils ici. Je vais le tester.
user235918
2
@MichaelHampton BTW, ces jours-ci, je ne partitionne plus ... surtout avec les machines virtuelles.
ewwhite
1
Pouvez-vous s'il vous plaît parler des coûts de ressources supplémentaires pour la couche ZFS dans cette configuration (RAM, CPU)?
Sz.
4

Vous devez également activer la suppression sur le système de fichiers ext4. Sans suppression, zfs ne récupère pas l'espace lorsque les fichiers sont supprimés. Cela peut finir par conduire à des écarts d'espace importants entre les rapports du système de fichiers ext4 et les rapports de volume zfs.

Devon
la source
4
Red Hat ne recommande pas de le faire en ligne avec l'option de montage de suppression (avec ext4 ou xfs), car il y a un impact sur les performances. Il est plus propre d'exécuter périodiquement la fstrimcommande.
ewwhite
par rapport au commentaire sur les montages à rejet ayant une incidence sur les performances: cela est vrai avec les anciens SSD de faible qualité. Ce n'est pas vrai avec les plus récents.
Stoat