Truenas Community peut être téléchargé ici: https://www.truenas.com/truenas-community-edition/
TrueNAS (anciennement FreeNAS) est un système d'exploitation open source développé par iXsystems, spécialement conçu pour le stockage réseau (NAS — Network Attached Storage). Il repose sur FreeBSD (TrueNAS CORE) ou Linux (TrueNAS SCALE) et utilise le système de fichiers ZFS comme fondation.
TrueNAS est utilisé dans les environnements :
Disques physiques
↓
vDev(s)
↓
Pool
↓
Dataset(s)
↓
Share(s)
Chaque niveau a un rôle précis. Il est crucial de comprendre ces distinctions avant de configurer TrueNAS.
Un Pool est l'unité de stockage de plus haut niveau dans TrueNAS. Il représente l'ensemble du stockage disponible, constitué d'un ou plusieurs vDevs (virtual devices). C'est l'équivalent d'un volume logique ou d'un groupe de disques.
tank, data, backup)Un pool nommé tank composé de 4 disques de 4 To en RAID-Z1 offrira environ 12 To d'espace utilisable (3 disques utiles, 1 en parité).
⚠️ Important : La configuration de redondance est définie au niveau du vDev, pas du pool lui-même.
Un vDev (Virtual Device) est le bloc de construction fondamental d'un pool ZFS. Il regroupe des disques physiques selon un niveau de redondance spécifique.
| Type de vDev | Disques min. | Redondance | Capacité utilisable |
|---|---|---|---|
| Stripe | 1+ | Aucune (risque élevé) | 100 % de la capacité totale |
| Mirror | 2 | 1 panne tolérée | 50 % (avec 2 disques) |
| RAID-Z1 | 3 | 1 disque en panne | (n-1) disques |
| RAID-Z2 | 4 | 2 disques en panne | (n-2) disques |
| RAID-Z3 | 5 | 3 disques en panne | (n-3) disques |
| dRAID | 2+ | Reconstruction rapide | Variable |
Un Dataset est une unité logique de stockage créée à l'intérieur d'un pool. C'est l'équivalent d'un dossier avec des propriétés ZFS indépendantes. Il permet d'organiser les données et d'appliquer des politiques spécifiques.
| Propriété | Description |
|---|---|
| Compression | lz4, zstd, gzip, off — compresse les données à la volée |
| Quota | Limite l'espace utilisable par ce dataset |
| Reservation | Garantit un espace minimum pour ce dataset |
| Snapshot | Copie instantanée en lecture seule de l'état du dataset |
| Atime | Met à jour l'horodatage d'accès (désactiver pour les perfs) |
| Dedup | Active/désactive la déduplication |
| Case sensitivity | Sensibilité à la casse des noms de fichiers |
| Recordsize | Taille des blocs (défaut 128K, à ajuster selon l'usage) |
tank/
├── tank/documents ← Dataset pour les docs, compression zstd
├── tank/media ← Dataset pour les médias, compression off
│ ├── tank/media/films
│ └── tank/media/musique
└── tank/vm ← Dataset pour les VM, recordsize 64K
Un zvol (ZFS Volume) est une alternative au dataset pour des usages nécessitant un périphérique bloc brut (ex. : iSCSI, disques de VM). Un dataset est un système de fichiers ; un zvol est un volume bloc.
Un Share expose un dataset (ou un dossier à l'intérieur d'un dataset) au réseau pour permettre l'accès par les clients. TrueNAS supporte plusieurs protocoles de partage.
| Protocole | Usage principal | OS compatibles |
|---|---|---|
| SMB | Partage Windows (CIFS) | Windows, macOS, Linux |
| NFS | Partage Unix/Linux | Linux, macOS, FreeBSD |
| iSCSI | Stockage bloc réseau (pour VMs, bases de données) | Tous (via initiateur iSCSI) |
| AFP | Partage Apple (déprécié dans TrueNAS SCALE) | macOS (ancienne génération) |
| WebDAV | Accès web via HTTP/HTTPS | Tous les navigateurs |
| Concept | Niveau | Rôle | Configuré dans |
|---|---|---|---|
| Pool | Physique | Agrège les vDevs, capacité totale | TrueNAS → Storage → Pools |
| vDev | Physique | Groupe de disques avec niveau de redondance | Lors de la création du pool |
| Dataset | Logique | Organisation des données, politiques ZFS | TrueNAS → Storage → Datasets |
| Share | Réseau | Expose un dataset sur le réseau | TrueNAS → Sharing |
ZFS (Zettabyte File System) est un système de fichiers et gestionnaire de volumes créé par Sun Microsystems en 2001, rendu open source en 2005. Il est aujourd'hui maintenu par le projet OpenZFS, qui supporte FreeBSD, Linux, macOS et d'autres systèmes.
ZFS n'est pas seulement un système de fichiers : c'est une combinaison d'un gestionnaire de volumes logiques (LVM) et d'un système de fichiers en une seule couche, ce qui lui confère des capacités uniques.
ZFS a été conçu avec un objectif simple : ne jamais perdre de données, même en cas de panne matérielle ou logicielle.
ZFS n'écrase jamais les données existantes. Lorsqu'un fichier est modifié :
Avantage : Si le système tombe en panne pendant une écriture, les anciennes données sont toujours intactes. Le système de fichiers ne peut jamais se retrouver dans un état incohérent — pas besoin de fsck.
AVANT modification :
[Bloc A] ← Pointeur
PENDANT modification (CoW) :
[Bloc A] [Bloc B (nouvelle version)]
↑ Pointeur (mis à jour atomiquement)
APRÈS :
[Bloc B] ← Pointeur
[Bloc A] (libéré)
Chaque bloc de données ZFS possède un checksum cryptographique (SHA-256, SHA-512, Skein, etc.) stocké dans les métadonnées du bloc parent.
Lors de chaque lecture, ZFS vérifie le checksum. Si le checksum ne correspond pas :
C'est la protection contre le silent data corruption, une faiblesse majeure de systèmes de fichiers traditionnels comme ext4 ou NTFS.
Un snapshot ZFS est une copie instantanée et en lecture seule de l'état d'un dataset à un instant T. Grâce au CoW :
# Créer un snapshot
zfs snapshot tank/documents@2024-01-15
# Lister les snapshots
zfs list -t snapshot
# Restaurer depuis un snapshot
zfs rollback tank/documents@2024-01-15
# Cloner un snapshot (créer un dataset modifiable à partir d'un snapshot)
zfs clone tank/documents@2024-01-15 tank/documents-clone
Usages pratiques :
zfs send / zfs receive)ZFS implémente sa propre gestion de la redondance RAID, sans dépendre des contrôleurs RAID matériels. Le RAID-Z résout des problèmes fondamentaux du RAID 5 traditionnel :
En RAID 5 classique, si le système tombe en panne pendant une écriture partielle, les données de parité peuvent devenir incohérentes → corruption. ZFS évite ce problème grâce au CoW : les nouvelles données sont écrites avant de mettre à jour les pointeurs.
| Critère | RAID 5 classique | RAID-Z1 ZFS |
|---|---|---|
| Write hole | Oui (risque réel) | Non (CoW élimine le risque) |
| Détection de corruption | Non | Oui (checksums) |
| Correction automatique | Partielle | Oui (si redondance) |
| Dépendance matérielle | Contrôleur RAID requis | Logiciel uniquement |
| Stripe size | Fixe | Variable (optimisé) |
ZFS utilise la RAM disponible comme cache de lecture intelligent appelé ARC (Adaptive Replacement Cache).
Lecture d'un fichier :
ARC (RAM) → L2ARC (SSD) → Disques (spinning ou NVMe)
Plus TrueNAS dispose de RAM, plus l'ARC est grand et plus les lectures répétées sont rapides. La règle générale : 1 Go de RAM par To de stockage (minimum).
Le ZIL (ZFS Intent Log) gère les écritures synchrones (opérations qui doivent être confirmées comme écrites sur disque avant de retourner à l'application).
Workloads bénéficiant d'un SLOG :
sync=alwaysZFS peut compresser les données à la volée avant de les écrire sur disque. La compression est transparente pour les applications.
| Algorithme | Ratio typique | Vitesse | Recommandation |
|---|---|---|---|
lz4 |
Moyen | Très rapide | Par défaut — recommandé pour tout |
zstd |
Élevé | Rapide | Données compressibles (docs, logs) |
gzip-1 |
Élevé | Moyen | Archivage |
gzip-9 |
Très élevé | Lent | Archivage froid |
off |
Aucun | Maximum | Médias déjà compressés (MP4, JPEG) |
La compression
lz4est souvent activée par défaut sur TrueNAS et peut en réalité accélérer les transferts en réduisant les I/O disque.
La déduplication ZFS détecte les blocs identiques et n'en stocke qu'une seule copie, avec des pointeurs vers cette copie unique.
zstd offre un bon ratio sans le coût en RAMUn scrub est une vérification complète de l'intégrité de toutes les données du pool. ZFS lit chaque bloc et vérifie son checksum, corrigeant automatiquement les erreurs si la redondance le permet.
# Lancer un scrub
zpool scrub tank
# Voir le statut d'un scrub en cours
zpool status tank
Fréquence recommandée : Hebdomadaire (configuré automatiquement dans TrueNAS).
zfs send / zfs receiveZFS permet de répliquer des datasets entiers (avec leur historique de snapshots) vers un autre système, localement ou via réseau. C'est la base de la sauvegarde 3-2-1 avec TrueNAS.
# Envoyer un snapshot vers un autre pool (local)
zfs send tank/documents@2024-01-15 | zfs receive backup/documents
# Réplication incrémentale (seules les différences sont envoyées)
zfs send -i tank/documents@ancien tank/documents@nouveau | zfs receive backup/documents
# Réplication réseau via SSH
zfs send tank/documents@snap | ssh user@remote zfs receive tank2/documents
Avantage : La réplication est efficace (seules les modifications depuis le dernier snapshot sont transférées) et atomique (le dataset de destination est toujours dans un état cohérent).
| Fonctionnalité | Bénéfice concret |
|---|---|
| Copy-on-Write | Pas de corruption lors d'une coupure de courant |
| Checksums | Détection et correction du bit rot (corruption silencieuse) |
| Snapshots | Sauvegardes instantanées, récupération rapide |
| RAID-Z | Redondance sans contrôleur matériel, sans write hole |
| ARC / L2ARC | Cache intelligent qui exploite toute la RAM disponible |
| Compression | Moins d'espace, souvent plus rapide qu'un FS non compressé |
| Réplication (send/recv) | Sauvegarde réseau efficace et cohérente |
| Self-healing | Correction automatique des erreurs si redondance disponible |
TrueNAS, appuyé sur ZFS, offre une solution de stockage robuste, flexible et orientée intégrité des données. La compréhension des quatre niveaux — pool, vDev, dataset, share — permet de concevoir une infrastructure de stockage efficace et adaptée aux besoins. ZFS, de son côté, est une technologie de premier plan qui allie gestion de volumes, système de fichiers et protection des données dans une solution unifiée.
*Cours rédigé pour le Cégep Ahuntsic par son excellence Pablo The God