Skip to content

“ZOL” (;-)lien

Prise en main de ZFS, tests: PowerEdge R530 48 Go RAM (raid1 system 2x 300SAS 10k). On «joue» avec les 6 disques 3,8To restant: un pool raidz1 de 5 disques ( ~ 16To ) et un disque spare

zfs cheat sheetlien

https://www.freebsd.org/doc/handbook/zfs-zpool.html

zpool status
zfs list
zfs get all monpool

zfs create [-o ashift=12] nom_pool type_pool /dev/sda /dev/sdb
- -o ashift=12 (4k sector par défaut = 9 soit 2⁹= 512: cf. tuning )
- syntaxe /dev/sdX : à eviter préférer par by-id by-path ( ! persistence des /dev/sdX)
- type_pool: raidz1 raidz2 mirror …

ex pool labo:

zpool create -o ashift=12 lmpa raidz1 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:2:0  /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:3:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:4:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:5:0  /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:6:0 
Rem: on peut créer un pool avec un seul disque (natif zfs): zpool create -f nom_pool /dev/sdX

zfs create lmpa/VMserveurs
zfs create lmpa/VMtests
facultatif: redéfinition du point de montage (car /lmpa/VMserveurs existe)
zfs set mountpoint=/serveurs lmpa/VMserveurs
zfs set mountpoint=/vmtests lmpa/VMtests

zpool create lmpa/Backup
zfs create lmpa/Backup
zfs set mountpoint=/Backup lmpa/Backup

zpool status
zpool status -x : renvoit une seule ligne healthy (si ok) -> peut-être bien pour un test cron
zdb : toutes les infos guid disk uid
zpool history -i (historique du pool : creation, scan , snapshot)
zpool history -l (historique du pool en version longue: creation, scan , snapshot)

destruction d’un pool, d’un filesystem (attention! direct, pas de Y/N?):
zfs destroy lmpa/home/toto

zfs create lmpa/home/toto
zfs set compression=lz4 lmpa/home/
zfs set quota=100G lmpa/home/marion
zfs snapshot lmpa/home/phil2@20171201-cekonveu
zfs list -t snapshot

zpool scrub un_pool
zpool scrub -s un_pool (arrêter le scrub)

zpool replace lmpa ‘pci-0000:01:00.0-scsi-0:0:2:0’ ‘pci-0000:01:00.0-scsi-0:0:7:0’ zpool offline lmpa ‘pci-0000:01:00.0-scsi-0:0:2:0’ (passage «UNAVAIL» -> «OFFLINE») zpool detach lmpa ‘pci-0000:01:00.0-scsi-0:0:2:0’ zpool remove lmpa ‘pci-0000:01:00.0-scsi-0:0:X:0’ (remove et non ‘detach’ pour supprimer un dev spare ou un dev cache)

https://www.freebsd.org/doc/handbook/zfs-zpool.html

quelques URLS consultés

  • https://www.freebsd.org/doc/handbook/zfs-zpool.html
  • https://github.com/zfsonlinux/zfs/wiki/faq
  • https://docs.oracle.com/cd/E23824_01/html/821-1448/gavwq.html#scrolltoc : SUR ORACLE : “la” ref.
  • https://docs.oracle.com/cd/E19253-01/819-5461/gayog/index.html
  • https://icesquare.com/wordpress/zfs-performance-mirror-vs-raidz-vs-raidz2-vs-raidz3-vs-striped/ -test tuning (dd)
  • http://jrs-s.net/2015/02/06/zfs-you-should-use-mirror-vdevs-not-raidz/
  • https://calomel.org/zfs_raid_speed_capacity.html
  • https://journaldunadminlinux.fr/tutoriel-tuto-zfs-linux/
  • https://journaldunadminlinux.fr/presentation-de-btrfs-et-comment-migrer/
  • https://journaldunadminlinux.fr/tutoriel-gerez-votre-systeme-de-fichier-grace-a-lvm-logical-volume-management/
  • https://docs.joyent.com/private-cloud/troubleshooting/disk-replacement
    vieux mais test avec fichier raw :rigolo et excellent
  • https://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-114/ZFS-sous-GNU-linux
  • https://www.howtoforge.com/tutorial/how-to-install-and-configure-zfs-on-debian-8-jessie/
    Nb filesystem quota rename etc.
  • https://medspx.fr/blog/Sysadmin/zfs_on_linux/
    maintenance:
  • https://stoneyforest.net/~chris/blog/freebsd/zfs/maint.html
    tuning:
  • http://open-zfs.org/wiki/Performance_tuning
  • https://icesquare.com/wordpress/how-to-improve-zfs-performance/

installation ZFS stretchlien

Sur la strech, zfs se trouve dans les “contrib” ( pas de backport comme pour v < 9)

  1. a priori il faudrait installer d’abord spl-dkms apt-get install spl-dkms (pour ne pas avoir à gérer les erreurs ci-après)
    ln -s /bin/rm /usr/bin/rm
  2. apt-get install zfs-dkms zfsutils-linux

erreurs & solutions installlien

->soucis? https://unix.stackexchange.com/questions/383566/install-zfs-on-debian-9-stretch/383635

  1. spl-dkms en premier

plantage car un pb d’ordre dans l’installation de spl-dkms:

dpkg --purge --force-depends spl-dkms
apt-get install spl-dkms

apt-get purge zfs-dkms zfsutils-linux
apt-get install zfs-dkms zfsutils-linux

autre erreur:

  1. c’est pas malin…
    ln -s /bin/rm /usr/bin/rm

  2. modprobe zfs
    
     lsmod | grep zfs
     zfs                  2707456  0
     zunicode              331776  1 zfs
     zavl                   16384  1 zfs
     zcommon                53248  1 zfs
     znvpair                90112  2 zcommon,zfs
     spl                    98304  3 znvpair,zcommon,zfs
    
systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

journaux / serviceslien

systemctl status zf*

  • zfs-import-scan.service (Import ZFS pools by device scanning)
  • zfs-mount.service
  • zfs.target ( ZFS startup target)
  • zfs-share.service ( ZFS file system shares )
  • zfs-zed.service (ZFS Event Daemon (zed))

partitionement des disqueslien

Les tables de partitions doivent être gpt (src:https://medspx.fr/blog/Sysadmin/zfs_on_linux/)

  • parted /dev/sdb
  • mklabel gpt
  • quit

version & upgradelien

zfs upgrade -v

tests de quelques poolslien

Rem : on peut créer un pool avec un seul disque (nativement zfs => fonctionnalite snapashot etc.) zpool create -f nomdupool /dev/sdX

test 1 :RAID6 “bidon” cf article LinuxMAg2009lien

cd /tmp/
mkdir test_zfs
cd test_zfs
for i in $(seq 0 9); do dd if=/dev/zero of=./disque_$i bs=1M count=512; done;
zpool create raid6 raidz2 /tmp/test_zfs/disque_{0,1,2,3,4,5,6,7,8} spare /tmp/test_zfs/disque_9 -m /media/zfs_test
zpool status

on met des données:
cp -rp /opt/dell /media/zfs_test/
on casse un disque:
shred -n 1 disque_4
inquiétant? : zpool status ne dit rien?
(en fait c’est l’absence d’IO n’entraine pas d’erreur: dès qu’il y en a, le pool est en erreur )

zpool status
/tmp/test_zfs/disque_4 ONLINE 0 0 0
=> seulement après
zpool scrub raid6

state: DEGRADED
/tmp/test_zfs/disque_4 UNAVAIL 0 0 0 corrupted data

remplacer le disque : le tuto n’est pas bon, il faut mettre “offline” d’abord

zpool offline raid6 '/tmp/test_zfs/disque_4'
	    /tmp/test_zfs/disque_4  OFFLINE      0     0     0
zpool replace raid6 '/tmp/test_zfs/disque_4' '/tmp/test_zfs/disque_9'
      	    state: DEGRADED  
	    spare-4                   OFFLINE      0     0     0
	      /tmp/test_zfs/disque_4  OFFLINE      0     0     0
	      /tmp/test_zfs/disque_9  ONLINE       0     0     0
il faut détacher le disque :

zpool detach raid6 '/tmp/test_zfs/disque_4'

pour repasser en mode non dégradé:

zpool status
  pool: raid6
 state: ONLINE

	raid6                       ONLINE       0     0     0
	  raidz2-0                  ONLINE       0     0     0
	    /tmp/test_zfs/disque_0  ONLINE       0     0     0
	    /tmp/test_zfs/disque_1  ONLINE       0     0     0
	    /tmp/test_zfs/disque_2  ONLINE       0     0     0
	    /tmp/test_zfs/disque_3  ONLINE       0     0     0
	    /tmp/test_zfs/disque_9  ONLINE       0     0     0
	    /tmp/test_zfs/disque_5  ONLINE       0     0     0
	    /tmp/test_zfs/disque_6  ONLINE       0     0     0
	    /tmp/test_zfs/disque_7  ONLINE       0     0     0
	    /tmp/test_zfs/disque_8  ONLINE       0     0     0
	spares

zpool status raid6 -x ) -> version ‘courte’ (1 ligne et tout le b… si problèmes)
pool ‘raid6’ is healthy )

remarque:

zdb
zdb -l /dev/ ) -> guid : peut être donner comme device?

remettre un disque de spare

dd if=/dev/zero of=./disque_10  bs=1M count=512
zpool add raid6 spare '/tmp/test_zfs/disque_10'
zpool status raid6
	spares
	  /tmp/test_zfs/disque_10   AVAIL

test 2 :raidzlien

creationlien

zpool create -f poolz1 raidz sda sdb sdc (crée par défaut un rép /poolz1 :cf montage démontage pour un autre point)

observerlien

zpool list

      NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
      poolz1  10,9T  1,66M  10,9T         -     0%     0%  1.00x  ONLINE  -
      raid6   4,44G  1,53M  4,44G         -     0%     0%  1.00x  ONLINE  -
zpool status  . Rem idem que contenu fichier /path_pool/zp.status
  pool: raid6
 state: ONLINE
  scan: none requested
config:

	NAME                        STATE     READ WRITE CKSUM
	raid6                       ONLINE       0     0     0
	  raidz2-0                  ONLINE       0     0     0
	    /tmp/test_zfs/disque_0  ONLINE       0     0     0
	    /tmp/test_zfs/disque_1  ONLINE       0     0     0
	    /tmp/test_zfs/disque_2  ONLINE       0     0     0
	    /tmp/test_zfs/disque_3  ONLINE       0     0     0
	    /tmp/test_zfs/disque_4  ONLINE       0     0     0
	    /tmp/test_zfs/disque_5  ONLINE       0     0     0
	    /tmp/test_zfs/disque_6  ONLINE       0     0     0
	    /tmp/test_zfs/disque_7  ONLINE       0     0     0
	    /tmp/test_zfs/disque_8  ONLINE       0     0     0
	spares
	  /tmp/test_zfs/disque_9    AVAIL   

errors: No known data errors

zfs get all raid6 -> TOUT

montage démontagelien

zfs umount poolz1
zfs mount poolz1

  • changer le point de montage par défaut
    zfs set mountpoint=/tmp/toti raid6
    (suivi de : zfs mount raid6)
    NB: le point de montage n’a pas besoin d’être crée.

filesystemlien

Apparemment le pool (racine) est déjà un filesystem . filesystem ~ repertoire ( mais propriété de quotas & réservation ) => Oracle recommande un filesys/user (idée: peut-il gérer lui-même ses snapshots par ex.?) Oui: délégation de pouvoir https://docs.oracle.com/cd/E23824_01/html/821-1448/gdtfl.html#scrolltoc

zfs create raid6/backup

quota refquotalien

s’applique au systeme de fichier ( et non user)

  • avant # zfs list
    NAME           USED  AVAIL  REFER  MOUNTPOINT
    raid6          164K  3,33G  34,9K  /media/zfs_test
    raid6/backup  34,9K  3,33G  34,9K  /media/zfs_test/backup
    

zfs set quota=500Mb raid6/backup

  • Après # zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
raid6          164K  3,33G  34,9K  /media/zfs_test
raid6/backup  34,9K   500M  34,9K  /media/zfs_test/backup

réservationlien

renommerlien

zfs rename raid6/backup raid6/sauvegarde renommer : mais!: point de montage toujours sur raid6/backup )

zfs list
raid6/sauvegarde 34,9K 500M 34,9K /media/zfs_test/sauvegarde

détruire un zpoollien

selon:
zpool destroy to destroy the pool itself
zfs destroy -r raid6 -> to destroy all datasets in the pool

ajout disquelien

zpool add poolz1 sdd

partition / snapshotlien

intérêt partition (puisque le pool es monté ?)
- snapshot de partition (/ou pool)

  • zfs snapshot @<nom de votre snapshot
  • zfs list -t snapshot
  • zfs rollback

https://www.howtoforge.com/tutorial/how-to-install-and-configure-zfs-on-debian-8-jessie/

Autre fonctionnalité intéressantes (à explorer)lien

  • clone /snapshot et transfert https://medspx.fr/blog/Sysadmin/zfs_on_linux/
  • deduplication (même URL)
  • transfert voir aussi shadow (doc oracle)
  • encryption

machine vielle, « pour de vrai »lien

(6 disques diponibles) https://icesquare.com/wordpress/how-to-improve-zfs-performance/

tuning: ls /sys/module/zfs/parameters/lien

  • apparemment a minima 4k sector = 2^12 => ashift=12 ( defaut 512 byte = 2^9 )

  • zdb | grep ashift

  smartctl -a /dev/sdf  | grep -i "size"
  Logical block size:   512 bytes mais les physical ( pas de diff entre ashift=12 et ashift=9 cf test tank & tan2)
  • commande arcstat et arc_summary
    (la mémoire … l2arc (un disk -ssd- de cache)

  • répartition des écirutre : plus on écrit sur des devices plus zfs est efficace
    zpool iostat -v

  • dedup à off (zfs get all | grep dedup) sinon il faut 5GB de mémoire pour 1TB de pool !!!
    (src:https://icesquare.com/wordpress/how-to-improve-zfs-performance/)

zfs create -o recordsize=8k mypool/mysql_myisam
zfs set redundant_metadata=most mypool
zfs set xattr=sa mypool

choix du /dev/ par /dev/disk/by-id/:? (recommandée pour < 10 disque) ou by-pathlien

cf par vdev ( important si baie multipath etc.)
https://github.com/zfsonlinux/zfs/wiki/faq ( attention les noms /dev/sdx ne sont pas persistents )

by-id
https://github.com/zfsonlinux/zfs/wiki/FAQ

lrwxrwxrwx 1 root root  9 déc.   6 10:01 scsi-35000039648c9ccc1 -> ../../sde
lrwxrwxrwx 1 root root  9 déc.   6 09:59 scsi-35000039648c9ced5 -> ../../sdc
lrwxrwxrwx 1 root root  9 déc.   6 09:58 scsi-35000039648c9cef1 -> ../../sdb
lrwxrwxrwx 1 root root  9 déc.   6 09:59 scsi-35000039648c9cf1d -> ../../sdd
lrwxrwxrwx 1 root root  9 déc.   6 10:02 scsi-35000039648c9d0b5 -> ../../sdf
lrwxrwxrwx 1 root root  9 déc.   6 09:58 scsi-35000039648c9d0c9 -> ../../sda

by-path => c’est pourtant le plus human readable?! g est pour le system: 2,3,..7 <-> a,b..f

lrwxrwxrwx 1 root root   9 déc.   6 09:58 pci-0000:01:00.0-scsi-0:0:2:0 -> ../../sda
lrwxrwxrwx 1 root root   9 déc.   6 09:58 pci-0000:01:00.0-scsi-0:0:3:0 -> ../../sdb
lrwxrwxrwx 1 root root   9 déc.   6 09:59 pci-0000:01:00.0-scsi-0:0:4:0 -> ../../sdc
lrwxrwxrwx 1 root root   9 déc.   6 09:59 pci-0000:01:00.0-scsi-0:0:5:0 -> ../../sdd
lrwxrwxrwx 1 root root   9 déc.   6 10:01 pci-0000:01:00.0-scsi-0:0:6:0 -> ../../sde
lrwxrwxrwx 1 root root   9 déc.   6 10:02 pci-0000:01:00.0-scsi-0:0:7:0 -> ../../sdf
lrwxrwxrwx 1 root root   9 déc.   5 21:21 pci-0000:01:00.0-scsi-0:2:0:0 -> ../../sdg

vielle on prend by-path (test mirroir avec 2 disques):`

zpool create -o ashift=12 tank mirror /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:2:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:3:0

on y va!lien

creation /dev/sd[a-e] + spare [/dev/sdf]lien

zpool create -o ashift=12 lmpa raidz1 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:2:0  /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:3:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:4:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:5:0  /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:6:0 
ajout d’un disque spare:

zpool add lmpa spare /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:7:0

root@vielle:~# zpool status
  pool: lmpa
 state: ONLINE
  scan: none requested
config:

	NAME                               STATE     READ WRITE CKSUM
	lmpa                               ONLINE       0     0     0
	  raidz1-0                         ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:2:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:3:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0  ONLINE       0     0     0
	spares
	  pci-0000:01:00.0-scsi-0:0:7:0    AVAIL   
création de quelques filsystem

  • zfs create lmpa/VMserveurs
  • zfs create lmpa/VMtests
  • zfs set mountpoint=/serveurs lmpa/VMserveurs
  • zfs set mountpoint=/vmtests lmpa/VMtests

cron : a minimalien

#!/bin/bash

result=`sudo zpool status -x`

if [[ $result != 'all pools are healthy' ]]; then
        echo "Something is wrong."
        #Do something here such as send an email, such as sending an email via HTTP...
        /usr/bin/wget "http://example.com/send_email.php?subject=Alert&body=File%20System%20Has%20Problem" -O /dev/null > /dev/null
        exit 1;
fi

scrub (~ le fsck de ZFS) ?lien

zpool scrub lepool
arrêter un scrub
zpool scrub -s lepool -> zpool status
state: ONLINE
scrub: scrub stopped after 0h1m -> on voit où on en ait & s’il y a déjà des erreurs détectées.

fréquence des scrubs ?

  • c’est un sujet ! https://forums.freebsd.org/threads/35663/
  • ça dépend !

Apparemment la coutume est
- 1 fois par semaine à 2 fois par mois. En fait, il faut chronométrer 500GB/h , 2TB /heures - alterné avec des smart (short|long) tests

testslien

Attention : il faut supprmer les fichier entre 2 tests (si le fichier existe déjà

sur disque systemlien

write ** native **

dd if=/dev/zero of=/opt/file1.out count=1000
dd if=/dev/zero of=/opt/file2.out count=10000
dd if=/dev/zero of=/opt/file3.out count=100000
dd if=/dev/zero of=/opt/file4.out count=1000000
dd if=/dev/zero of=/opt/file5.out count=10000000

512000 bytes (512 kB, 500 KiB) copied, 0,00309161 s, 166 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,0263018 s, 195 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,216216 s, 237 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 2,15967 s, 237 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 21,7611 s, 235 MB/s

write ** bs=4096 **

dd if=/dev/zero of=/opt/file1.out bs=4096 count=125
dd if=/dev/zero of=/opt/file2.out bs=4096 count=1250
dd if=/dev/zero of=/opt/file3.out bs=4096 count=12500
dd if=/dev/zero of=/opt/file4.out bs=4096 count=125000
dd if=/dev/zero of=/opt/file5.out bs=4096 count=1250000

512000 bytes (512 kB, 500 KiB) copied, 0,000959538 s, 534 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,00726746 s, 705 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,0633633 s, 808 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 0,572187 s, 895 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 5,71357 s, 896 MB/s

read ** native **

dd if=/opt/file1.out of=/dev/null
dd if=/opt/file2.out of=/dev/null
dd if=/opt/file3.out of=/dev/null
dd if=/opt/file4.out of=/dev/null
dd if=/opt/file5.out of=/dev/null

512000 bytes (512 kB, 500 KiB) copied, 0,000948946 s, 540 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,00748346 s, 684 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,0636464 s, 804 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 0,598437 s, 856 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 6,04276 s, 847 MB/s

read ** bs=4096 **

dd if=/opt/file1.out of=/dev/null bs=4096
dd if=/opt/file2.out of=/dev/null bs=4096
dd if=/opt/file3.out of=/dev/null bs=4096
dd if=/opt/file4.out of=/dev/null bs=4096
dd if=/opt/file5.out of=/dev/null bs=4096

512000 bytes (512 kB, 500 KiB) copied, 0,000451052 s, 1,1 GB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,00278233 s, 1,8 GB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,0244428 s, 2,1 GB/s
512000000 bytes (512 MB, 488 MiB) copied, 0,212039 s, 2,4 GB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 2,04557 s, 2,5 GB/s

sur pool mirrorlien

(zpool create -o ashift=12 tank mirror /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:2:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:3:0)

écriture

dd if=/dev/zero of=/tank/file1.out bs=4096 count=125
dd if=/dev/zero of=/tank/file2.out bs=4096 count=1250
dd if=/dev/zero of=/tank/file3.out bs=4096 count=12500
dd if=/dev/zero of=/tank/file4.out bs=4096 count=125000
dd if=/dev/zero of=/tank/file5.out bs=4096 count=1250000

zfs set compression=off tank

512000 bytes (512 kB, 500 KiB) copied, 0,00420348 s, 122 MB/s => BOF
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,0203364 s, 252 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,165675 s, 309 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 1,65198 s, 310 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 17,3915 s, 294 MB/s

zfs set compression=on tank

512000 bytes (512 kB, 500 KiB) copied, 0,00277968 s, 184 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,0196136 s, 261 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,181773 s, 282 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 1,69251 s, 303 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 16,8895 s, 303 MB/s

rq verif que ashift est désomrais “naturel” (donc inutile) BAH NON??!!!!

dd if=/dev/zero of=/tank/file1.out count=1000
dd if=/dev/zero of=/tank/file2.out count=10000
dd if=/dev/zero of=/tank/file3.out count=100000
dd if=/dev/zero of=/tank/file4.out count=1000000
dd if=/dev/zero of=/tank/file5.out count=10000000

512000 bytes (512 kB, 500 KiB) copied, 0,0156792 s, 32,7 MB/s => NUL !!!!
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,112985 s, 45,3 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 1,07034 s, 47,8 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 10,4539 s, 49,0 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 107,092 s, 47,8 MB/s

MAIS ???
zfs set compression=off tank
dd if=/dev/zero of=./file.out bs=1M count=5k
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 9,25856 s, 580 MB/s
zfs set compression=on tank
dd if=/dev/zero of=./file.out bs=1M count=5k
368709120 bytes (5,4 GB, 5,0 GiB) copied, 2,96653 s, 1,8 GB/s
et, sur ext4
dd if=/dev/zero of=./file.out bs=1M count=5k
5368709120 bytes (5,4 GB, 5,0 GiB) copied, 5,26355 s, 1,0 GB/s

tank2 (mirroir)lien

zpool create -o ashift=9 tank2 mirror /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:4:0 /dev/disk/by-path/pci-0000:01:00.0-scsi-0:0:5:0

compresion=off
dd if=/dev/zero of=/tank2/file1.out count=1000
dd if=/dev/zero of=/tank2/file2.out count=10000
dd if=/dev/zero of=/tank2/file3.out count=100000
dd if=/dev/zero of=/tank2/file4.out count=1000000
dd if=/dev/zero of=/tank2/file5.out count=10000000
=> tout à 47 MB/s
compression=on
dd if=/dev/zero of=/tank2/file1.out bs=4096 count=125
dd if=/dev/zero of=/tank2/file2.out bs=4096 count=1250
dd if=/dev/zero of=/tank2/file3.out bs=4096 count=12500
dd if=/dev/zero of=/tank2/file4.out bs=4096 count=125000
dd if=/dev/zero of=/tank2/file5.out bs=4096 count=1250000
=> idem tank(1) ~ 250-300MBs

(tank1)
** lecture ** ( conclusion raisonnable )

dd if=/tank/file1.out of=/dev/null
dd if=/tank/file2.out of=/dev/null
dd if=/tank/file3.out of=/dev/null
dd if=/tank/file4.out of=/dev/null
dd if=/tank/file5.out of=/dev/null

512000 bytes (512 kB, 500 KiB) copied, 0,0047051 s, 109 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,0426295 s, 120 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,358222 s, 143 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 3,48761 s, 147 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 35,503 s, 144 MB/s

dd if=/tank/file1.out of=/dev/null bs=4096
dd if=/tank/file2.out of=/dev/null bs=4096
dd if=/tank/file3.out of=/dev/null bs=4096
dd if=/tank/file4.out of=/dev/null bs=4096
dd if=/tank/file5.out of=/dev/null bs=4096

512000 bytes (512 kB, 500 KiB) copied, 0,000905018 s, 566 MB/s
5120000 bytes (5,1 MB, 4,9 MiB) copied, 0,0069139 s, 741 MB/s
51200000 bytes (51 MB, 49 MiB) copied, 0,0601801 s, 851 MB/s
512000000 bytes (512 MB, 488 MiB) copied, 0,55779 s, 918 MB/s
5120000000 bytes (5,1 GB, 4,8 GiB) copied, 5,68167 s, 901 MB/s

compression

quelque soit le niveau de compression
zfs set compression=lz4 tank
zfs set compression=on tank

zfs get compressratio tank
NAME PROPERTY VALUE SOURCE
tank compressratio 1.00x -

du -sh => NORMAL car les fichier = /dev/zero ( mais en théorie, il y a 6 Go !!!!)
3,0K .
mais le ls -l est “bon”

=> plus besoin de faire des tarGZ ( tar suffit !?)

arrachage 1er disque (a priori /dev/sda)lien

https://docs.joyent.com/private-cloud/troubleshooting/disk-replacement

statuslien

zpool status
  pool: lmpa
 state: ONLINE
  scan: scrub repaired 0 in 0h24m with 0 errors on Sun Dec 10 00:48:51 2017
config:

	NAME                               STATE     READ WRITE CKSUM
	lmpa                               ONLINE       0     0     0
	  raidz1-0                         ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:2:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:3:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0  ONLINE       0     0     0
	spares
	  pci-0000:01:00.0-scsi-0:0:7:0    AVAIL   

errors: No known data errors

ohhhhhh!!!!!!! personne n’est au courant!??`
cf test2 plus loin : apparemment c’est qu’il n’est pas utilisé (pas d’IO)

zpool scrub lmpalien

puis zpool status : Ah quand même !?
(ou bien zpool status -x qui renvoit une seule ligne “healthy” ou la totale si problèmes)

pool: lmpa
 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://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub in progress since Mon Dec 11 15:37:08 2017
    31,5G scanned out of 286G at 209M/s, 0h20m to go
    0 repaired, 10,99% done
config:

	NAME                               STATE     READ WRITE CKSUM
	lmpa                               DEGRADED     0     0     0
	  raidz1-0                         DEGRADED     0     0     0
	    pci-0000:01:00.0-scsi-0:0:2:0  UNAVAIL      0     0     0  corrupted data
	    pci-0000:01:00.0-scsi-0:0:3:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0  ONLINE       0     0     0
	spares
	  pci-0000:01:00.0-scsi-0:0:7:0    AVAIL   

Conclusions

il FAUT faire du scrub! (tous les combiens?)
( c’est quand même inquiétant que personne soit au courant qu’il manque un disque !; -)

Actions!lien

Attendre la fin du “scrub” ?lien

Rem: dans notre test, c’est rapide :~25mn (sachant que -au où cas cela influe- il n’y a que 225Go -compressé(~405G non compressé /18To)

ci-dessus:

scan: scrub repaired 0 in 0h24m with 0 errors on Sun Dec 10 00:48:51 2017

  scan: scrub in progress since Mon Dec 11 15:37:08 2017
    141G scanned out of 286G at 225M/s, 0h11m to go
    0 repaired, 49,07% done

  scan: scrub in progress since Mon Dec 11 15:37:08 2017
    222G scanned out of 286G at 220M/s, 0h5m to go
    0 repaired, 77,37% done

zpool status - x (à la fin du scrub)

  pool: lmpa
 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://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 0h22m with 0 errors on Mon Dec 11 15:59:20 2017
config:

	NAME                               STATE     READ WRITE CKSUM
	lmpa                               DEGRADED     0     0     0
	  raidz1-0                         DEGRADED     0     0     0
	    pci-0000:01:00.0-scsi-0:0:2:0  UNAVAIL      0     0     0  corrupted data
	    pci-0000:01:00.0-scsi-0:0:3:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0  ONLINE       0     0     0
	spares
	  pci-0000:01:00.0-scsi-0:0:7:0    AVAIL

test1 : on remet le même disquelien

zpool clear lmpa

zpool status
  pool: lmpa
 state: ONLINE
  scan: resilvered 272K in 0h0m with 0 errors on Mon Dec 11 16:54:59 2017
  
 scan: resilvered 272K in 0h0m with 0 errors on Mon Dec 11 16:54:59 201

conclusions

on peut donc jouer à retirer un disque et le remettre sans trop de soucis
tout rentre dans l’ordre!

Note resilver: reconstruction de la parité du pool

Hot spare automatiquelien

Ce n’est pas le cas par défaut (stretch)
pistes: https://github.com/zfsonlinux/zfs/issues/4358

Apparemment il faut a minima:

  • décommenter dans le fichier (/etc/zfs/zed.d/zed.rc)

    • ZED_SPARE_ON_CHECKSUM_ERRORS=10
    • ZED_SPARE_ON_IO_ERRORS=1
  • zpool set autoreplace=on lmpa (zpool get all lmpa | grep autoreplace pour vérifier)

Rq : Il semble que ce n’est pas au point sur ZOL (cf URL) ci -dessus .

  • Est-ce le cas aujourd’hui (dec2017) ?
  • En tout cas ne devrait pas fonctionner a posteriori ( donc pour ce test car devrait fonctionner que pour de nouvelles I/O errors, donc trop tard!)

Arrache /dev/sda : version 2lien

  • Après config ci-dessus (autoreplace=on , /etc/zfs/zed.d/zed.rc)
  • après redémarrage
    1. pour vérifier que test1 n’a pas laissé de séquelles
    2. pour être sûr que
  • on attend que le “scrub”, (lancé à chaque redémarrage?) soit finit ~ 15mn

zpool status -x
all pools are healthy
dd if=/dev/random of=/Backup/scripts/file.out bs=1m count=200

-> devient dégrader sur écriture : pas besoin du “scrub”

remplacement du disque 2 (/dev/sda) par le 7 (/dev/sdf):
zpool replace lmpa 'pci-0000:01:00.0-scsi-0:0:2:0' 'pci-0000:01:00.0-scsi-0:0:7:0'

zoot@vielle:~# zpool status
  pool: lmpa
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Mon Dec 11 17:45:21 2017
    9,34G scanned out of 289G at 56,0M/s, 1h25m to go
    1,86G resilvered, 3,24% done
config:

	NAME                                 STATE     READ WRITE CKSUM
	lmpa                                 DEGRADED     0     0     0
	  raidz1-0                           DEGRADED     0     0     0
	    spare-0                          UNAVAIL      0     0     0
	      pci-0000:01:00.0-scsi-0:0:2:0  UNAVAIL      0    93     0  corrupted data
	      pci-0000:01:00.0-scsi-0:0:7:0  ONLINE       0     0     0  (resilvering)
	    pci-0000:01:00.0-scsi-0:0:3:0    ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0    ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0    ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0    ONLINE       0     0     0
	spares
	  pci-0000:01:00.0-scsi-0:0:7:0      INUSE     currently in use

errors: No known data errors

Observations

  • 1h40 de «resilvering»
  • INUSE ( le spare )

Résumé

  • zpool replace lmpa ‘ancien’ ‘nouveau’
  • attendre la fin du «resilvering» : ~1h50 (dans notre cas)
  • retirer le disque défectueux a la mano avec:
  • zpool offline lmpa ‘pci-0000:01:00.0-scsi-0:0:2:0’ (passage «UNAVAIL» -> «OFFLINE»)
  • zpool detach lmpa ‘pci-0000:01:00.0-scsi-0:0:2:0’
  • avant de retrouver une situation clean (mais sans spare):
root@vielle:~# zpool status
  pool: lmpa
 state: ONLINE
  scan: resilvered 57,3G in 1h51m with 0 errors on Mon Dec 11 19:37:04 2017
config:

	NAME                               STATE     READ WRITE CKSUM
	lmpa                               ONLINE       0     0     0
	  raidz1-0                         ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:7:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:3:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:4:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:5:0  ONLINE       0     0     0
	    pci-0000:01:00.0-scsi-0:0:6:0  ONLINE       0     0     0

Conclusions

  • le reversement automatique du disque spare ne fonctionne pas
  • spare tout de même à l’admin de réagir rapidement: zpool zpool replace lmpa ‘
  • DEGRADED FAULTED UNAVAIL REMOVED: détection du bon flag dépend OS ( ici retrait disque = UNAVAIL)
root@vielle:~# zpool status
  pool: lmpa
   state: DEGRADED
   status: One or more devices has experienced an unrecoverable error.  An
   	   attempt was made to correct the error.  Applications are unaffected.
	   action: Determine if the device needs to be replaced, and clear the errors
	   	   using 'zpool clear' or replace the device with 'zpool replace'.
		      see: http://zfsonlinux.org/msg/ZFS-8000-9P
		        scan: resilvered 57,3G in 1h51m with 0 errors on Mon Dec 11 19:37:04 2017
			config:

			NAME                                 STATE     READ WRITE CKSUM
			lmpa                                 DEGRADED     0     0     0
			  raidz1-0                           DEGRADED     0     0     0
			    spare-0                          DEGRADED     0     0     0
			      pci-0000:01:00.0-scsi-0:0:2:0  OFFLINE      0    93     0
			      pci-0000:01:00.0-scsi-0:0:7:0  ONLINE       0     0     0
			    pci-0000:01:00.0-scsi-0:0:3:0    ONLINE       0     0     0
			    pci-0000:01:00.0-scsi-0:0:4:0    ONLINE       0     0     0
			    pci-0000:01:00.0-scsi-0:0:5:0    ONLINE       0     0     0
			    pci-0000:01:00.0-scsi-0:0:6:0    ONLINE       0     0     0
		        spares
			  pci-0000:01:00.0-scsi-0:0:7:0      INUSE     currently in use
errors: No known data errors

retrait du disque 2 (/dev/sda) désormais «offline»:
root@vielle:~# zpool detach lmpa 'pci-0000:01:00.0-scsi-0:0:2:0'

root@vielle:~# zpool status

ménage des testslien

Pour repartir en prod avec un pool “propre” (le disque de spare = 7ième) avec les disques a,b,c,d,e et f spare), on refait la manip (un 3ième test!): - arrachage du disque 7, reconstruction avec le 2 et remise en spare du 7

séauence:

zpool replace lmpa 'pci-0000:01:00.0-scsi-0:0:2:0' 'pci-0000:01:00.0-scsi-0:0:7:0'
....wait (resilver)
zpool offline lmpa 'pci-0000:01:00.0-scsi-0:0:7:0'
zpool detach lmpa 'pci-0000:01:00.0-scsi-0:0:7:0'
... c'est clean!

nouvelle table de part. du disque 7 (pour être vraiment clean!?)

fdisk -l /dev/sdf  
parted /dev/sdf  
(parted) mklabel gpt  
quit  
et ajout du disque 7 (/dev/sdf) spare:
zpool add lmpa spare 'pci-0000:01:00.0-scsi-0:0:7:0'