
OpenZFS a mindennapokban Az adattárolás elsődleges irányelve: Ne adjon vissza hibás adatot a háttértár Gajdos Tamás SZTE Optika és Kvantumelektronika Tanszék whoami: ● 2004: Uhu Linux 1.1 [Mortál Szombat, másodlagos OS] ● 2007: Ubuntu 7.10 [napi használatra, elsődleges OS] ● 2014: SFD Szeged: SaltStack előadás Mikroszkópos adattárolási problémák ● dSTORM lokalizációs mikroszkópia ● ~60 GB/nap: mérési adat + feldolgozott eredmény [*.tiff, *.csv, *.png] ● Felhasználók „home” könyvtárai ● Belső hálózaton elérhető (smb) ● Biztonsági mentések és visszaállítási pontok ● Kéziratokhoz mérési adatok archívuma (~5-10 év) ● Nem lehet leállás 2 “Z file system” történelem ● 2001: Sun – OpenSolaris: Matthew Ahrens & Jeff Bonwick → CDDL license (Simon Phillips) ● 2008: FreeBSD port ● 2008: ZFS on Linux ● 2009: az Oracle felvásárolja a Sun-t ● 2010.08: belső e-mail az OpenSolaris zárt forrásúvá tételéről → Illumos fork, utolsó közös pont az OracleZFS és az OpenZFS között (v28) ● 2013: OpenZFS projekt → cél minden OS-re ● 2017.09. az Oracle elengedi a Solaris fejlesztését 3 https://itsfoss.com/what-is-zfs/ OpenZFS rétegek <> *nix zpool ↔ dm, lvm2, hwraid, ... zfs ↔ ext[2,3,4], xfs, jfs, reiserfs, f2fs, ... Ortodox unix 4 https://itsfoss.com/what-is-zfs/ filozófia? OpenZFS alapok: “Copy-On-Write” ● A módosítások egy új blokkra kerülnek, és az írás után a mutatók és a metadata frissül. ● Nincs fsck ← mindig rendelkezésre áll az adat. root meta B1 B2 B3 root meta B1 B2 B3 meta* B2* 5 https://pthree.org/2012/12/14/zfs-administration-part-ix-copy-on-write/ OpenZFS alapok: “Copy-On-Write” ● A módosítások egy új blokkra kerülnek, és az írás után a mutatók és a metadata frissül. ● Nincs fsck ← mindig rendelkezésre áll az adat. ● Pillanatkép (snapshot) root meta B1 B2 B3 Merkle-tree root meta B1 B2 B3 meta* B2* 6 https://pthree.org/2012/12/14/zfs-administration-part-ix-copy-on-write/ OpenZFS alapok: checksumming, recordsize ● Minden olvasás során adat-sérülés ellenőrzés ● Hibás blokkok javítása (raid, extra másolatok) & Bit rot ● Minden íráskor frissül root meta B1 B2 B3 fletcher4, sha256, c c c c 128K 128K 128K sha512, skein, edonr zfs set checksum=skein pool_name/dataset_name 7 https://blog.programster.org/zfs-record-size Ne kapcsoljuk ki! https://github.com/zfsonlinux/zfs/wiki/Checksums OpenZFS alapok: checksumming, recordsize ● Minden olvasás során adat-sérülés ellenőrzés ● Hibás blokkok javítása (raid, extra másolatok) & Bit rot ● Minden íráskor frissül ● Recordsize: blokk méret <= record size ● [4K, 8K, 16K, …, 128K, …, 1M] root meta B[123] fletcher4, sha256, c c 640K sha512, skein, edonr zfs set checksum=skein pool_name/dataset_name zfs set recordsize=1M pool_name/dataset_name 8 https://blog.programster.org/zfs-record-size Ne kapcsoljuk ki! https://github.com/zfsonlinux/zfs/wiki/Checksums OpenZFS alapok: compression & dedup ● Tömörített blokkok: lz4, gzip1-9, lzof, zle, lzjb ● Minimális cpu használat (lz4), viszont gyorsabb írás és olvasás a lemezekről. ● Deduplikálás: blokk, fájl, byte ← Sha256 ● A nagy memória igény miatt nem javasolt c c c c root cB2 cB3 root meta B1 meta B[123] c c c c c c c c zfs set compression=lz4 tank/log https://pthree.org/2012/12/18/zfs-administration-part-xi-compression-and-deduplication/ 9 OpenZFS alapok: ARC, L2ARC, ZIL LRU MFU ● Adaptive Replacement Cache ● read cache root meta cB1 cB2 cB3 c c c c MRU LFU 10 https://www.youtube.com/watch?v=F8sZRBdmqc0 https://www.sparkmycloud.com/blog/zfs/ OpenZFS alapok: ARC, L2ARC, ZIL LRU MFU ● Adaptive Replacement cmt Cache ● read cache ● tömörített root meta cB1 cB2 cB3 c c c c cB3 cB1 MRU LFU 11 https://www.youtube.com/watch?v=F8sZRBdmqc0 https://www.sparkmycloud.com/blog/zfs/ OpenZFS alapok: ARC, L2ARC, ZIL LRU MRU MFU LFU 12 https://www.youtube.com/watch?v=F8sZRBdmqc0 https://www.sparkmycloud.com/blog/zfs/ OpenZFS elérhetősége ● FreeBSD/FreeNAS: Része a base csomagoknak, és fő fájlrendszer ● Linux (2.6.32 – 5.3): GPL <> CDDL miatt csak kernel modul (64bit) ● Ubuntu 16.04+: $ sudo apt install zfsutils-linux zfs-initramfs ● CentOS6: # yum install http://download.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm -y # nano /etc/yum.repos.d/zfs.repo #← engedélyezni a [zfs-kmod] tárolót # yum install zfs -y ● CentOS7: # yum install http://download.zfsonlinux.org/epel/zfs-release.el7_7.noarch.rpm -y # nano /etc/yum.repos.d/zfs.repo #← engedélyezni a [zfs-kmod] tárolót # yum install zfs -y ● … vagy forrásból telepíthető https://tutorials.ubuntu.com/tutorial/setup-zfs-storage-pool 13 https://www.symmcom.com/docs/how-tos/storages/how-to-install-zfs-on-centos-7 https://github.com/zfsonlinux/zfs/wiki/RHEL-and-CentOS ZPOOL létrehozása (Ubuntu 18.04.3) $ ls /dev/disk/by-id/ ● 5*750 GB HDD ata-HGST_HTS541075A9E680_JA13021H0J6BRK ata-SAMSUNG_HN-M750MBB_S2R9J9DBA00197 ● 1* 4 GB HDD ata-ST34311A_5BF1Y1ZK ata-ST34311A_5BF1Y1ZK-part1 ● zfs: mirror, stripe, raidz[1-3] ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00120759 ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124488 ● unix: raid1, raid0, raid[5-7?] ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124851 wwn-0x5000cca764c75de1 wwn-0x50014ee0569e89cc wwn-0x50014ee0569e9763 wwn-0x50014ee0abf466d9 wwn-0x50024e92064919a6 $ sudo zpool create -o ashift=12 vd-Rocinante raidz1 \ /dev/disk/by-id/ata-SAMSUNG_HN-M750MBB_S2R9J9DBA00197 \ /dev/disk/by-id/ata-HGST_HTS541075A9E680_JA13021H0J6BRK \ /dev/disk/by-id/ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00120759 \ /dev/disk/by-id/ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124488 \ /dev/disk/by-id/ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124851 14 https://docs.oracle.com/cd/E19253-01/819-5461/gaynr/index.html ZPOOL létrehozása (Ubuntu 18.04.3) $ zpool status pool: vd-Rocinante state: ONLINE scan: scrub repaired 0B in 1h21m with 0 errors on Sat Oct 11 14:13:05 2019 config: NAME STATE READ WRITE CKSUM vd-Rocinante ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ata-SAMSUNG_HN-M750MBB_S2R9J9DBA00197 ONLINE 0 0 0 ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124851 ONLINE 0 0 0 ata-HGST_HTS541075A9E680_JA13021H0J6BRK ONLINE 0 0 0 ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00120759 ONLINE 0 0 0 ata-WDC_WD7502ABYS-18A6B0_WD-WMAU00124488 ONLINE 0 0 0 errors: No known data errors $ zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT vd-Rocinante 3,41T 3,12T 298G - 41% 91% 1.00x ONLINE - 15 https://docs.oracle.com/cd/E19253-01/819-5461/gaynr/index.html ZFS hangolás saját használatra $ sudo zfs set compression=lz4 vd-Rocinante $ sudo zfs set checksum=skein vd-Rocinante $ zfs list NAME USED AVAIL REFER MOUNTPOINT vd-Rocinante 2,49T 151G 28,8K /vd-Rocinante $ sudo zfs create create -o mountpoint=/var/lib/lxc vd-Rocinante/lxc $ sudo zfs create create -o mountpoint=/srv/backup vd-Rocinante/backup $ sudo zfs create create -o mountpoint=/srv/backup/deep vd-Rocinante/backup/deep $ sudo zfs create create vd-Rocinante/test $ sudo zfs set recordsize=16K vd-Rocinante/lxc $ sudo zfs set recordsize=1M vd-Rocinante/backup $ sudo zfs set compression=gzip9 vd-Rocinante/backup/deep 16 ZFS hangolás saját használatra $ zfs list NAME USED AVAIL REFER MOUNTPOINT vd-Rocinante 2,49T 151G 28,8K /vd-Rocinante vd-Rocinante/lxc 2,05G 151G 1,45G /var/lib/lxc vd-Rocinante/backup 2,49T 151G 1,24T /srv/backup vd-Rocinante/backup/deep 1,27T 151G 1,27T /srv/backup/deep vd-Rocinante/test 280M 151G 280M /srv/test $ zfs get compression,compressratio vd-Rocinante NAME PROPERTY VALUE SOURCE vd-Rocinante compression lz4 local vd-Rocinante compressratio 2.11x - $ zfs get all NAME PROPERTY VALUE SOURCE vd-Rocinante/test type filesystem - vd-Rocinante/test creation h okt 11 14:21 2019 - vd-Rocinante/test used 280M - vd-Rocinante/test available 151G - vd-Rocinante/test referenced 280M - vd-Rocinante/test compressratio 6.52x - vd-Rocinante/test mounted yes - vd-Rocinante/test quota none default 17 Snapshot & Remote backup $ sudo zfs snapshot vd-Rocinante/test@manual_20190911 $ sudo zfs snapshot vd-Rocinante/test@manual_now $ sudo zfs destroy vd-Rocinante/test@manual_20190911 $ sudo zfs rollback vd-Rocinante/test@manual_now # zfs send vd-Rocinante/test@manual_now | zfs receive vd-Guanshiyin # zfs send -Rv vd-Rocinante/test@manual_now | zfs receive -F vd-Guanshiyin -R → replication stream package (létrehoz mindent) -F → ha a fogadó fél előrébb lenne, akkor azt visszaállítja $ sudo zfs send -v -I vd-Rocinante/[email protected] \ vd-Rocinante/[email protected] | ssh [email protected] zfs recv -F \ vd-GuyMolinari/replications/test -I → incremental (két snapshot között) https://www.freebsd.org/cgi/man.cgi?zfs(8) 18 RTFM! Probléma #1: Nem olyan gyors, mint lehetne ● ZFS a Solaris operációs rendszerhez lett tervezve (Oracle Solaris, Illumos). ● Nincs minden Solaris syscall Linuxra lefordítva. ● SPL kernel modul: Solaris Portability Layer 19 https://www.youtube.com/watch?v=2jo0E1CJS2k Probléma#2: Memory fragmentáció, TLB ● kmalloc() ● vmalloc() ● DMA 1 1 1 1 2 2 2 3 3 3 4 4 4 4 3 2 phys virt phys virt 20 https://www.youtube.com/watch?v=2jo0E1CJS2k OpenZFS jövője ● Root on ZFS (Linux) ● Linuxon az SPL elhagyása (v0.8.0) ● Ubuntu 19.10 telepítője már tartalmazza ● FreeBSD is a ZFS on Linux moduljára áttér ● RaidZ kiterjesztés (6 HDD → 7 HDD → 8 HDD) ● ZSTD tömörítés (adaptív, több szint) ● Kmalloc() linuxon is (~v1.0.0) ● Minden fő operációs rendszeren elérhető legyen a közös verzió (Windows-ra is van port!) https://docs.google.com/spreadsheets/d/1CFapSYxA5QRFYy5k6ge3FutU7zbAWbaeGN2nKVXgxCI 21 https://github.com/zfsonlinux/zfs/pull/9024 https://github.com/zfsonlinux/zfs/wiki/Ubuntu-18.04-Root-on-ZFS Köszönöm a figyelmet! Q&A Demó (ha még lesz rá idő)… [UHU Linux 2.2 (Nerd) + OpenZFS v0.6.5.11] 22 .
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages23 Page
-
File Size-