Le système de fichiers ZFS
- Mise à jour le 26 mai 2022
Présentation
D'après wikipédia, ZFS pour Z File System, est un système de fichiers open source sous licence CDDL.
Produit par Sun Microsystems (société rachetée par Oracle en 2009), il a été conçu par l'équipe de Jeff Bonwick.
Les caractéristiques de ce système de fichiers sont sa très haute capacité de stockage, l'intégration de tous les concepts précédents concernant les systèmes de fichiers et la gestion de volume en un seul produit. Il intègre la structure On-Disk, il est léger et permet facilement la mise en place d'une plate-forme de gestion de stockage.
Principales Caractéristiques
- Grande capacité de stockage
- Volume management
- Intégrité des données
- Clichés instantannés
- Déduplication
- Compression
Installation
Suivre les instructions pour debian sur le site zfsonlinux : http://zfsonlinux.org
Commandes
Création d'un pool ZFS
- On récupère les ids des disques (ids ou chemins) :
root@host:~# ls -lah /dev/disk/by-id/
root@host:~# ls -lah /dev/disk/by-path/
- Créer un point de montage :
root@host:~# mkdir /zfs
- Créer un RAID 0 avec trois disques :
root@host:~# zpool create -f -m <mount_point> <pool_name> <type> <id1> <id2> <id3>
root@host:~# zpool create -f -o ashift=12 -m /zfs raid0_01 mirror scsi-SATA_WDC_WD20EARS-07_WD-WCAZA796741 scsi-SATA_WDC_WD20EARS-07_WD-WCAZB7569258 scsi-SATA_WDC_WD20EARS-07_WD-WCPZB7464217
create
: Création d'un pool-f
: Force la création d'un pool. (Pour éviter l'erreur "EFI label error".-o ashift=12
: aligner le zpool sur la taille des clusters (les disques actuels sont à 4K ou 8k et non pas 512k).-m
: Point de montage. Si non spécifié, le pool se montera sur /.pool_name
: Le nom du pool.type
: Type de pool. Exemple : mirror (raid0), raidz3, raidz2 etc...ids
: Les noms des disques composants le pool récupérés dans /dev/disk/by-id.
- Ajout d'un disque de spare :
root@host:~# zpool add tank spare ada12
- Lister les pool :
root@host:~# zpool list
- Afficher l'historique des commandes d'un pool :
root@host:~# zpool history raid0_01
- Modifier le point de montage du pool :
root@host:~# zfs set mountpoint=/zfs raid0_01
- Si le volume zfs ne monte pas sur un nouveau système :
root@host:~# zpool export raid0_01
root@host:~# zpool import -a
- Ou
root@host:~# zpool import -f raid0_01
- Désactiver les atime :
root@host:~# zfs set atime=off <pool>
- Activer la compression lz4 :
root@host:~# zfs set compression=lz4 <pool>
- Activer la compression zstd :
root@host:~# zfs set compression=zstd <pool>
- Supprimer un pool :
⚠️ Toutes les données seront effacées ⚠️
root@host:~# zfs destroy <pool>
Maintenance
Vérification des données (équivalent à chkdsk)
- Lancer une vérifcation :
root@host:~# zpool scrub raid0_01
- Pour voir l'avancement
root@host:~# zpool status
- Effacer les journaux :
root@host:~# zpool clear raid0_01
Afficher toutes les options
root@host:~# zfs get all <pool>
Remplacer un disque dans un RAID :
root@host:~# zpool replace pool1 ata-WDC_WD80EFZX-18ZW3NB_Z3K44HMB ata-ST8000DM002-1ZW212_ZX41X5MS
Monitoring
Afficher toutes les infos d'un pool
root@host:~# zpool get all raid0_01
infos sur l'état de la partition
root@host:~# zpool status -v raid0_01
infos sur les IOs
root@host:~# zpool iostat <seconde rafraichissement> <nombre de sortie>
root@host:~# zpool iostat 5 10
Chiffrement
Chiffrement avec dm-crypt
Dans les version récente de zfs on pourra utiliser le chiffrement natif (lors de la création du pool).Chiffrement des disques
root@host:~# cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha1 --iter-time 1000 --use-urandom -v luksFormat /dev/sdb1
root@host:~# cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha1 --iter-time 1000 --use-urandom -v luksFormat /dev/sdc1
root@host:~# cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha1 --iter-time 1000 --use-urandom -v luksFormat /dev/sdd1
Ouverture des disques
root@host:~# cryptsetup luksOpen /dev/sdb1 zfs01
root@host:~# cryptsetup luksOpen /dev/sdc1 zfs01
root@host:~# cryptsetup luksOpen /dev/sdd1 zfs01
Création de notre pool ZFS
root@host:~# zpool create -f -m /zfs raid0_01 mirror /dev/mapper/zfs01 /dev/mapper/zfs02 /dev/mapper/zfs03
Chiffrement natif
Création du pool
root@host:~# zpool create -f -m /zfs raid0_01 pci-0000:03:00.0-scsi-0:0:1:0-part1
Création dataset avec chiffrement
root@host:~# zpool create -o encryption=on -o keyformat=passphrase raid0_01/dataset01
sources : linuxfr.org