====== ZFS ====== ===== Vytvoření zpool ===== Zpool je tvořen jen jedním diskem, může se použít např. pro zálohy na USB disk.\\ Disky mohou rotovat. zpool create -f poolz3bck /dev/sdg zfs create poolz3bck/backup zfs set compression=lz4 poolz3bck/backup ==== Vytvoření ZFS pool dle id disků ==== (''/dev/disk/by-id'') Mapování mezi ID a jménem lze zjistit příkazem ''lsblk''.\\ Konkrétně např. pro disk ''sda''\\ lsblk -O /dev/sda ===== Vytvoření raid pool ===== https://calomel.org/zfs_raid_speed_capacity.html Create RAIDZ2 - ladění výkonu.\\ https://www.svennd.be/create-zfs-raidz2-pool/ Vytvoření mirror pool:\\ zpool create -f vspool mirror Vytvoření **raidz1** pool:\\ zpool create -f vspool raidz1 /dev/disk/by-id/ata-WDC_WD2004FBYZ-01YCBB1_WD-WMC6N0D3UY36 /dev/disk/by-id/ata-WDC_WD2004FBYZ-01YCBB1_WD-WMC6N0D004T6 /dev/disk/by-id/ata-WDC_WD2004FBYZ-01YCBB1_WD-WMC6N0D4Z3LT /dev/disk/by-id/ata-WDC_WD2004FBYZ-01YCBB1_WD-WMC6N0D9SRC6 Vytvoření **raidz2** pool:\\ zpool create backup raidz2 /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S05PS5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S045S5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S05TS5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S05GS5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S03RS5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S043S5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S046S5HH /dev/disk/by-id/ata-TOSHIBA_HDWD240_X9M1S03QS5HH ===== Vytvoření block device - dataset ===== Např. pro Xen VM zfs create -V 40G vspool/vision ==== Rozšíření prostoru pro block device - rozšíření datasetu - resize ==== Zjištění stávající velikosti\\ zfs get volsize vspool/vision Nstavení nvé velikosti zfs set volsize=45G vspool/vision http://thegeekdiary.com/the-ultimate-zfs-interview-questions/ http://zfsonlinux.org/example-zvol.html Pro rozšíření je nutné vypnout/zapnout virtuální počítač a následně rozšířit prostor prostředky v rámci OS(Windows/Linux)\\ Pro Windows systémy je diskový prostor možné rozšířit online v rámci nástroje **Správa disků**.\\ Pro Linux systémy by měl být funkční následující postup:\\ - Vypnout virtuální počítač - Pomocí nástroje fdisk odstranit obkast pro swap (např. ''fdisk -l /dev/zvol/vspool/keo'', smazat oblast 2) - Smazat oblast 1 a následně vytvořit novou oblast. Ponechte prostor pro swap. - Proveďte kontrolu nové oblasti 1 - ''e2fsck -f /dev/zvol/vspool/keo-part1'' - Po úspěšně kontrole proveďte resize - ''resize2fs /dev/zvol/vspool/keo-part1'' ==== Kopie block device do img souboru ==== Block device(např. virtuální PC) lze zkopírovat pomocí příkazu ''%%dd%%'' Např.: ''%%dd if=/dev/zvol/vspool/vm/CONFLUENCE of=/mnt/backup/zfstestbck/confluence_dev.img%%'' ===== ZIL log a L2ARC cache ===== ZFS with SSDs: Am I asking for a headache in the near future?\\ https://forum.proxmox.com/threads/zfs-with-ssds-am-i-asking-for-a-headache-in-the-near-future.25967/\\ I have no idea how the lack of TRIM in ZFS affects cache performance in the long term, but all SSDs have automatic garbage collection / maintenance routines, so I think the most important thing is to set aside some decent OP (over provision = unpartitioned space) area, like 15-20% of the capacity, and I reckon everything should be fine. On 250 GB TLC drives, I would leave about 40-50 GB unpartitioned, so partition table would look like this: - 10 GB SWAP (mirrored on other drive) - 10 GB ZIL (mirrored on other drive) - 180 GB L2ARC (striped with other drive) Používaji se SSD disky. Pro ZIL log stačí menší prostor ideálně miror, pro L2ARC cache nemirorovaný.\\ SSD disky se rozdělí na partition. Např pro 128GB SSD se nechá 8GB pro log a zbytek pro cache.\\ zpool add vspool log mirror /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1 /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part1 zpool add vspool cache /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2 /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part2 Výsledek pak vypadá podobně jako na výpisu: debian:~# zpool status pool: vspool state: ONLINE scan: resilvered 0 in 0h33m with 0 errors on Tue May 17 14:41:08 2016 config: NAME STATE READ WRITE CKSUM vspool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HA0A8 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HAH3C ONLINE 0 0 0 logs mirror-1 ONLINE 0 0 0 ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1 ONLINE 0 0 0 ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part1 ONLINE 0 0 0 cache ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2 ONLINE 0 0 0 ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part2 ONLINE 0 0 0 errors: No known data errors ===== Zálohování pomocí snashotů ===== Je použitý externí skrip zfSnap\\ https://github.com/zfsnap/zfsnap/wiki/zfSnap Pro Debian a Ubuntu existuje balíček ''zfsnap'' apt-get install zfsnap ''%%zfSnap%%'' vytváří standardní snapshoty pomocí příkazu ''%%zfs snapshot%%'' např: ''%%zfs snapshot tank/test@tuesday%%'' 0 8-22/1 * * * /usr/sbin/zfSnap -a 1d poolz1/VM/BITBUCKET -a 1d poolz1/VM/CONFLUENCE -a 1d poolz1/VM/VSSQL01 -a 1d poolz1/VM/VALKYRA -a 1d poolz1/VM/HPLAPP01 -a 1d poolz1/VM/HPLAPP02 -a 1d poolz1/VM/BAMBOO -a 1d poolz1/VM/JIRA 0 23 * * 1-5 /usr/sbin/zfSnap -a 2w poolz1/VM/BITBUCKET -a 2w poolz1/VM/CONFLUENCE -a 2w poolz1/VM/VSSQL01 -a 2w poolz1/VM/VALKYRA -a 2w poolz1/VM/HPLAPP01 -a 2w poolz1/VM/HPLAPP02 -a 2w poolz1/VM/BAMBOO -a 2w poolz1/VM/JIRA 0 23 * * 6 /usr/sbin/zfSnap -a 2m poolz1/VM/BITBUCKET -a 2m poolz1/VM/CONFLUENCE -a 2m poolz1/VM/VSSQL01 -a 2m poolz1/VM/VALKYRA -a 2m poolz1/VM/HPLAPP01 -a 2m poolz1/VM/HPLAPP02 -a 2m poolz1/VM/BAMBOO -a 2m poolz1/VM/JIRA 45 23 1 * * /usr/sbin/zfSnap -a 1y poolz1/VM/BITBUCKET -a 1y poolz1/VM/CONFLUENCE -a 1y poolz1/VM/VSSQL01 -a 1y poolz1/VM/VALKYRA -a 1y poolz1/VM/HPLAPP01 -a 1y poolz1/VM/HPLAPP02 -a 1y poolz1/VM/BAMBOO -a 1y poolz1/VM/JIRA 0 1 * * * /usr/sbin/zfSnap -d 10 */1 * * * /usr/local/sbin/zxfer -dFkPv -g 376 -R poolz1/VM poolz3bck ===== Obnova ze snapshotu ===== Lze použít buď příkaz **rollback** nebo **clone** ==== Rolback ==== **POZOR**, rollback snapshotu se vrátí do stavu pořízení snapshotu. Časově následující snapshoty jsou smazány. zfs rollback -r vspool/VM/srv01@2016-10-13_20.26.26--1d ==== Clone, promote ==== zfs clone vspool/vm/FI-SYS-DISK@2016-11-21_13.31.16--1d vspool/vm/FI-SYS-DISK_clone01 debian:/etc/xen# zfs list -t all|more NAME USED AVAIL REFER MOUNTPOINT vspool 309G 366G 96K /vspool vspool/vm 309G 366G 96K /vspool/vm vspool/vm/FI-SYS-DISK 155G 520G 152G - vspool/vm/FI-SYS-DISK@2016-11-21_13.18.38--1d 0 - 152G - vspool/vm/FI-SYS-DISK@2016-11-21_13.28.36--1d 5.52M - 152G - vspool/vm/FI-SYS-DISK@2016-11-21_13.30.28--1d 2.48M - 152G - vspool/vm/FI-SYS-DISK@2016-11-21_13.31.16--1d 12.1M - 152G - vspool/vm/FI-SYS-DISK_clone 153G 366G 152G - vspool/vm/FI-SYS-DISK_clone@2016-11-21_13.16.51--1d 724M - 152G - vspool/vm/FI-SYS-DISK_clone01 477M 366G 152G - Byl vytvořen zapisovatelný snapshot ''vspool/vm/FI-SYS-DISK_clone01'', nyní je možné zkontrolovat jestli se na něm nachází očekávaná data. Pokud se jedná jako v tomto případě o disk virtuálního serveru, lze snapshot standardně použít v konfiguračním souboru xenu jako virtuální disk. disk = [ 'phy:/dev/zvol/vspool/vm/FI-SYS-DISK_clone01,ioemu:hda,w'] Jestliže jsou na disku očekávaná data, lze použít příkaz ''promote'' a převést do stavu běžného zvool. zfs promote vspool/vm/FI-SYS-DISK_clone01 debian:/etc/xen# zfs list -t all|more NAME USED AVAIL REFER MOUNTPOINT vspool 309G 366G 96K /vspool vspool/vm 309G 366G 96K /vspool/vm vspool/vm/FI-SYS-DISK 155G 520G 152G - vspool/vm/FI-SYS-DISK_clone 153G 366G 152G - vspool/vm/FI-SYS-DISK_clone@2016-11-21_13.16.51--1d 724M - 152G - vspool/vm/FI-SYS-DISK_clone01 1.11G 366G 152G - vspool/vm/FI-SYS-DISK_clone01@2016-11-21_13.18.38--1d 0 - 152G - vspool/vm/FI-SYS-DISK_clone01@2016-11-21_13.28.36--1d 5.52M - 152G - vspool/vm/FI-SYS-DISK_clone01@2016-11-21_13.30.28--1d 2.48M - 152G - vspool/vm/FI-SYS-DISK_clone01@2016-11-21_13.31.16--1d 11.7M - 152G - ===== Replikace pomocí zxfer ===== **Pozor** skript standardně nepoužívá sysstémovou proměnou PATH, což může být problém při použití v cronu.\\ V logu se objevovala hláška: //Failed to retrieve datasets from the destination// ''*/2 * * * * /usr/local/sbin/zxfer -dFkPv -g 376 -R vspool/VM zfsbck >> /tmp/zxfer01.txt'' Po přidání ''PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'' na začátek skriptu **zxfer** probíhá replikace v pořádku. Opět se jedná o externí skript.\\ ''%%zxfer%%'' používá příkaz ''%%zfs send%%'' a ''%%zfs receive%%'' zxfer -dFkPv -g 376 -R vspool/vm/vision zfsbck/backup/vision http://www.manualpages.de/FreeBSD/FreeBSD-ports-9.0-RELEASE/man8/zxfer.8.html\\ https://zpool.org/zfs-snapshots-and-remote-replication/\\ https://blogs.confusticate.com/jeremy/tag/zfs/\\ ===== Záloha na vyměnitelná média - USB disk ===== zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT vspool 696G 290G 406G - 28% 41% 1.00x ONLINE - zfsbck 928G 26.9G 901G - 2% 2% 1.00x ONLINE - zpool export zfsbck zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT vspool 696G 290G 406G - 28% 41% 1.00x ONLINE - zpool import zfsbck Pokud se použije příkaz ''zpool import'' bez parametru, pak se vypíše seznam pool, které lze naimportovat. zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT vspool 696G 290G 406G - 28% 41% 1.00x ONLINE - zfsbck 928G 26.9G 901G - 2% 2% 1.00x ONLINE - ===== Obnova ze zálohy ===== Před obnovou můžeme ověřit zálohu příkazem zstreamdump < confluence.img V rámci dvou zfs uložišť lze použít ''%%zfs%%'' send a ''%%zfs receive%%''. Např. při restoru z USB disku.\\ Ale pokud např. uložíme zfs snapshot na Ext4 souborový systém příkazem\\ ''%%zfs send poolz3bck/backup/Confluence/Confluence > /mnt/backup/zfstestbck/confluence.img%%''\\ Zde jsem chvíli tápal, domníval jsem se, že soubor cnfluence.img je již obraz virtuálního serveru. Ale není tomu tak.Jedná se o uložený dataset a jeden konkrétní snapshot. Pro obnovu je potřeba příkazem ''%%zfs receive%%'' nahrát soubor do připraveného datasetu. Např.: ''%%zfs receive -F vspool/vm/confluence < /mnt/backup/zfstestbck/confluence.img%%'' zfs list -t all|grep vspool vspool/vm/confluence 5.88G 494G 5.76G /vspool/vm/confluence vspool/vm/confluence@2016-06-09_11.00.01--1d ===== Výměna vadného disku ===== http://askubuntu.com/questions/305830/replacing-a-dead-disk-in-a-zpool Pomocí příkazu zdb zjistíme disk GUID a následně převedeme disk do stavu offline. zpool offline vspool 8908311146390156902 Následně vyměníme vadný disk za nový a pak pomocí příkazu replace zařadíme do pool. zpool replace vspool 8908311146390156902 /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B ===== Odstranění Logs a Cache device z pool ===== Na serveru docházelo k chybám disku v Log a Cache NAME STATE READ WRITE CKSUM vspool DEGRADED 0 0 0 raidz1-0 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXA1A25RKPVC ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HA0A8 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HAH3C ONLINE 0 0 0 logs mirror-1 DEGRADED 0 0 0 6032371930805775579 UNAVAIL 0 0 0 was /dev/disk/by-id/ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1 ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part1 ONLINE 0 0 0 cache ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2 UNAVAIL 0 0 0 ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part2 ONLINE 0 0 0 Proto bylo nutné zrušit Logs a Cache.\\ Vadný disk není možné odebrat, je nutné nejdříve provést detach. zpool remove vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1 cannot remove ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1: operation not supported on this type of pool zpool detach vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part1 Partititon zařazenou v Cache nebylo možné detach, ale bylo možné jí odebrat\\ zpool detach vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2 cannot detach ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2: device is in use as a cache zpool remove vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNWAG942247J-part2 zpool status pak vypadá následovně\\ root@ubuntu:~# zpool status pool: vspool state: ONLINE scan: scrub repaired 0 in 0h0m with 0 errors on Sun Feb 12 00:24:13 2017 config: NAME STATE READ WRITE CKSUM vspool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXA1A25RKPVC ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HA0A8 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HAH3C ONLINE 0 0 0 logs ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part1 ONLINE 0 0 0 cache ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part2 ONLINE 0 0 0 errors: No known data errors Nyní je možné odstranit z pool dvě funkční partition zpool remove vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part1 zpool remove vspool ata-Samsung_SSD_850_PRO_128GB_S24ZNXAGA14082B-part2 root@ubuntu:~# zpool status pool: vspool state: ONLINE scan: scrub repaired 0 in 0h0m with 0 errors on Sun Feb 12 00:24:13 2017 config: NAME STATE READ WRITE CKSUM vspool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXA1A25RKPVC ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HA0A8 ONLINE 0 0 0 ata-WDC_WD7500BPKX-00HPJT0_WD-WXG1A95HAH3C ONLINE 0 0 0 errors: No known data errors ==== Odkazy ==== https://wiki.archlinux.org/index.php/ZFS https://zpool.org/zfs-snapshots-and-remote-replication/ http://wiki.complete.org/ZFSAutoSnapshots http://changelog.complete.org/archives/9168-backing-up-every-few-minutes-with-simplesnap\\ http://breden.org.uk/2008/05/12/home-fileserver-backups-from-zfs-snapshots/\\ http://community.riocities.com/xen_storage_driver_domain.html http://mehdi.me/setting-up-a-windows-server-2012-r2-virtual-machine-with-xen-on-ubuntu/ Xen domu storage\\ http://wiki.xenproject.org/wiki/Storage_driver_domains Ubuntu ZFS install\\ http://www.jamescoyle.net/how-to/478-create-a-zfs-volume-on-ubuntu Ubuntu 16.4 ZFS install\\ https://wiki.ubuntu.com/Kernel/Reference/ZFS https://wiki.archlinux.org/index.php/Experimenting_with_ZFS https://pve.proxmox.com/wiki/Storage:_ZFS#Administration ZFS Raidz Performance, Capacity and Integrity\\ https://calomel.org/zfs_raid_speed_capacity.html\\ http://louwrentius.com/zfs-performance-and-capacity-impact-of-ashift9-on-4k-sector-drives.html\\ ZVOL storage for VMs\\ https://www.quernus.co.uk/2015/08/30/cloning-zvol-for-vm/\\ http://justinholcomb.me/blog/2016/05/23/zfs-volume-manipulations.html\\ ===== Zapracovat do dokumentu ===== zfs send tank/test@tuesday | zfs receive pool/test ===== Scrub ===== https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSScrubsOurSpeedup\\ Na cca 3TB poli jsem spustil ''zfs scrub pool''. Na serveru bylo spuštěno cca 10 VS. Servery přestali reagovat a celý systém měl hrozně dlouhé odezvy. Nakonec jsem musel scrub ukončit ''scrub -s pool''. Čekal jsem cca 15 hodin než se scrub zastaví, nezastavil se. Server jsem restartoval(init 6). Po restartu proběhla obnova soubor. systémů na VS.