Sur cette page
- Prérequis :
ZFS est un système de fichiers et un gestionnaire de volumes logiques combinés. Les fonctionnalités de ZFS incluent la protection contre la corruption des données, la prise en charge de capacités de stockage élevées, une compression efficace des données, l'intégration du système de fichiers et du concept de gestion des volumes, les instantanés et les clones de copie sur écriture, la vérification continue de l'intégrité et la réparation automatique, RAID-Z et natif ACL NFSv4.
ZFS a été initialement implémenté en tant que logiciel open source, sous licence sous la licence commune de développement et de distribution (CDDL).
Lorsque nous parlons du système de fichiers ZFS, nous pouvons souligner les concepts clés suivants :
- Intégrité des données.
- Administration simple du stockage avec seulement deux commandes :zfs et zpool.
- Tout peut être fait pendant que le système de fichiers est en ligne.
Pour un aperçu complet et une description de toutes les fonctionnalités disponibles, consultez cet article détaillé de wikipedia.
Dans ce tutoriel, je vais vous guider pas à pas dans l'installation du système de fichiers ZFS sur Debian 8.1 (Jessie). Je vais vous montrer comment créer et configurer des pools en utilisant raid0 (bande), raid1 (Miroir) et RAID-Z (Raid avec parité) et expliquer comment configurer un système de fichiers avec ZFS.
D'après les informations du site Web www.zfsonlinux.org, ZFS n'est pris en charge que sur l'architecture AMD64 et Intel 64 bits (amd64). Commençons par la configuration.
Prérequis :
- Debian 8 avec noyau 64 bits.
- privilèges racine.
Étape 1 - Mettre à jour le référentiel et mettre à jour le système Debian Linux
Pour ajouter le référentiel zfsonlinux à notre système, téléchargez et installez le package zfsonlinux comme indiqué ci-dessous. Cela ajoutera les fichiers /etc/apt/sources.list.d/zfsonlinux.list et /etc/apt/trusted.gpg.d/zfsonlinux.gpg sur votre ordinateur. Ensuite, vous pouvez installer zfs comme n'importe quel autre paquet Debian avec la commande apt-get. Un autre avantage de l'utilisation du référentiel zfsonlinux est que vous obtenez automatiquement les mises à jour en exécutant "apt-get update &&apt-get upgrade".
Connectez-vous au serveur Debian avec un accès SSH, devenez utilisateur root, puis exécutez les commandes suivantes.
# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get update
Étape 2 - Installer zfsonlinux
Zfsonlinux a de nombreuses dépendances logicielles qui sont automatiquement installées par apt. Ce processus prendra un certain temps. Une fois l'installation terminée, redémarrez le serveur.
# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r now
Étape 3 - Créer et configurer un pool
Une fois le serveur redémarré, vérifiez que zfsonlinux est installé et fonctionne correctement.
# dpkg -l | grep zfs
ii debian-zfs 7 ~ jessie amd64 natif de fichiers zfs natif métapackage pour Debian.
ii libzfs2 0.6.5.2-2 AMD64 Native Zfs Library pour Linux
II ZFS-DKMS 0.6.5.2 -2 Modules de noyau de fichiers ZFS natifs pour Linux
II ZFSONLINUX 6 Tous archive.zfsonlinux.org Trust Package
II ZFSUTILS 0.6.5.2-2-2 AMD64 OUTILS DE LIGNE DE COMMANDE Pour gérer ZFS FileSystems
Le résultat ci-dessus montre que zfs sur Linux est déjà installé, nous pouvons donc continuer avec la création du premier pool.
J'ai ajouté cinq disques à ce serveur, chacun d'une taille de 2 Go. Nous pouvons vérifier les disques disponibles avec cette commande :
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
Nous pouvons voir que nous avons /dev/sda jusqu'à ce que /dev/sdg, /dev/sda soit utilisé pour le système d'exploitation Debian Linux Jessie 8.1. Nous utiliserons /dev/sdb jusqu'à /dev/sdg pour le système de fichiers ZFS.
Maintenant nous pouvons commencer à créer le pool, pour le premier je vais vous montrer comment créer un raid0 (stripe).
# zpool list
aucun pool disponible
# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0 % 0% 1.00 x EN LIGNE -
La commande "zpool list" montre que nous avons créé avec succès un pool zfs raid0, le nom du pool est pool0 et la taille est de 2 Go.
Ensuite, nous allons créer un raid1 (miroir) avec les autres disques.
# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0 0 % 1,00x EN LIGNE -
pool1 1,98 G 64 K 1,98 G - 0 % 0 % 1,00x EN LIGNE -
Nous pouvons voir que nous avons maintenant deux pools, pool0 pour raid0 et pool1 pour raid1.
Pour vérifier l'état du pool, nous pouvons utiliser la commande ci-dessous :
# zpool status
pool :pool0
état :ONLINE
scan :aucun demandé
config :
NAME STATE READ WRITE CKSUM
pool0 EN LIGNE 0 0 0
sdb EN LIGNE 0 0 0
erreurs :aucune erreur de données connue
pool :pool1
état :EN LIGNE
SCAN:Aucune demandée
Config:
Nom State Read Write Cksum
Pool1 Online 0 0 0
Mirror-0 Online 0 0 0
SDC en ligne 0 0 0
sdd EN LIGNE 0 0 0
erreurs :aucune erreur de données connue
Nous pouvons vérifier l'état du pool avec la commande "zpool status". Nous pouvons voir la différence entre pool0 et pool1, pool0 n'a qu'un seul disque et pool1 a deux disques et l'état des disques est miroir (mirror-0).
Ensuite, nous allons créer un pool avec RAID-Z, RAID-Z est un schéma de distribution de données/parité comme RAID-5, mais il utilise une largeur de bande dynamique :chaque bloc a sa propre bande RAID, quelle que soit la taille du bloc, ce qui fait que chaque écriture RAID-Z est une écriture sur bande complète.
RAID-Z nécessite un minimum de trois disques durs et est en quelque sorte un compromis entre RAID 0 et RAID 1. Dans un pool RAID-Z :si un seul disque de votre pool meurt, remplacez simplement ce disque et ZFS reconstruira automatiquement les données sur la base des informations de parité des autres disques. Pour perdre toutes les informations de votre pool de stockage, deux disques devraient mourir. Pour rendre la configuration du disque encore plus redondante, vous pouvez utiliser RAID 6 (RAID-Z2 dans le cas de ZFS) pour obtenir une double parité.
Créons d'abord un pool RAID-Z avec une parité.
# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5.94G 117K 5.94G - 0 % 1,00 x EN LIGNE -
# zpool status poolz1
pool :poolz1
état :EN LIGNE
analyse :aucune requête
config :
NAME STATE READ WRITE CKSUM
Cette br />errors :aucune erreur de données connue
# df -h /poolz1
Système de fichiers Taille Utilisé Disponible Utilisation % Monté sur
poolz1 3,9 G 0 3,9 G 0 % /poolz1
Comme nous pouvons le voir, df -h montre que notre pool de 6 Go a maintenant été réduit à 4 Go, 2 Go sont utilisés pour conserver les informations de parité. Avec la commande zpool status, nous voyons que notre pool utilise maintenant RAID-Z.
Ensuite, nous allons créer RAID-Z2 (raid 6), pour cela nous devons supprimer le pool existant car il n'y a plus de disques disponibles. Supprimer un pool est très simple, nous pouvons utiliser la commande zpool destroy pour cela.
# Zpool Liste
Nom Taille alloc Free Expandsz Frag Cap Dedup Health Altroot
Pool0 1,98G 64K 1.98G - 0% 0% 1.00x en ligne -
Pool1 1.98G 64K 1.98G - 0 0 % 1,00x EN LIGNE -
poolz1 5,94 G 117 K 5,94 G - 0 % 0 % 1,00x EN LIGNE -
# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
aucun pool disponible
Maintenant, tous nos zpools ont disparu, nous pouvons donc créer un pool RAID-Z2.
# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G - 0 EN LIGNE -
# df -h /poolz2
Système de fichiers Taille Utilisé Disponible Utilisation % Monté sur
poolz2 3,9 G 0 3,9 G 0 % /poolz2
# zpool status poolz2
pool :poolz2
état :EN LIGNE
analyse :aucune requête
config :
NAME STATE READ WRITE CKSUM
/> Poolz2 en ligne 0 0 0
raidz2-0 en ligne 0 0 0
sdb en ligne 0 0 0
sdc en ligne 0 0 0
sdd en ligne 0 0 0
sde EN LIGNE 0 0 0
erreurs :aucune erreur de données connue
Comme nous pouvons le voir, df -h montre que notre pool de 8 Go a maintenant été réduit à 4 Go, puisque 4 Go sont utilisés pour contenir deux fois les informations de parité. Avec la commande "zpool status", nous voyons que notre pool utilise maintenant RAID-Z2.
Étape 4 – Simuler une panne de disque
Dans cette étape, nous allons simuler une panne de disque catastrophique (c'est-à-dire que l'un des disques durs du zpool cesse de fonctionner).
Créez un fichier dans le poolz2 et assurez-vous que nous pouvons y accéder.
# echo "Test uniquement"> /poolz2/test.txt
# cat /poolz2/test.txt
Test uniquement
Avant de simuler l'échec :vérifiez l'état de poolz2 et assurez-vous que l'état est en ligne et que l'état de tous les disques est en ligne.
L'échec est simulé en écrivant des données aléatoires avec la commande dd dans /dev/sdb .
# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
pool :poolz2
state :Statut EN LIGNE
:un ou plusieurs appareils ont rencontré une erreur irrécupérable. Une
tentative a été effectuée pour corriger l'erreur. Les applications ne sont pas affectées.
action :déterminez si l'appareil doit être remplacé et effacez les erreurs
à l'aide de « zpool clear » ou remplacez l'appareil par « zpool replace ».
voir :http ://zfsonlinux.org/msg/ZFS-8000-9P
scan :17 Ko réparés en 0h0m avec 0 erreur le mardi 8 décembre 22:37:49 2015
config :
Nom State Read Write Cksum
Poolz2 en ligne 0 0 0
raidz2-0 en ligne 0 0 0
sdb en ligne 0 0 25
sdc en ligne 0 0 0
sdd en ligne 0 0 0
sde EN LIGNE 0 0 0
erreurs :aucune erreur de données connue
Nous pouvons maintenant voir qu'un ou plusieurs disques ont rencontré une erreur irrécupérable, nous devons donc remplacer le disque. Dans ce cas, nous remplaçons le disque /dev/sdb par /dev/sdf.
# zpool replace poolz2 sdb sdf
# zpool status
pool :poolz2
état :ONLINE
scan :réargenté 49,5 K en 0h0m avec 0 erreur le mar. décembre 8 22 :43:35 2015
Config:
Nom State Read Write Cksum
Poolz2 en ligne 0 0 0
raidz2-0 en ligne 0 0 0
sdf en ligne 0 0 0
sdc en ligne 0 0 0
sdd en ligne 0 0 0
sde online 0 0 0
Erreurs:aucune erreur de données connue
Après avoir remplacé /dev/sdb par /dev/sdf, l'erreur a disparu et nous pouvons toujours accéder au fichier de test que nous avons créé auparavant.
# cat /poolz2/test.txt
Test uniquement
Jusqu'à cette étape, nous savons comment créer et configurer un zpool.
Étape 5 - Créer et configurer le système de fichiers ZFS
Dans l'étape suivante, nous apprendrons comment créer et configurer le système de fichiers ZFS.
# liste zfs
NOM UTILISÉ DISPONIBLE REFER POINT DE MONTAGE
poolz2 105K 3.83G 26.1K /poolz2
Nous avons déjà un système de fichiers ZFS, celui-ci est automatiquement ajouté lorsque nous créons le zpool. Nous allons maintenant créer un autre système de fichiers ZFS.
# zfs create poolz2/tank
# zfs list
NOM UTILISÉ UTILISÉ DISPONIBLE /poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 128K 3.9G 1 % /poolz2
poolz2/tank 3.9G 128K 3.9G 1% /poolz2/tank
Très facile non ? Nous créons un nouveau système de fichiers ZFS appelé tank et le montons automatiquement en tant que /poolz2/tank.
Comment créer un point de montage personnalisé pour un système de fichiers ZFS ? Utilisez la commande ci-dessous :
# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0 % /poolz2
poolz2/tank 3.9G 0 3.9G 0 % /poolz2/tank
poolz2/data 3.9G 0 3.9G 0 % /data
Comment modifier le point de montage existant ? Nous pouvons le faire avec la commande ci-dessous :
# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0 % /poolz2
poolz2/data 3.9G 0 3.9G 0 % /data
poolz2/tank 3.9G 0 3.9G 0 % /tankPour monter et démonter un système de fichiers, utilisez la commande ci-dessous :
# zfs unmount /data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0 % /poolz2
poolz2/réservoir 3.9G 0 3.9G 0 % /réservoir# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0 % /poolz2
poolz2/tank 3.9G 0 3.9G 0 % /tank
poolz2/data 3.9G 0 3.9G 0 % /dataSupprimer un système de fichiers zfs est très simple, nous pouvons utiliser la commande zfs destroy pour cela.
# zfs destroy poolz2/data
# zfs list
NOM UTILISÉ UTILISÉ DISPONIBLE
poolz2 152K 3,83 G 26,1K /poolz2
poolz2/tank 25,4K 3,83G 25,4K /réservoirLe système de fichiers /data a disparu.
Conclusion
Le système de fichiers ZFS est un nouveau système de fichiers révolutionnaire qui change fondamentalement la façon dont les systèmes de fichiers sont administrés sur les systèmes d'exploitation de type Unix. ZFS fournit des fonctionnalités et des avantages qui n'ont été trouvés dans aucun autre système de fichiers disponible aujourd'hui. ZFS est robuste, évolutif et facile à administrer.