ZFS on Debian and ZFS administration
https://pthree.org/2012/04/17/install-zfs-on-debian-gnulinux/
ZFS Tuning guide on FreeBSD?
https://wiki.freebsd.org/ZFSTuningGuide
ZFS Remote Mirrors for Home Use & FreeBSD?
Use ZFS to backup export your files remotely [with FreeBSD?] : https://github.com/hughobrien/zfs-remote-mirror
Update: ZFS using the next-gen filesystem on Linux
Another article : http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/
2014-02-23 23:39:43
ZFS-Fuse sur Linux Debian (Lenny)
Time-stamp: <2010-04-07 16:31:50 cmic>
Sur Debian Lenny, installer fuse : zfs-fuse libaio libattr1-dev scons (pour compiler zfs-fuse)
- fuse est un module lance par insmod (visible pas lsmod)
- compilation de zfs-fuse et installation dans /usr/local/sbin
- lancer le daemon zfs-fuse:
#/usr/local/sbin/zfs-fuse
NB: pour remonter un pool deja installe faire un zpool import. Le fichier /etc/zfs/zpool.cache maintient la liste des zpools courant. Mais si on fait un zpool export, ce fichier disparait. La config est peut-être sauvegardée dans un secteur du disque ? FIXME
NB: la doc sur https://docs.oracle.com/cd/E26505_01/pdf/E37384.pdf
(copie sur www.cmic/be/download/cmic/)
Infos
- toutes les metadata zfs sont en dynamique
- donc df -g donne l'information d'estimation du nombre de fichiers restant (p54)
- zfs est un fs transactionnel
- les montages n'apparaissent plus dans /etc/vfstab (ou /etc/fstab)
- utilisation des ACLs NFSv4 (mais pas sous Linux...)
Premier galop.
hda : disque Debian (partitions non utilisees : hda3 et hda4
hdb : autre disque sans rien.
hdd : idem.
#fdisk -l /dev/hda
Device Boot Start End Blocks Id System
/dev/hda1 * 1 729 5855661 83 Linux
/dev/hda2 730 972 1951897+ 82 Linux swap / Solaris
/dev/hda3 973 2796 14651280 83 Linux
/dev/hda4 2797 4998 17687565 83 Linux
#fdisk -l /dev/hdb
Device Boot Start End Blocks Id System
/dev/hdb1 * 1 6 48163+ 83 Linux
/dev/hdb2 7 260 2040255 82 Linux swap / Solaris
/dev/hdb3 261 4863 36973597+ 83 Linux
#zpool create tank /dev/hdb3
#zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 35,2G 25,8M 35,2G 0% ONLINE -
..le pool est monté sur /tank
#zpool status
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
hdb3 ONLINE 0 0 0
errors: No known data errors
#zpool history => liste de toutes operations effectuees sur les pools
#zfs create tank/mytest
... creation d'un systeme de fichier dans /tank/mytest
#zfs mount
tank/mytest /tank/mytest
..on peut copier des fichiers
#cp /sbin/* /tank/mytest
#df -h
Sys. de fich. Tail. Occ. Disp. %Occ. MontÃ?© sur
/dev/hda1 5,5G 3,5G 1,8G 67% /
tmpfs 443M 0 443M 0% /lib/init/rw
udev 10M 708K 9,4M 7% /dev
tmpfs 443M 0 443M 0% /dev/shm
tank/mytest 35G 26M 35G 1% /tank/mytest
Pour supprimer ce fs :
1- demonter
#zfs umount /tank/mytest
NB : remontage par zfs mount tank/mytest
2- supprimer le pool (et supression du répertoire /tank)
#zpool destroy tank
Modifier un pool (ajouter de l'espace)
- on ne peut pas faire un shrink d'un pool
#zpool create tank /dev/hda3
.. operations diverses zfs create, cp fichiers, etc.
#zpool add tank /dev/hdb3
#zpool status
pool: tank
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
hdb2 ONLINE 0 0 0
hda3 ONLINE 0 0 0
errors: No known data errors
Quotas (p194)
#zfs set quota=10M /tank/aa
#zfs list => on voit les quotas
- quota et reservation => par file system et tout ses descendants
- refquota et ref reservation =>par filesystem pour data *et* snapshots
- userquota et groupquota => par utilisateur ou par groupe, pas d'heritage sur les fs enfants
#zfs userspace tank/aa => liste des quotas
Snapshots (p.201)
zorro:/tank# ls -l
total 5
drwxr-xr-x 2 bdurant users 2 avr 8 11:48 bdupont
drwxr-xr-x 2 bdurant users 2 avr 8 11:48 bdurant
drwxr-xr-x 4 cmic users 5 avr 8 11:56 cmic
#zfs snapshot tank/cmic@12h
NB: normalement existence de /tank/cmic/.zfs pour le snapshot ?
modif des fichiers dans /tank/cmic, puis recuperation du snapshot
#zfs rollback tank/cmic@12h
Restauration possible uniquement du dernier snapshot !! Restauration par fichier: utiliser les clones.
#zfs snapshot -r tank@1419 => snapshots de tous les sous-fs de /tank
(recursivite). Evidemment: #zfs destroy -r tank@1419
#zfs destroy tank/cmic@12h
#zfs rename tank/cmic12h tank/cmic@midi (rename dans un meme fs)
#zfs list snapshot
Clones (p. 208)
- pas de consommation d'espace disque
- creation du clone a partir du snapshot
- donc ne pas faire de zfs destroy du snapshot tant que le clone est utilisé
zorro:~# zfs create tank/aa
zorro:~# zfs snapshot tank/cmic@1348
zorro:~# zfs snapshot tank/cmic@1350
zorro:~# zfs clone tank/cmic@1348
zorro:~# zfs clone tank/cmic@1348 tank/aa/clonecmic
cmic$ rm /tank/cmic/
- le repertoire /tank/aa/clonecmic contient les memes fichiers que le snapshot tank/cmic@1248. Ce qui permet de récuperer un fichier parmi n depuis le snapshot.
#zfs destroy tank/aa/clonecmic
#zfs destroy tank/cmic@1248
-zfs promote permet de remplacer un fs par un clone. Ensuite uin peut renommer le fs avec zfs rename
Send & receive snapshots (p. 213)
- send Envoie sur sur la sortie standard
- on peut de cette manière échanger des fs d'une machine a une autre.
#zfs send tank/cmi@1248 | ssh myhost zfs recv tank2/cmic2
ACLs (Solaris) (p. 221)
- utilisation des ACLs NFS4 (et pas des ACLs POSIX) comme sous windows NT
- utilisateion de chmod A=, ls -v etc. Sous Solaris, mais pas sous Linux...
delegated administation (p. 247)
- delegation aux utilisteurs de differents fonctions :create, destroy,mount, snapshot, ..
- groupes de permissions : permission sets
- ler permission suivent le pool en cas de migration du pool
- acces global aux delagations sur un pool
#zpool set delegation=off|on tank
- permission sur un dataset ou des descendants de ce dataset (option -d implicite)
#zfs allow cmic destroy,snapshot,rollback tank/cmic
#zfs allow tank/cmic
--
Local+Descendent permissions on (tank/cmic)
user cmic destroy,rollback,snapshot
- NB sous Linux, probleme de lancement de zfs et zpool FIXME
#zfs allow users snapshot tank/aa
- delegation non descendant-recursive option -l (local seul)
#zfs allow -l cmic snapshot tank/bdupont
- suppression des persmissions avec unallow
#zfs unallow cmic tank/cmic
Mirror, RAIDZ (p. 48)
- deux partitions ou disques identiques et creation d'un miroir took (ici deux part. de 100MB d'un meme hd)
#zpool create took mirror /dev/hd2 /dev/hdb3
#zpool status
pool: took
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
took ONLINE 0 0 0
mirror ONLINE 0 0 0
hdb2 ONLINE 0 0 0
hdb3 ONLINE 0 0 0
errors: No known data errors
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
took 97M 75K 96,9M 0% ONLINE -
- possibiliter d'augmenter/diminuer le nb de disques sur le miroir, mais il fera toujours la taille "de base" (attach detach)
#zpool attach tank /dev/hdb3 /dev/hdb4
.reconstructin du miroir (message resilvered)
#zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
took 97M 75K 96,9M 0% ONLINE -
- possiblite de faire un mirroir de disques entiers (formatté avec 1 partition)
#zpool create tank /dev/hdb /dev/hdd
- possiblite de faire un mirroir avec des disque entiers avec label BSD.
fdisk /dev/hdd -> s -> w
fdisk /dev/hdd -> detruire toutes les partitions sauf la 3
#zpool create tank miroir /dev/hdb /dev/hdd
Raidz raidz2
- on peut de la meme maniere que le miroir, creer un raidz ou raidz2 (double parité)
#zpool create tank raidz /dev/hdd /dev/hdb
- possible avec des partions (NB hda3 hda4 et hdb[1-4] et hdd[1-4] font toutes 100MB On peut donc creer un raidZ de (N-P)X bytes (N: nb partitions data, P: nb partitions parite, X taille de chaque partition)
#zpool create tank raidz /dev/hda3 /dev/hdb1 /dev/hdd1
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 290M 138K 290M 0% ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 85,9K 161M 24,0K /tank
- rajouter ensuite de l'espace disque (sur un raidz de 3 partitions on ne peut rajouter que 3 autres partitions)
#zpool add tank raidz /dev/hda4 /dev/hdb2 /dev/hdd2
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 89,9K 354M 24,0K /tank
NB: noter la difference de taille
- autre config avec 6 partitions à la creation
# zpool create tank raidz /dev/hda3 /dev/hdb1 /dev/hdb2 /dev/hdd1 /dev/hdd2 /dev/hdd3
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 580M 129K 580M 0% ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 99,6K 449M 29,9K /tank
NB cette fois-ci, avec 6 partitions de 100M, on obient 449MB utiles (au lieu de 354MB avec 3 partitions puis l'ajout de 3 partitions) pour zfs.
Import/export (p101)
1-#/usr/local/sbin/zfs-fuse
2-#zpool import tank
- avant d'arreter le serveur :
#zpool export tank
- on peut connaitre les pools importables en faisant
#zpool import
- possibilité de re-importer un pool destroyed !!
#zpool -import -Df tank
Performance
- utiliser le cache de l'OS (zfs-fuse -h)
#zfs-fuse -a 1000 -e 1000
NB: ce passage de paramètres est maintenant obsolete. Utiliser plutot les parametres suivants de /etc/zfs/zfsrc :
fuse-attr-timeout = 3600
fuse-entry-timeout = 3600
- Mise en place du script de demarrage dans /etc/init.d. Recopie dans les rep. avec la commande (Debian) /usr/sbin/update-rc.d.
Installation de zfs-fuse-0.6.9 avec dedup code. (la version 0.6.0 n'a pas le code dedup intégré) Utilisation :
Le code par defaultsdedup n'est interessant que di l'on dispose de beaucoup de ram. Ce code crée des tables de hachapar defaultsge des écritures par secteur pour eviter de recopier ce qui est deja ecrit sur le hd.
Getting zfs-fuse by git
Add the desired remote repositories to your local repository, e.g.
NB: rainemu is Emmanuel Anne git repo.
git remote add rainemu http://rainemu.swishparty.co.uk/git/zfs
git remote add MikeHommey? git://git.debian.org/users/glandium/zfs-fuse.git
Update your remotes (fetching any remote branches)
git remote -v update
Show the available remote branches
git branch -r
From here you can take several routes, depending on the task at
hand. Some typical examples of tasks would be:
Create a local branch to track the remote ('upstream') one:
git checkout -b myfeaturebranch MikeHommey?/featurebranch
Rebase your patch(es) onto the remote branch so the remote maintainer
can easily merge your changes into his branch:
git checkout my-fixes-branch
git rebase remote/maintained
Pull changes from the tracked remote branch:
git remote update remotename
git pull
Merge changes from another remote branch:
git checkout my-branch
git merge --ff --no-commit remote/otherbranch
Note:
- passing --ff tries to pull commits that are compatible without
rebasing them. This is actually not a merge but a copy of
commits. You could --ff-only if you knew everything should be a
fast forward (your branches have shared ancestors and haven't
diverged).
- --no-commit allows you to review the changes (git diff --cached
and git log --merge) before actually committing the merge on
your branch
2010-06-25 16:17:14 -- Cmic
Why ZFS is better than btrfs
Un article http://rudd-o.com/linux-and-free-software/ways-in-which-zfs-is-better-than-btrfs qui en parle..
2012-05-16 10:36:43 -- Cmic
|