Page 1 of 1

ZFS HELP

Posted: 16 Oct 2015 14:53
by ZiEg
Messieurs,

de retour après plusieurs semaines d'inactivité ici (construction de la maison et déménagement), je reviens vers vous avec une demande simple pour certains :
QUI peut m'expliquer ZFS (creation du ZFS sur mon NAS avec les BEST PRACTICES, les pools, les datasets, les snapshots.....) ?
Car je ne comprends pas grand chose et je vais monter un 2eme NAS pour faire du zrep entre les 2 car je viens de perdre lors du déménagement mon montage RAID précédent...... et évidemment 8 To de data perdues 5ou a peine moins..... je n'ai pas envie de refaire)

Merci de votre aide

Re: ZFS HELP

Posted: 16 Oct 2015 19:40
by ernie
Ou la, je laisse les experts expliqués la théorie du zfs.

Ma pratique:
- utiliser de la mémoire ECC, sinon risqué (possible mais risqué).
- avoir 1Go par To de stockage il me semble
- il faut bien y penser : veux tu du raid 1 (raidz1) ? du 2 ou du 3 ? J étais parti sur du 1 et je tenais à mes données et je suis passé au 2 (ce qui fait que jusque 2 Disques en panne cela fonctionne) . Le nas de back up via Zrep est en 1. Cela joue aussi sur la quantité de stockage disponible.


Comment ?
- formater tes disques via le menu formater et choisir le disque puis 'zfs format pool' pour le type de systèmes. Un message apparaîtra vers le bas te disant que c est terminé.
- ensuite tu dois aller dans le menu zfs pour créer successivement:
Un vdev, puis des datasets. Tu pourras y créer par la suite des répertoires.
Je reprends une image de mtiburs ou laster13: tu as une chambre (vdev) dans laquelle tu as une commode (datasets) qui contient des tiroirs pour ranger (répertoire).

Attention:
Zrep ne sauvegarde que des datasets donc il faut avoir cette structure.
Et Zrep gere lui même les snapshots. Donc ne pas mettre d auto snapshots.

J ai eu du mal à passer le cap mais le forum m a aidé et maintenant cela tourne sans problème et 24h/24h.

Re: ZFS HELP

Posted: 17 Oct 2015 00:23
by mtiburs
Salut,
ernie wrote:Je reprends une image de mtiburs ou laster13: tu as une chambre (vdev) dans laquelle tu as une commode (datasets) qui contient des tiroirs pour ranger (répertoire).
J'ai dis çà moi :o ???, si oui, je dirais en fait que "la chambre c'est plutôt le pool".
Mais en fait il n'y a pas vraiment de comparaison possible, car comment expliquer le miroir ou autre ... c'était après un apéro sans doute :lol:

Avant de donner ma méthode, il faut se poser la question du choxi:
- entrelacé ? (à éviter sauf si on a un bon clône)
- miroir ?
- raidz1 raidz2 ?

Je voudrais essayer un de ces jours la différence de performances sur le miroir et le raidz, car je ne la connais pas, je suis sûr d'au moins une chose, la lecture se comporte comme un entrelacement (ce qui donne de bonnes perf), pour l'écriture, je pense que c'est un peu inférieur à un disque unique.

Normalement, il faut faire comme dit Ernie, soit
Comment ?
- formater tes disques via le menu formater et choisir le disque puis 'zfs format pool' pour le type de systèmes. Un message apparaîtra vers le bas te disant que c est terminé.
- ensuite tu dois aller dans le menu zfs pour créer successivement:
Un vdev, puis des datasets.
mais, ... là gros ... moment de honte, je bloque toujours à "gestion" et j'ai souvent un "Toi pas faire çà, çà peut pas !", bah des fois çà passe des fois non, mais comme je connais ZFS depuis ces débuts, j'applique en fait la méthode suivante:
Imaginons un pool miroirisé :shock:
- lire le nom des dev dans "Disques|Gestion"
- formater les disques
(jusque là tout va bien, c'est après que çà se gâte)
- ouvrir une console et lancer la commande pour créer son pool (zpool create monsuperpool /dev/da0, puis lorsque çà me plait, je peux faire un zpool attach monsuperpool /dev/da0 /dev/da1 pour mettre un second disque en miroir
- pour rendre les choses propres: Disques|ZFS|Configuration|Détecté et je fais une synchro (et là, le webgui est content)
- je crée mes datasets si besoin: monsuperpool/toto par exemple (il n'y a pas de / devant, c'est normal)
- et là, je fais: zfs checksum=on monsuperpool (ou sha256) et zfs sync=always (pourquoi ces deux lignes ? parce qu'en iscsi, j'avais des erreurs sur mes pools et depuis que je fais çà, je n'ai plus d'erreurs du tout, donc, en fait la première dit à ZFS de faire des checksum et la seconde lui dit de toujours tout contrôler, si, ce qui doit être écrit l'est bien réellement, je pense que c'est un bon choix pour la sécurité, mais çà ralentit ZFS, eh oui, on ne peut pas tout avoir, mais bon, au moins, on est sûr que ce qui est écrit est bon.
- pour créer les datasets, je fais toujours tout en ligne de commande, car pour moi le webgui est juste un accessoire.
Mais ma méthode n'est pas la meilleur pour le néophyte, je dis juste comment je gère mes pools actuellement.

sinon, zrep ... pas encore eu le temps d'essayer

Mais une chose à savoir, et çà je le dirai toujours:
Quand on a une machine "neuve", il faut toujours s'amuser un peu avec avant de mettre des données dessus pour se "faire la main".
Par exemple: pour un raidz, on met un peu de données, puis on débranche un disque, on en remet encore, et ensuite, on regarde comment il faut faire pour remettre les choses en ordre (le but étant de désynchroniser les disques)

Une question qui peut avoir son "sens":
- je fais un raidz2 avec des disques identiques et tous acheté en même temps ? que se passe t'il si ils ont le même défaut ... qui se produira ... en même temps (composant qui claque le même jours, voir dans la même heure par exemple)

Sinon, pour le choix du style: miroir, raidz1 ou 2 ou 3! ... pas facile ... je me pose souvent la question

Re: ZFS HELP

Posted: 20 Oct 2015 08:50
by sleid
Miroir vs ZFS
écriture équivalente
lecture 2 fois plus performante (en sas) 1.2 à 1.5 fois en sata(suivant que l'on est ou pas sur le même contrôleur).

Re: ZFS HELP

Posted: 21 Oct 2015 23:24
by mtiburs
sleid wrote:Miroir vs ZFS
En fait je voulais dire miroir ZFS ou ZFS miror

En gros, je ne mettais pas en opposition le "miroir normal" (raid1) avec ZFS
donc, si on veut faire un "vs", c'est "miroir-ZFS" vs raidz1 par exemple

Dans le cadre de ce post, je ne pensais qu'à du 100% ZFS

Re: ZFS HELP

Posted: 22 Oct 2015 01:21
by mtiburs
ZiEg wrote:les pools, les datasets, les snapshots.....)
Le plus important, c'est le ou les pools, car c'est le (ou les) tronc()s del'arbre, après, faire des datasets ne représente pas grand chose (les branches) et tu as tout le loisir de faire ce genre de chose ultérieurement.
En revanche, le choix d'un pool ou de plusieurs pools est très important, car si tu veux déplacer par la suite tes données, ce ne sera pas facile.

Dans mon cas, mon nas domestique est un entrelacement de 3 disques de 2To en ZFS et je suis en train d'attaquer les manip pour faire un pool sur chaque disques (car en fait, après des années de fonctionnement, je me suis aperçu que je pouvais faire 3 parties quasiment égales), et pour faire cela, ce n'est pas une mince affaire car voulant toujours avoir mon clône au cas oû, je suis obligé d'en mettre un peu partout pour que çà passe.

Sache que pour un miroir, ou un raidzX, tu pourras toujours rajouter de la taille, il y a de la doc ici:
http://docs.oracle.com/cd/E19253-01/820 ... index.html

tu peux t'amuser avec des fichiers au lieu de te lancer en vrai, de cette façon:
Je fais un copier coller de mes commandes (en virant certains rep perso) fait à l'intérieur d'un vol en ZFS (je vais donc faire un pool ZFS DANS du ZFS !!! ... le genre de truc à ne pas faire, mais c'est pour l'exemple (la bonne cause) car je n'ai pas de place autre que du ZFS)
Je vais d'ailleurs faire mes manip sur un nas en prod qui ne doit surtout pas avoir "d'ennui"
nas1: disk320# zpool list
NAME SIZE ALLOC FREE FRAG EXPANDSZ CAP DEDUP HEALTH ALTROOT
disk320 298G 195G 103G 35% - 65% 1.00x ONLINE -
nas1 1.82T 1.19T 645G 22% - 65% 1.00x ONLINE -

nas1: ~# cd /mnt/disk320

nas1: disk320#

nas1: disk320# dd if=/dev/zero of=./tank1.dsk bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 0.054339 secs (4940020827 bytes/sec)

nas1: disk320# ls -lh
-rw-r--r-- 1 root wheel 256M Oct 22 01:16 tank1.dsk

nas1: disk320# dd if=/dev/zero of=./tank2.dsk bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 0.069032 secs (3888554707 bytes/sec)

nas1: disk320# zpool create mirror toto ./tank1.dsk ./tank2.dsk
cannot open './tank1.dsk': no such GEOM provider
must be a full path or shorthand device name
(J'ai laissé l'erreur exprès pour voir qu'il faut toujours créer le pool avec des chemins absolus)

nas1: disk320# zpool create mirror toto /mnt/disk320/tank1.dsk /mnt/disk320/tank2.dsk

nas1: disk320# zpool status toto
pool: toto
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
toto ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/mnt/disk320/tank1.dsk ONLINE 0 0 0
/mnt/disk320/tank2.dsk ONLINE 0 0 0
errors: No known data errors
nas1: disk320#

Et voilà un p'tit miroir ZFS de 256Mo

On n'en veut plus ?
nas1: disk320# zpool destroy toto
nas1: disk320# zpool status toto
cannot open 'toto': no such pool

un p'tit raidz2 ? (avec les ruines du miroir d'avant)
nas1: disk320# dd if=/dev/zero of=./tank3.dsk bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 0.081613 secs (3289123621 bytes/sec)

Pour le tank4, on va faire différemment:
nas1: disk320# cp ./tank3.dsk ./tank4.dsk
nas1: disk320# ls -lh *.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:26 tank1.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:26 tank2.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:28 tank3.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:30 tank4.dsk

nas1: disk320# zpool create toto raidz2 /mnt/disk320/tank1.dsk /mnt/disk320/tank2.dsk /mnt/disk320/tank3.dsk /mnt/disk320/tank4.dsk
nas1: disk320# zpool status toto
pool: toto
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
toto ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
/mnt/disk320/tank1.dsk ONLINE 0 0 0
/mnt/disk320/tank2.dsk ONLINE 0 0 0
/mnt/disk320/tank3.dsk ONLINE 0 0 0
/mnt/disk320/tank4.dsk ONLINE 0 0 0
errors: No known data errors
nas1: disk320#

et voilà !

Attention, ne faite pas vos pool en vrai de cette façon (sur de l'UFS ou sur du fat32 !!! ... lol ), c'est juste pour l'exemple comme quoi on peut s'amuser avec une structure plus ou moins complexe sans prendre de risques

Allez un petit exemple de destruction
Je vais copier sauvagement 10Mo de zéro dans mon dev et il va d'ailleurs prendre la taille de 10Mo au lieu de 256Mo
nas1: disk320# dd if=/dev/random of=./tank2.dsk bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes transferred in 0.164325 secs (63811106 bytes/sec)

nas1: disk320# zpool scrub toto

nas1: disk320# zpool status toto
pool: toto
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://illumos.org/msg/ZFS-8000-4J
scan: scrub repaired 0 in 0h0m with 0 errors on Thu Oct 22 01:38:47 2015
config:
NAME STATE READ WRITE CKSUM
toto DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
/mnt/disk320/tank1.dsk ONLINE 0 0 0
15533550486369989241 UNAVAIL 0 0 0 was /mnt/disk320/tank2.dsk
/mnt/disk320/tank3.dsk ONLINE 0 0 0
/mnt/disk320/tank4.dsk ONLINE 0 0 0
errors: No known data errors

On vérifie le "carnage"
nas1: disk320# ls -lh
-rw-r--r-- 1 root wheel 256M Oct 22 01:38 tank1.dsk
-rw-r--r-- 1 root wheel 10M Oct 22 01:38 tank2.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:38 tank3.dsk
-rw-r--r-- 1 root wheel 256M Oct 22 01:38 tank4.dsk

Je vais récréer un dev (tank2) avec n'importe quoi
nas1: disk320# dd if=/dev/zero of=./tank2.dsk bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 0.057713 secs (4651210442 bytes/sec)

nas1: disk320# zpool replace toto 15533550486369989241 /mnt/disk320/tank2.dsk

nas1: disk320# zpool status toto
pool: toto
state: DEGRADED
scan: resilvered 41.5K in 0h0m with 0 errors on Thu Oct 22 01:41:13 2015
config:
NAME STATE READ WRITE CKSUM
toto DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
/mnt/disk320/tank1.dsk ONLINE 0 0 0
replacing-1 UNAVAIL 0 0 0
15533550486369989241 UNAVAIL 0 0 0 was /mnt/disk320/tank2.dsk/old
/mnt/disk320/tank2.dsk ONLINE 0 0 0
/mnt/disk320/tank3.dsk ONLINE 0 0 0
/mnt/disk320/tank4.dsk ONLINE 0 0 0
errors: No known data errors

nas1: disk320# zpool clear toto

nas1: disk320# zpool status toto
pool: toto
state: ONLINE
scan: resilvered 41.5K in 0h0m with 0 errors on Thu Oct 22 01:41:13 2015
config:
NAME STATE READ WRITE CKSUM
toto ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
/mnt/disk320/tank1.dsk ONLINE 0 0 0
/mnt/disk320/tank2.dsk ONLINE 0 0 0
/mnt/disk320/tank3.dsk ONLINE 0 0 0
/mnt/disk320/tank4.dsk ONLINE 0 0 0
errors: No known data errors


Sinon pour les snapshots:
attention, à savoir:
toto est le pool (il n'y a pas de / devant)
toto/truc truc est un dataset OU un répertoire (la vérif se fera avec zfs list)
/toto est le chemin absolu du pool
/toto/truc est le chemin du dataset OU du répertoire truc
C'est un peu "casse-gueule", je sais, mais c'est pas moi "qu'à fait çà" :o
Donc, attention au remplissage de la carte CF (embedded) en croyant que son pool est monté !!! çà fait un peu "désordre"

nas1: disk320# echo "un" > /toto/test.txt
nas1: disk320# cat /toto/test.txt
un

nas1: disk320# zfs snapshot toto@unedateavecuneheure

nas1: disk320# echo "deux" > /toto/test.txt
nas1: disk320# cat /toto/test.txt
deux

nas1: disk320# zfs rollback toto@unedateavecuneheure
nas1: disk320# cat /toto/test.txt
un

Voilà les grandes lignes
Je sais c'est de la ligne de commande, mais bon, c'est formateur et on ne fait pas çà en webgui ;)

Pour le reste, la bible: http://docs.oracle.com/cd/E19253-01/820-2315/index.html