GNU/Linux >> Tutoriels Linux >  >> Cent OS

Guide d'installation et d'utilisation de ZFS sur CentOS 7

ZFS, la forme abrégée de Zettabyte Filesystem est un système de fichiers avancé et hautement évolutif. Il a été initialement développé par Sun Microsystems et fait maintenant partie du projet OpenZFS. Avec autant de systèmes de fichiers disponibles sur Linux, il est tout à fait naturel de se demander quelle est la particularité de ZFS. Contrairement à d'autres systèmes de fichiers, il ne s'agit pas seulement d'un système de fichiers, mais également d'un gestionnaire de volumes logiques. Certaines des fonctionnalités de ZFS qui le rendent populaire sont :

  • Intégrité des données :la cohérence et l'intégrité des données sont assurées par des techniques de copie sur écriture et de somme de contrôle
  • Mise en commun de l'espace de stockage :les disques de stockage disponibles peuvent être regroupés dans un seul pool appelé zpool
  • RAID logiciel :la configuration d'une baie raidz est aussi simple que d'émettre une seule commande.
  • Gestionnaire de volume intégré :ZFS agit également en tant que gestionnaire de volume.
  • Instantanés, clones, compression :voici quelques-unes des fonctionnalités avancées fournies par ZFS.

ZFS est un système de fichiers 128 bits et a la capacité de stocker 256 zetta octets ! Dans ce guide, nous apprendrons comment installer, configurer et également utiliser certaines commandes ZFS importantes sur un serveur CentOS 7.

REMARQUE :La partie installation est spécifique au serveur CentOS alors que les commandes sont communes à tous les systèmes Linux

Terminologie

Avant de poursuivre, comprenons quelques-unes des terminologies couramment utilisées dans ZFS.

Piscine

Regroupement logique des disques de stockage. C'est le bloc de construction de base de ZFS et c'est à partir de là que l'espace de stockage est alloué aux ensembles de données.

Ensembles de données

Les composants du système de fichiers ZFS, à savoir le système de fichiers, les clones, les instantanés et les volumes, sont appelés ensembles de données.

Miroir

Périphérique virtuel stockant des copies de données identiques sur deux disques ou plus. Dans les situations où un disque tombe en panne, les mêmes données sont disponibles sur d'autres disques de ce miroir.

Réargenture

Processus de copie de données d'un disque à un autre en cas de restauration d'un appareil.

Frotter

Scrub est utilisé pour la vérification de la cohérence dans ZFS comme la façon dont fsck est utilisé dans d'autres systèmes de fichiers

Installer ZFS

Pour installer ZFS sur CentOS, nous devons d'abord configurer le référentiel EPEL pour les packages de prise en charge, puis le référentiel ZFS pour installer les packages ZFS requis.

Remarque :Veuillez préfixer sudo à toutes les commandes si vous n'êtes pas l'utilisateur root.

yum localinstall --nogpgcheck http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm

Installez maintenant les packages de développement du noyau et zfs. Les packages de développement du noyau sont nécessaires car ZFS est construit en tant que module et inséré dans le noyau.

yum install kernel-devel zfs

Vérifiez si le module zfs est inséré dans le noyau à l'aide de la commande 'lsmod' et si ce n'est pas le cas, insérez-le manuellement à l'aide de la commande 'modprobe'.

[root@li1467-130 ~]# lsmod |grep zfs

[root@li1467-130 ~]# modprobe zfs

[root@li1467-130 ~]# lsmod |grep zfs
zfs 2790271 0
zunicode 331170 1 zfs
zavl 15236 1 zfs
zcommon 55411 1 zfs
znvpair 89086 2 zfs,zcommon
spl 92029 3 zfs,zcommon,znvpair

Vérifions si nous sommes capables d'utiliser les commandes zfs :

[root@li1467-130 ~]# zfs list
no datasets available

Administration

ZFS a deux utilitaires principaux, zpool et zfs. Alors que zpool s'occupe de la création et de la maintenance des pools à l'aide de disques, l'utilitaire zfs est responsable de la création et de la maintenance des ensembles de données.

utilitaire zpool

Créer et détruire des pools

Vérifiez d'abord les disques disponibles pour créer un pool de stockage.

[root@li1467-130 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0  Mar 16 08:12 /dev/sda
brw-rw---- 1 root disk 8, 16 Mar 16 08:12 /dev/sdb
brw-rw---- 1 root disk 8, 32 Mar 16 08:12 /dev/sdc
brw-rw---- 1 root disk 8, 48 Mar 16 08:12 /dev/sdd
brw-rw---- 1 root disk 8, 64 Mar 16 08:12 /dev/sde
brw-rw---- 1 root disk 8, 80 Mar 16 08:12 /dev/sdf

Créez un pool à partir d'un ensemble de lecteurs.

zpool create <option> <pool name. <drive 1> <drive 2> .... <drive n>
[root@li1467-130 ~]# zpool create -f zfspool sdc sdd sde sdf

La commande 'zpool status' affiche l'état des pools disponibles

[root@li1467-130 ~]# zpool status
pool: zfspool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zfspool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

errors: No known data errors

Vérifiez si la création du pool a réussi.

[root@li1467-130 ~]# df -h
Filesystem    Size   Used      Avail  Use%   Mounted on
/dev/sda      19G    1.4G        17G      8%      /
devtmpfs    488M        0      488M      0%     /dev
tmpfs          497M        0      497M      0%    /dev/shm
tmpfs          497M    50M     447M     11%   /run
tmpfs          497M         0     497M      0%   /sys/fs/cgroup
tmpfs          100M         0     100M      0%   /run/user/0
zfspool         3.7G         0       3.7G      0%  /zfspool

Comme vous pouvez le voir, zpool a créé un pool nommé 'zfspool' d'une taille de 3,7 Go et l'a également monté dans /zfspool.

Pour détruire un pool, utilisez la commande 'zpool destroy'

zpool destroy <pool name>

[root@li1467-130 ~]# zpool destroy zfspool
[root@li1467-130 ~]# zpool status
no pools available

Essayons maintenant de créer un simple pool de miroirs.

zpool create <option> <pool name> mirror <drive 1> <drive 2>... <drive n>

Nous pouvons également créer plusieurs miroirs en même temps en répétant le mot-clé miroir suivi des lecteurs.

[root@li1467-130 ~]# zpool create -f mpool mirror sdc sdd mirror sde sdf
[root@li1467-130 ~]# zpool status
pool: mpool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
mpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

errors: No known data errors

Dans l'exemple ci-dessus, nous avons créé des pools de miroirs chacun avec deux disques.

De même, nous pouvons créer un pool raidz.

[root@li1467-130 ~]# zpool create -f rpool raidz sdc sdd sde sdf
[root@li1467-130 ~]# zpool status
pool: rpool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0

errors: No known data errors

Gestion des appareils dans les pools ZFS

Une fois qu'un pool est créé, il est possible d'ajouter ou de supprimer des disques de secours et des périphériques de cache du pool, d'attacher ou de détacher des périphériques des pools en miroir et de remplacer des périphériques. Mais les périphériques non redondants et raidz ne peuvent pas être supprimés d'un pool. Nous verrons comment effectuer certaines de ces opérations dans cette section.

Je crée d'abord un pool appelé "testpool" composé de deux appareils, sdc et sdd. Un autre appareil sde sera alors ajouté à celui-ci.

[root@li1467-130 ~]# zpool create -f testpool sdc sdd

[root@li1467-130 ~]# zpool add testpool sde
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0

errors: No known data errors

Comme mentionné précédemment, je ne peux pas supprimer ce périphérique nouvellement ajouté car il ne s'agit pas d'un pool redondant ou raidz.

[root@li1467-130 ~]# zpool remove testpool sde
cannot remove sde: only inactive hot spares, cache, top-level, or log devices can be removed

Mais je peux ajouter un disque de secours à ce pool et le supprimer.

[root@li1467-130 ~]# zpool add testpool spare sdf
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
spares
sdf AVAIL

errors: No known data errors
[root@li1467-130 ~]# zpool remove testpool sdf
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:

NAME        STATE       READ  WRITE   CKSUM
testpool    ONLINE       0          0               0
sdc            ONLINE       0           0               0
sdd            ONLINE      0            0               0
sde            ONLINE      0            0               0

errors: No known data errors

De même, nous pouvons utiliser la commande attach pour attacher des disques à un pool en miroir ou non et la commande detach pour détacher des disques d'un pool en miroir.

zpool attach <options> <pool name> <device> <new device>

zpool detach <pool name> <device>

Lorsqu'un appareil tombe en panne ou est corrompu, nous pouvons le remplacer à l'aide de la commande "remplacer".

zpool replace <options> <pool name> <device> <new device>

Nous allons tester cela en corrompant de force un appareil dans une configuration en miroir.

[root@li1467-130 ~]# zpool create -f testpool mirror sdd sde

Cela crée un pool miroir composé de disques sdd et sde. Maintenant, corrompons délibérément le lecteur sdd en y écrivant des zéros.

[root@li1467-130 ~]# dd if=/dev/zero of=/dev/sdd
dd: writing to ‘/dev/sdd’: No space left on device
2048001+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 22.4804 s, 46.6 MB/s

Nous utiliserons la commande 'scrub' pour détecter cette corruption.

[root@li1467-130 ~]# zpool scrub testpool
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: scrub repaired 0 in 0h0m with 0 errors on Fri Mar 18 09:59:40 2016
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdd UNAVAIL 0 0 0 corrupted data
sde ONLINE 0 0 0

errors: No known data errors

Nous allons maintenant remplacer sdd par sdc.

[root@li1467-130 ~]# zpool replace testpool sdd sdc; zpool status
pool: testpool
state: ONLINE
scan: resilvered 83.5K in 0h0m with 0 errors on Fri Mar 18 10:05:17 2016
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
replacing-0 UNAVAIL 0 0 0
sdd UNAVAIL 0 0 0 corrupted data
sdc ONLINE 0 0 0
sde ONLINE 0 0 0

errors: No known data errors

[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: resilvered 74.5K in 0h0m with 0 errors on Fri Mar 18 10:00:36 2016
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sde ONLINE 0 0 0

errors: No known data errors

Migration des pools

Nous pouvons migrer des pools de stockage entre différents hôtes à l'aide des commandes d'exportation et d'importation. Pour cela, les disques utilisés dans le pool doivent être disponibles sur les deux systèmes.

[root@li1467-130 ~]# zpool export testpool
[root@li1467-130 ~]# zpool status
no pools available

La commande 'zpool import' répertorie tous les pools disponibles pour l'importation. Exécutez cette commande à partir du système sur lequel vous souhaitez importer le pool.

[root@li1467-131 ~]# zpool import
pool: testpool
id: 3823664125009563520
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

testpool ONLINE
sdc ONLINE
sdd ONLINE
sde ONLINE

Importez maintenant le pool requis

[root@li1467-131 ~]# zpool import testpool
[root@li1467-131 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0

errors: No known data errors

iostat

On peut vérifier les statistiques io des périphériques du pool à l'aide de la commande iostat.

[root@li1467-130 ~]# zpool iostat -v testpool
capacity          operations                        bandwidth
pool          alloc      free            read     write             read   write
----------    -----     -----            -----     -----                -----   -----
testpool    1.80M  2.86G        22            27               470K  417K
sdc             598K   975M           8              9               200K  139K
sdd             636K  975M            7              9                135K  139K
sde             610K   975M           6              9                 135K 139K
----------   -----     -----           -----          -----               -----  -----

utilitaire zfs

Nous allons maintenant passer à l'utilitaire zfs. Ici, nous verrons comment créer, détruire des ensembles de données, la compression du système de fichiers, les quotas et les instantanés.

Créer et détruire un système de fichiers

Le système de fichiers ZFS peut être créé à l'aide de la commande zfs create

zfs create <filesystem>
[root@li1467-130 ~]# zfs create testpool/students
[root@li1467-130 ~]# zfs create testpool/professors
[root@li1467-130 ~]# df -h
Filesystem                    Size             Used          Avail          Use%          Mounted on
/dev/sda                       19G              1.4G          17G             8%                     /
devtmpfs                   488M                  0      488M             0%                    /dev
tmpfs                          497M                  0       497M            0%                   /dev/shm
tmpfs                          497M            50M       447M           11%                  /run
tmpfs                          497M                 0        497M            0%                /sys/fs/cgroup
testpool                       2.8G                  0         2.8G            0%               /testpool
tmpfs                          100M                  0        100M            0%             /run/user/0
testpool/students     2.8G                   0         2.8G             0%            /testpool/students
testpool/professors  2.8G                   0         2.8G             0%           /testpool/professors

À partir de la sortie ci-dessus, observez que bien qu'il n'y ait pas de point de montage donné au moment de la création du système de fichiers, le point de montage est créé en utilisant la même relation de chemin que celle du pool.

zfs create permet d'utiliser -o avec lequel nous pouvons spécifier des options telles que point de montage, compression, quota, exec, etc.

On peut lister le système de fichiers disponible en utilisant la liste zfs :

[root@li1467-130 ~]# zfs list
NAME                           USED     AVAIL     REFER    MOUNTPOINT
testpool                         100M       2.67G       19K         /testpool
testpool/professors        31K     1024M   20.5K        /testpool/professors
testpool/students        1.57M     98.4M   1.57M      /testpool/students

Nous pouvons détruire un système de fichiers en utilisant l'option destroy

zfs destroy <filesystem>

Compression

Nous allons maintenant comprendre comment fonctionne la compression dans ZFS. Avant de commencer à utiliser la compression, nous devons l'activer en utilisant 'set compression'

zfs set <compression=value> <filesystem|volume|snapshot>

Une fois cela fait, la compression et la décompression se produisent sur le système de fichiers à la volée de manière transparente.

Dans notre exemple, j'activerai la compression sur le répertoire des étudiants à l'aide de l'algorithme de compression lz4.

[root@li1467-130 ~]# zfs set compression=lz4 testpool/students

Je vais maintenant copier un fichier de taille 15 Mo dans ce système de fichiers et vérifier la taille une fois qu'il est copié.

[root@li1467-130 /]# cd /var/log
[root@li1467-130 log]# du -h secure
15M secure

[root@li1467-130 ~]# cp /var/log/secure /testpool/students/

[root@li1467-130 students]# df -h .
Filesystem               Size     Used   Avail    Use%      Mounted on
testpool/students   100M   1.7M   99M        2%      /testpool/students

Notez que la taille utilisée dans le système de fichiers n'est que de 1,7 Mo alors que la taille du fichier était de 15 Mo. Nous pouvons également vérifier le taux de compression.

[root@li1467-130 ~]# zfs get compressratio testpool
NAME      PROPERTY         VALUE            SOURCE
testpool    compressratio     9.03x                     -

Quotas et réservation

Permettez-moi d'expliquer les quotas avec un exemple concret. Supposons que nous ayons besoin dans une université de limiter l'espace disque utilisé par le système de fichiers pour les professeurs et les étudiants. Supposons que nous devions allouer 100 Mo aux étudiants et 1 Go aux professeurs. Nous pouvons utiliser des "quotas" dans ZFS pour répondre à cette exigence. Les quotas garantissent que la quantité d'espace disque utilisée par un système de fichiers ne dépasse pas les limites définies. La réservation permet d'allouer et de garantir que la quantité d'espace disque requise est disponible pour le système de fichiers.

zfs set quota=<value> <filesystem|volume|snapshot>

zfs set reservation=<value> <filesystem|volume|snapshot>
[root@li1467-130 ~]# zfs set quota=100M testpool/students
[root@li1467-130 ~]# zfs set reservation=100M testpool/students
[root@li1467-130 ~]# zfs list
NAME                          USED      AVAIL    REFER    MOUNTPOINT
testpool                        100M       2.67G       19K        /testpool
testpool/professors      19K       2.67G        19K       /testpool/professors
testpool/students      1.57M       98.4M    1.57M    /testpool/students

[root@li1467-130 ~]# zfs set quota=1G testpool/professors
[root@li1467-130 ~]# zfs list
NAME                           USED     AVAIL    REFER    MOUNTPOINT
testpool                         100M     2.67G       19K          /testpool
testpool/professors       19K    1024M       19K         /testpool/professors
testpool/students       1.57M    98.4M    1.57M       /testpool/students

Dans l'exemple ci-dessus, nous avons alloué 100 Mo aux étudiants et 1 Go aux professeurs. Observez la colonne 'AVAIL' dans 'zfs list'. Au départ, ils avaient une taille de 2,67 Go chacun et après avoir défini le quota, les valeurs ont changé en conséquence.

Instantanés

Les instantanés sont une copie en lecture seule du système de fichiers ZFS à un moment donné. Ils ne consomment pas d'espace supplémentaire dans le pool zfs. Nous pouvons soit revenir au même état ultérieurement, soit extraire un seul fichier ou un ensemble de fichiers selon les besoins de l'utilisateur.

Je vais maintenant créer des répertoires et un fichier sous '/testpool/professors' à partir de notre exemple précédent, puis prendre un instantané de ce système de fichiers.

[root@li1467-130 ~]# cd /testpool/professors/

[root@li1467-130 professors]# mkdir maths physics chemistry

[root@li1467-130 professors]# cat > qpaper.txt
Question paper for the year 2016-17
[root@li1467-130 professors]# ls -la
total 4
drwxr-xr-x  5  root root    6   Mar 19 10:34 .
drwxr-xr-x  4  root root    4   Mar 19 09:59 ..
drwxr-xr-x  2  root root    2   Mar 19 10:33 chemistry
drwxr-xr-x  2  root root    2   Mar 19 10:32 maths
drwxr-xr-x  2  root root    2   Mar 19 10:32 physics
-rw-r--r--     1  root root  36   Mar 19 10:35 qpaper.txt

Pour prendre un instantané, utilisez la syntaxe suivante :

zfs snapshot <filesystem|volume@<snap>>
[root@li1467-130 professors]# zfs snapshot testpool/professors@03-2016
[root@li1467-130 professors]# zfs list -t snapshot
NAME                                             USED         AVAIL     REFER     MOUNTPOINT
testpool/professors@03-2016       0                -                20.5K          -

Je vais maintenant supprimer le fichier qui a été créé et l'extraire des instantanés

[root@li1467-130 professors]# rm -rf qpaper.txt
[root@li1467-130 professors]# ls
chemistry maths physics
[root@li1467-130 professors]# cd .zfs
[root@li1467-130 .zfs]# cd snapshot/03-2016/
[root@li1467-130 03-2016]# ls
chemistry maths physics qpaper.txt

[root@li1467-130 03-2016]# cp -a qpaper.txt /testpool/professors/
[root@li1467-130 03-2016]# cd /testpool/professors/
[root@li1467-130 professors]# ls
chemistry maths physics qpaper.txt

Le fichier supprimé est de retour à sa place.

Nous pouvons répertorier tous les instantanés disponibles à l'aide de la liste zfs :

[root@li1467-130 ~]# zfs list -t snapshot
NAME                                             USED     AVAIL    REFER    MOUNTPOINT
testpool/professors@03-2016    10.5K       -              20.5K       -

Enfin, détruisons l'instantané à l'aide de la commande zfs destroy :

zfs destroy <filesystem|volume@<snap>>
[root@li1467-130 ~]# zfs destroy testpool/professors@03-2016

[root@li1467-130 ~]# zfs list -t snapshot
no datasets available

Conclusion

Dans cet article, vous avez appris à installer ZFS sur CentOS 7 et à utiliser certaines commandes de base et importantes des utilitaires zpool et zfs. Cette liste n'est pas exhaustive. ZFS a beaucoup plus de fonctionnalités et vous pouvez les explorer plus en détail à partir de sa page officielle.


Cent OS
  1. Comment installer et utiliser PHP Composer sur CentOS 7

  2. Comment installer et utiliser ifconfig sur CentOS 7

  3. Comment installer et utiliser Docker sur CentOS 7

  4. Comment installer et utiliser Docker Compose sur CentOS 7

  5. Comment installer et utiliser TeamSpeak Server sur CentOS 7

Comment installer et utiliser SSHFS sur CentOS 7

Installer et utiliser Docker Compose sur CentOS 8

Installer et utiliser NoMachine Remote Desktop sur CentOS 8

Comment installer et utiliser TermRecord sur CentOS 8

Comment installer et utiliser TermRecord sur CentOS 8

Comment installer et utiliser Traceroute sur CentOS 7