Documentation rédigée par : GADONNAUD Ewen
Formation : BTS SIO 1ère année - Option SISR
Établissement : Lycée Paul-Louis Courier, Tours
Date : Mars 2026
Environnement : Solaris 10 05/09 (Sun Microsystems) — VirtualBox 7.x — Windows 11
ZFS (Zettabyte File System) est un système de fichiers développé par Sun Microsystems, introduit dans Solaris 10 en 2006. Il se distingue des systèmes de fichiers classiques (ext4, NTFS) par une approche radicalement différente : ZFS fusionne le gestionnaire de volumes et le système de fichiers en une seule couche.
| Fonctionnalité | ZFS | ext4 / NTFS |
|---|---|---|
| Intégrité des données (checksums) | ✅ Sur chaque bloc | ❌ Inexistant |
| Snapshots natifs | ✅ Instantanés, sans coût | ❌ Inexistant nativement |
| RAID intégré (RAIDZ) | ✅ Oui | ❌ Non |
| Compression transparente | ✅ Par dataset | LZNT1 (NTFS) |
| Rollback instantané | ✅ Oui | ❌ Impossible |
| Détection de corruption silencieuse | ✅ Oui | ❌ Non |
ZFS ne modifie jamais les données en place. Lors d'une écriture :
Disques physiques
↓
zpool (ex: monpool)
↓
vdevs (mirror, raidz, stripe...)
↓
datasets (monpool/data, monpool/backups...)
↓
snapshots / clones
Le pool est la couche de base, il regroupe les disques physiques. Plusieurs modes de redondance sont disponibles :
| Mode | Description | Disques minimum | Espace utile |
|---|---|---|---|
| stripe | Pas de redondance, perf maximale | 1 | 100% |
| mirror | Copie identique sur 2 disques | 2 | 50% |
| RAIDZ1 | Équivalent RAID-5, tolère 1 panne | 3 | (n-1) × taille |
| RAIDZ2 | Équivalent RAID-6, tolère 2 pannes | 4 | (n-2) × taille |
Un dataset vit dans un pool et possède ses propres propriétés (compression, quota, etc.). Les propriétés sont héritées par les datasets enfants.
monpool/ ← pool racine monpool/data ← dataset monpool/backups ← dataset monpool/data/logs ← dataset enfant (hérite des propriétés de data)
zpool create monpool raidz /dev/dsk/c2t0d0 /dev/dsk/c2t1d0 /dev/dsk/c2t2d0
Vérification :
zpool status monpool zpool list
Résultat obtenu :
NAME SIZE USED AVAIL CAP HEALTH ALTROOT monpool 29,8G 189K 29,7G 0% ONLINE -
zfs create monpool/data zfs create monpool/backups zfs list
Résultat :
NAME USED AVAIL REFER MOUNTPOINT monpool 185K 19,5G 25,3K /monpool monpool/backups 24K 19,5G 24,0K /monpool/backups monpool/data 24K 19,5G 24,0K /monpool/data
ZFS supporte plusieurs algorithmes de compression transparente, activables par dataset :
| Algorithme | Taux | CPU | Usage recommandé |
|---|---|---|---|
| lzjb | Moyen | Quasi nul | Données actives (Solaris 10) |
| gzip-6 | Bon | Modéré | Usage général |
| gzip-9 | Excellent | Élevé | Archives, backups, données froides |
| lz4 | Bon | Quasi nul | Données actives (OpenZFS moderne) |
| zstd | Excellent | Faible | Recommandé (OpenZFS moderne) |
Configuration appliquée :
zfs set compression=lzjb monpool/data # données actives → algo rapide zfs set compression=gzip-9 monpool/backups # backups → compression maximale zfs get compression monpool/data monpool/backups
NAME PROPERTY VALUE SOURCE monpool/backups compression gzip-9 local monpool/data compression lzjb local
La valeur local indique que la propriété est définie directement sur le dataset. Un dataset enfant hériterait automatiquement de cette propriété.
Les quotas permettent de limiter l'espace consommé par un dataset :
zfs set quota=5g monpool/data zfs get quota monpool/data
Un snapshot est une photo instantanée de l'état d'un dataset à un instant T. Grâce au CoW, il est créé instantanément et ne consomme aucun espace au moment de sa création — il grandit seulement au fur et à mesure que les données originales sont modifiées.
# Copie de fichiers test cp /etc/passwd /monpool/data/ cp /etc/hosts /monpool/data/ # Snapshot de l'état actuel zfs snapshot monpool/data@v1 # Suppression des fichiers rm /monpool/data/passwd /monpool/data/hosts # Rollback instantané vers le snapshot zfs rollback monpool/data@v1 # Les fichiers sont de retour ls /monpool/data/ hosts passwd
Un clone est un dataset inscriptible créé à partir d'un snapshot. Contrairement à une copie classique :
zfs clone monpool/data@v1 monpool/data-clone ls /monpool/data-clone/ hosts passwd
zfs list -o name,used,refer monpool/data@v1 monpool/data-clone
NAME USED REFER monpool/data@v1 21,3K 27,3K monpool/data-clone 23,3K 28,0K
Les blocs de hosts et passwd sont partagés entre le snapshot et le clone — ils ne comptent pas deux fois sur le disque.
Le scrub est le mécanisme de vérification d'intégrité de ZFS. Il lit chaque bloc du pool, recalcule les checksums et les compare. Sur un pool miroir ou RAIDZ, il peut autocorriger les erreurs en lisant la copie saine.
zpool scrub monpool zpool status monpool
Résultat :
scrub completed avec 0 erreurs
crontab -e # Scrub automatique tous les dimanches à 2h 0 2 * * 0 /usr/sbin/zpool scrub monpool
| Commande | Description |
|---|---|
zpool create <pool> raidz /dev/dsk/… | Créer un pool RAIDZ1 |
zpool status | État du pool et des disques |
zpool list | Liste des pools et espace disponible |
zpool scrub <pool> | Lancer une vérification d'intégrité |
zfs create <pool/dataset> | Créer un dataset |
zfs list | Lister les datasets |
zfs set <propriété>=<valeur> <dataset> | Définir une propriété |
zfs get <propriété> <dataset> | Lire une propriété |
zfs snapshot <dataset>@<nom> | Créer un snapshot |
zfs rollback <dataset>@<nom> | Rollback vers un snapshot |
zfs clone <dataset>@<snap> <destination> | Créer un clone |
— Ewen 2026/03/15