“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
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)
- 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 - apt-get install zfs-dkms zfsutils-linux
erreurs & solutions installlien
->soucis? https://unix.stackexchange.com/questions/383566/install-zfs-on-debian-9-stretch/383635
- 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:
-
c’est pas malin…
ln -s /bin/rm /usr/bin/rm -
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
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/
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 listNAME 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
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
- 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
- pour vérifier que test1 n’a pas laissé de séquelles
- pour être sûr que
- on attend que le “scrub”, (lancé à chaque redémarrage?) soit finit ~ 15mn
zpool status -x
all pools are healthy
-> 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
zpool add lmpa spare 'pci-0000:01:00.0-scsi-0:0:7:0'