Un cours (4 h) et un TP (3 h) sur les systèmes de fichiers et ZFS : le support de cours, le sujet des travaux pratiques et les machines virtuelles qui les accompagnent.
Supports
Les supports de cours sont téléchargeables ci-dessous. Il est nécessaire de terminer la lecture du cours avant de démarrer le TP. Toutes les informations nécessaires à la réalisation du TP sont intégralement contenues dans le cours.
Les travaux pratiques se font dans une machine virtuelle FreeBSD, disponible aux formats QCOW2 (QEMU, Proxmox) et VMDK (VirtualBox, VMware) ; ses empreintes SHA-256 sont dans le fichier de sommes de contrôle.
L'image est un FreeBSD préconfiguré :
- 15 disques d'exercice (
da0àda14, 12HDD
de 1 Go et 3SSD
de 250 Mo), simulés dans la VM et vierges à chaque démarrage ; - un compte
rootsans mot de passe, sur la console ou en ssh suivant l'hyperviseur — le serveur ssh est généralement joignable via la redirectionssh -p 2222 root@localhost.
Au premier démarrage, la VM s'initialise (agrandissement du disque système, création des disques simulés) puis redémarre automatiquement une fois : ce double démarrage est normal, attendez la fin du second avant de vous connecter.
- Machine virtuelle (QEMU, Proxmox) zfs-lab-15.1-amd64.qcow2 1,7 Gio qcow2
- Machine virtuelle (VirtualBox, VMware) zfs-lab-15.1-amd64.vmdk 1,7 Gio vmdk
- Sommes de contrôle CHECKSUM.SHA256.zfs-lab 201 o
- Machine virtuelle (VirtualBox) [Obsolète] ZFS_Training_13.ova 1,3 Gio ova
- Machine virtuelle (VirtualBox) [Obsolète] ZFS_Training_13_1.ova 1,4 Gio ova
Démarrer la machine virtuelle
QEMU
# Accélération possible: -accel kvm|hvf # Démarrage console : -display none -serial mon:stdio qemu-system-x86_64 -m 2048 -smp 2 \ -drive file=zfs-lab-15.1-amd64.qcow2,format=qcow2,if=virtio \ -netdev user,id=n0,hostfwd=tcp:127.0.0.1:2222-:22 \ -device virtio-net,netdev=n0
VirtualBox
# Le .vmdk est distribué compressé (streamOptimized). Il faut d'abord le déployer. VBoxManage clonemedium zfs-lab-15.1-amd64.vmdk zfs-lab.vmdk --format VMDK VBoxManage createvm --name zfs-lab --ostype FreeBSD_64 --register VBoxManage modifyvm zfs-lab --memory 2048 --cpus 2 --nic1 nat \ --natpf1 "ssh,tcp,127.0.0.1,2222,,22" VBoxManage storagectl zfs-lab --name SATA --add sata --controller IntelAhci VBoxManage storageattach zfs-lab --storagectl SATA --port 0 --device 0 \ --type hdd --medium zfs-lab.vmdk VBoxManage startvm zfs-lab --type gui # ou --type headless
Proxmox
# En réseau ponté la VM obtient sa propre adresse: ssh root@<adresse de la VM> vmid=900 # VMID : identifiant libre à choisir (voir : qm list) qm create $vmid --name zfs-lab --memory 2048 --cores 2 \ --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci qm importdisk $vmid zfs-lab-15.1-amd64.qcow2 local-lvm qm set $vmid --scsi0 local-lvm:vm-$vmid-disk-0 --boot order=scsi0 qm start $vmid
Historique
| Année | Événement |
|---|---|
| 2001 | Début du projet par deux ingénieurs de Sun Microsystems |
| 2005 | Diffusion du code source dans OpenSolaris (licence CDDL) |
| 2006 | Début du portage sous Linux via FUSE incompatibilité déclarée entre la licence CDDL et GPL |
| 2007 | Apple commence son portage sous Mac OS X |
| 2007 | NetApp attaque Sun pour violation de brevet (WAFL) |
| 2008 | ZFS est intégré à FreeBSD 7.0 |
| 2008 | Début d'un portage natif sous Linux (ZFS-on-Linux) |
| 2009 | Rachat de Sun Microsystems par Oracle |
| 2009 | Apple arrête l'intégration de ZFS à OS X le projet MacZFS continue à développer le code |
| 2010 | OpenSolaris est arrêté par Oracle le développement de ZFS continue de façon fermée |
| 2010 | Illumos, un fork d'OpenSolaris, est créé par la communauté le développement continue sous licence CDDL les portages de ZFS se basent sur la version d'Illumos |
| 2012 | Introduction de feature-flags(fin des numéros de version) facilite l'évolution du format sur-disque |
| 2013 | Prototype de ZFS pour Mac OS X, basé sur ZFS-on-Linux MacZFS va progressivement céder la place |
| 2013 | Début du projet OpenZFS coordonne le développement entre les plateformes |
| 2016 | Ubuntu 16.04 inclut par défaut ZFS-on-Linux |
| 2019 | Support du chiffrement |
| 2019 | FreeBSD rebase son code ZFS d'Illumos vers ZFS-on-Linux |
| 2020 | Base commune Linux/FreeBSD OpenZFS 2.0 |
| 2020 | zstd, L2ARC persistant |
| 2021 | dRAID |
| 2023 | Clonage de blocs, BLAKE3, réception corrective |
| 2025 | Extension raidz, fast dedup, E/S directes |
Exemples
Revenir à un checkpoint
# Import the pool read-only until the checkpoint
zpool import -o readonly=on --rewind-to-checkpoint tank
# Rewind the pool to the checkpoint, destroying data
zpool import --rewind-to-checkpoint tank
Envoi incrémental et reprise après interruption
# Envoi d'un flux incrémental de @yesterday à @today, incluant # les snapshots intermédiaires, sur la machine 'remote-host' # En cas d'erreur de transmission les données sont conservées zfs send -I @yesterday tank/data@today | ssh remote-host zfs recv -s pool/backup # La connexion réseau a été interrompue, récupère # le jeton permettant de reprendre la transmission token=$(zfs get -Hp receive_resume_token pool/backup | cut -f3) # Poursuite de la transmission à partir des informations # contenues dans le jeton zfs send -t $token | ssh remote-host zfs recv -s pool/backup # Ou suppression des données partiellement transférées # si l'on ne souhaite pas poursuivre zfs recv -A pool/backup