{"id":83582,"date":"2020-06-01T19:42:21","date_gmt":"2020-06-01T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost"},"modified":"2020-06-01T19:42:21","modified_gmt":"2020-06-01T17:42:21","slug":"osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Introduktion til ZFS: lager- og ydeevne","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDenne for\u00e5r har vi allerede diskuteret nogle grundl\u00e6ggende emner, for eksempel, <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">hvordan man tjekker hastigheden p\u00e5 dine diske<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">hvad RAID er<\/a><\/noindex>. I det andet emne lovede vi endda at forts\u00e6tte med at unders\u00f8ge ydeevnen af forskellige multi-disk topologier i ZFS. Det er et n\u00e6ste generations filsystem, der i \u00f8jeblikket implementeres overalt: fra <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2016\/06\/a-zfs-developers-analysis-of-the-good-and-bad-in-apples-new-apfs-file-system\/\">Apple<\/a><\/noindex> op til <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/05\/ubuntu-20-04-welcome-to-the-future-linux-lts-disciples\/\">Ubuntu<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nN\u00e5, i dag er den perfekte dag til at l\u00e6re ZFS at kende, nysgerrige l\u00e6sere. Bare husk, at if\u00f8lge udvikleren af OpenZFS, Matt Arons, \"det er virkelig kompliceret\".<\/p>\n<p>Men inden vi n\u00e5r frem til tallene \u2014 og de vil komme, det lover jeg \u2014 for alle typer med otte disk konfigurationer i ZFS, skal vi tale om, <i>hvordan<\/i> hvordan ZFS overhovedet gemmer data p\u00e5 disken.<\/p>\n<h1>Zpool, vdev og device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dette diagram over den fulde pulje inkluderer tre hj\u00e6lpende vdev'er, \u00e9n fra hver klasse, og fire til RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Der er normalt ingen grund til at oprette en pool af ikke-sammenlignelige typer og st\u00f8rrelser af vdev \u2014 men hvis du \u00f8nsker det, er der intet, der forhindrer dig i at g\u00f8re det<\/i><\/p>\n<p>For virkelig at forst\u00e5 ZFS-filsystemet skal man se n\u00e6rmere p\u00e5 dens faktiske struktur. For det f\u00f8rste kombinerer ZFS de traditionelle niveauer af volumenstyring og filsystemet. For det andet bruger det en transaktionel metode til skrivning. Disse egenskaber betyder, at systemet er strukturelt meget forskelligt fra almindelige filsystemer og RAID-arrays. Den f\u00f8rste s\u00e6tningss\u00e6t af grundl\u00e6ggende byggeklodser til forst\u00e5else: det er et lagringspul (zpool), et virtuelt device (vdev) og et reelt device (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nLagringspul zpool er den overordnede struktur i ZFS. Hver pul indeholder et eller flere virtuelle enheder. Hver af disse indeholder et eller flere reelle enheder (device). Virtuelle pul er selvst\u00e6ndige blokke. En fysisk computer kan indeholde to eller flere separate puuld, men hver er helt uafh\u00e6ngig af de andre. Puler kan ikke dele virtuelle enheder.<\/p>\n<p>ZFS's redundans er p\u00e5 niveau med de virtuelle enheder snarere end p\u00e5 niveau med pulerne. P\u00e5 niveauet for pulerne er der slet ingen redundans \u2014 hvis nogen vdev-enhed eller special vdev g\u00e5r tabt, g\u00e5r hele pulen tabt med den.<\/p>\n<p>Moderne lagringspuljer kan overleve tabet av cache eller logg fra det virtuelle enheten - selv om de kan miste en liten mengde skitne data hvis de mister vdev-loggen under str\u00f8mutkobling eller systemfeil.<\/p>\n<p>Det er en utbredt misforst\u00e5else at \u00abdata stripes\u00bb (stripe) i ZFS skrives over hele puljen. Det er ikke riktig. Zpool er slett ikke et morsomt RAID0, det er snarere morsomt <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> med en kompleks variabel distribusjonsmekanisme.<\/p>\n<p>For det meste blir registreringene fordelt mellom de tilgjengelige virtuelle enhetene i henhold til den frie plassen som er tilgjengelig, slik at de teoretisk sett vil bli fylt samtidig. I senere versjoner av ZFS tas det hensyn til den n\u00e5v\u00e6rende bruken (utnyttelsen) av vdev - hvis en virtuell enhet er betydelig mer belastet enn en annen (for eksempel p\u00e5 grunn av leseoperasjoner), vil den bli midlertidig hoppet over for skriving, til tross for at den har den h\u00f8yeste frie plassen.<\/p>\n<p>Utnyttelsesmekanismen innebygd i moderne ZFS-skrivfordelingsmetoder kan redusere latens og \u00f8ke gjennomstr\u00f8mningen i perioder med unormalt h\u00f8y belastning - men det er ikke <i>blankosjekk<\/i> for ufrivillig blanding av langsomme HDD-er og raske SSD-er i \u00e9n pulje. En slik ujevn pulje vil fortsatt fungere med hastigheten til den tregeste enheten, alts\u00e5 som om den helt og holdent var laget av slike enheter.<\/p>\n<h3>vdev<\/h3>\n<p>\nHver lagringspulje best\u00e5r av ett eller flere virtuelle enheter (virtual device, vdev). Hver vdev inkluderer igjen ett eller flere fysiske enheter. De fleste virtuelle enheter brukes til enkel datalagring, men det finnes flere hjelpekategorier av vdev, inkludert CACHE, LOG og SPECIAL. Hver av disse typene vdev kan ha en av fem topologier: enkelt enhet (single-device), RAIDz1, RAIDz2, RAIDz3 eller speil (mirror).<\/p>\n<p>RAIDz1, RAIDz2 og RAIDz3 er specielle varianter af det, som gamle folk ville kalde RAID med dobbelt (diagonal) paritet. 1, 2 og 3 henviser til, hvor mange paritetsblokke der er tildelt til hver dataramme. I stedet for separate diske til at sikre paritet fordeler RAIDz virtuelle enheder denne paritet j\u00e6vnt mellem diskene. Et RAIDz-array kan miste s\u00e5 mange diske, som det har paritetsblokke; hvis det mister en mere, vil det fejle og tage lagringspuljen med sig.<\/p>\n<p>I spejlede virtuelle enheder (mirror vdev) gemmes hver blok p\u00e5 hver enhed i vdev. Selvom to-dobbelte spejle (two-wide) er de mest almindelige, kan der v\u00e6re et vilk\u00e5rligt antal enheder i et spejl - i st\u00f8rre installationer bruges der ofte tre-dobbelte enheder for at forbedre l\u00e6seydelsen og fejlresistensen. Et spejl vdev kan overleve enhver fejl, s\u00e5 l\u00e6nge mindst \u00e9n enhed i vdev stadig fungerer.<\/p>\n<p>Enkeltst\u00e5ende vdev er i sin essens farlige. En s\u00e5dan virtuel enhed vil ikke overleve nogen fejl - og hvis den bruges som lager eller special vdev, vil dens fejl resultere i \u00f8del\u00e6ggelsen af hele puljen. V\u00e6r meget, meget forsigtig her.<\/p>\n<p>Virtuelle enheder CACHE, LOG og SPECIAL kan oprettes efter hvilken som helst af de ovenn\u00e6vnte topologier - men husk, at tabet af en virtuel enhed SPECIAL betyder tab af hele puljen, s\u00e5 det anbefales kraftigt at have en redundant topologi.<\/p>\n<h3>enhed<\/h3>\n<p>\nDette er sandsynligvis det letteste at forst\u00e5 begreb i ZFS - det er bogstaveligt talt et bloklagringsapparat. Husk, at virtuelle enheder best\u00e5r af separate enheder, mens puljen er lavet af virtuelle enheder.<\/p>\n<p>Drev - magnetiske eller SSD - er de mest almindelige bloklagringsenheder, der bruges som byggesten til vdev. Dog kan ethvert apparat med en beskrivelse i \/dev bruges - s\u00e5 hele hardware RAID-arrays kan bruges som separate enheder.<\/p>\n<p>En simpel r\u00e5fil er en af de vigtigste alternative bloklagringsenheder, som et vdev kan bygges af. Testpuljer fra <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">sparse filer<\/a><\/noindex>\u00a0er en meget bekvem m\u00e5de at teste pulje-kommandoer p\u00e5 og se, hvor meget plads der er tilg\u00e6ngelig i puljen eller det virtuelle enhed i den p\u00e5g\u00e6ldende topologi.<\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Du kan oprette et test-pool med sparsomme filer p\u00e5 blot et par sekunder \u2014 men glem ikke at slette hele poolen og dens komponenter efterf\u00f8lgende.<\/i> <\/p>\n<p>Lad os sige, at du vil ops\u00e6tte en server med otte diske og planl\u00e6gger at bruge diske p\u00e5 10 TB (~9300 GiB) \u2014 men du er ikke sikker p\u00e5, hvilken topologi der bedst opfylder dine behov. I ovenst\u00e5ende eksempel opretter vi p\u00e5 f\u00e5 sekunder et test-pool med sparsomme filer \u2014 og vi ved nu, at et RAIDz2 vdev med otte diske p\u00e5 10 TB giver 50 TiB nyttig kapacitet.<\/p>\n<p>En anden s\u00e6rlig klasse af enheder er SPARE (reservedele). Hot-swappable enheder tilh\u00f8rer, i mods\u00e6tning til almindelige enheder, hele poolen, ikke et enkelt virtuelt device. Hvis et vdev i poolen svigter, og en reservedele er tilsluttet poolen og tilg\u00e6ngelig, vil den automatisk blive tilsluttet det ber\u00f8rte vdev.<\/p>\n<p>Efter at v\u00e6re blevet tilsluttet det ber\u00f8rte vdev, begynder reservedele-enheden at modtage kopier eller rekonstruktioner af data, der skulle v\u00e6re p\u00e5 den manglende enhed. I traditionel RAID kaldes dette genopbygning (rebuilding), mens det i ZFS kaldes 'genopretning af redundans' (resilvering).<\/p>\n<p>Det er vigtigt at bem\u00e6rke, at reservedele ikke permanent erstatter defekte enheder. Det er kun en midlertidig erstatning for at reducere den tid, hvor vdev er i degradering. N\u00e5r administratoren har udskiftet den defekte enhed i vdev, udf\u00f8res genopretning af redundans p\u00e5 denne permanente enhed, og SPARE l\u00f8snes fra vdev og returneres til at v\u00e6re en reserve for hele poolen.<\/p>\n<h1>Datas\u00e6t, blokke og sektorer<\/h1>\n<p>\nDen n\u00e6ste gruppe byggesten, som vi skal forst\u00e5 i vores rejse gennem ZFS, handler ikke s\u00e5 meget om hardware, men om, hvordan dataene selv er organiseret og gemt. Vi springer her flere niveauer over \u2014 s\u00e5som metaslab \u2014 for ikke at overbelaste detaljerne, men for at bevare forst\u00e5elsen af den overordnede struktur.<\/p>\n<h3>Datas\u00e6t (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e5r vi f\u00f8rst opretter et datas\u00e6t, viser det al tilg\u00e6ngelig plads i poolen. Derefter indstiller vi en kvote \u2014 og \u00e6ndrer monteringspunktet. Magi!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol er i det store og hele blot et datas\u00e6t, der mangler sit lag af filsystem, som vi her erstatter med et helt normalt filsystem som ext4.<\/i> <\/p>\n<p>ZFS-datasettet er omtrent det samme som et standard montert filsystem. Som et vanlig filsystem, ser det ved f\u00f8rste \u00f8yekast ut som \"bare en annen mappe\". Men akkurat som med vanlige monterte filsystemer, har hvert ZFS-datasett sitt eget sett med grunnleggende egenskaper.<\/p>\n<p>F\u00f8rst og fremst kan et datasett ha en tildelt kvote. Hvis du setter <code>zfs set quota=100G poolname\/datasetname<\/code>, vil du ikke v\u00e6re i stand til \u00e5 skrive til den monterte mappen <code>\/poolname\/datasetname<\/code> mer enn 100 GiB.<\/p>\n<p>La merke til tilstedev\u00e6relsen \u2013 og frav\u00e6ret \u2013 av skr\u00e5streker i begynnelsen av hver linje? Hvert datasett har sin egen plass b\u00e5de i ZFS-hierarkiet og i det systemiske monteringshierarkiet. I ZFS-hierarkiet er det ingen ledende skr\u00e5strek \u2013 du starter med navnet p\u00e5 bassenget, og deretter veien fra ett datasett til et annet. For eksempel, <code>pool\/parent\/child<\/code> for et datasett med navnet <code>child<\/code> under det overordnede datasettet <code>parent<\/code> i bassenget med det kreative navnet <code>pool<\/code>.<\/p>\n<p>Som standard vil monteringspunktet for datasettet v\u00e6re likt navnet i ZFS-hierarkiet, med en skr\u00e5strek i begynnelsen \u2013 bassenget med navnet <code>pool<\/code> blir montert som <code>\/pool<\/code>, datasettet <code>parent<\/code> monteres i <code>\/pool\/parent<\/code>, og det underordnede datasettet <code>child<\/code> blir montert i <code>\/pool\/parent\/child<\/code>. Imidlertid kan det systemiske monteringspunktet for datasettet endres.<\/p>\n<p>Hvis vi angir <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, vil datasettet <code>pool\/parent\/child<\/code> bli montert i systemet som <code>\/lol<\/code>.<\/p>\n<p>I tillegg til datasettene, m\u00e5 vi nevne volumene (zvols). Et volum er omtrent det samme som et datasett, bortsett fra at det faktisk ikke har et filsystem \u2013 det er bare et blokkeringsenhet. Du kan for eksempel lage <code>zvol<\/code> med navnet <code>mypool\/myzvol<\/code>, deretter formatere det med filsystemet ext4, og deretter montere dette filsystemet \u2013 n\u00e5 har du et ext4-filsystem, men med st\u00f8tte for alle ZFS-sikkerhetsfunksjonene! Dette kan virke meningsl\u00f8st p\u00e5 \u00e9n datamaskin, men gir mye mer mening som backend n\u00e5r du eksporterer iSCSI-enheter.<\/p>\n<h3>Units<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>En fil er representert av en eller flere blokker. Hver blokk lagres p\u00e5 ett virtuelt enhet. St\u00f8rrelsen p\u00e5 blokkene er vanligvis lik parameteren <b>recordsize<\/b>, men kan reduseres til <b>2^ashift<\/b>, hvis det inneholder metadata eller en liten fil.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vi mener virkelig, <b>faktisk<\/b> at vi ikke sp\u00f8ker med det enorme ytelsestapet hvis vi setter en for liten ashift.<\/i><\/p>\n<p>I ZFS-pool gemmes alle data, inklusive metadata, i blokke. Den maksimale blokst\u00f8rrelse for hver dataset defineres i egenskaben <code>recordsize<\/code> (optagelsesst\u00f8rrelse). Optagelsesst\u00f8rrelsen kan \u00e6ndres, men dette vil ikke \u00e6ndre st\u00f8rrelsen eller placeringen af eventuelle blokke, der allerede er skrevet til datas\u00e6ttet - det g\u00e6lder kun for nye blokke, efterh\u00e5nden som de skrives.<\/p>\n<p>Medmindre andet er angivet, er den aktuelle standard optagelsesst\u00f8rrelse 128 KiB. Dette er en slags kompliceret kompromis, hvor ydelsen vil v\u00e6re acceptabel, men ikke optimal i de fleste tilf\u00e6lde. <code>Optagelsesst\u00f8rrelse<\/code> kan indstilles til enhver v\u00e6rdi fra 4K til 1M (med yderligere indstillinger <code>recordsize<\/code> kan indstilles endnu st\u00f8rre, men det er sj\u00e6ldent en god id\u00e9).<\/p>\n<p>Enhver blok henviser kun til data fra \u00e9n fil - du kan ikke presse to forskellige filer ind i \u00e9n blok. Hver fil best\u00e5r af en eller flere blokke, afh\u00e6ngigt af st\u00f8rrelsen. Hvis filst\u00f8rrelsen er mindre end optagelsesst\u00f8rrelsen, vil den blive gemt i en mindre blok - for eksempel vil en blok med en fil p\u00e5 2 KiB kun optage \u00e9n 4 KiB sektor p\u00e5 disken.<\/p>\n<p>Hvis filen er stor nok og kr\u00e6ver flere blokke, vil alle optagelser med denne fil have st\u00f8rrelsen <code>recordsize<\/code>\u00a0\u2014 inklusive den sidste optagelse, hvis hovedpart kan v\u00e6re <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">ubrugeligt rum.<\/a><\/noindex>.<\/p>\n<p>Zvol-m\u00e6ngder har ikke egenskaben <code>recordsize<\/code>\u00a0\u2014 i stedet har de en tilsvarende egenskab <code>volblocksize.<\/code>.<\/p>\n<h3>Sektorer<\/h3>\n<p>\nDen sidste, mest grundl\u00e6ggende byggeklods er sektoren. Det er den mindste fysiske enhed, der kan skrives eller l\u00e6ses fra det underliggende device. I flere \u00e5rtier har de fleste diske brugt sektorer p\u00e5 512 byte. I de seneste \u00e5r har de fleste diske v\u00e6ret indstillet til 4 KiB-sektorer, og i nogle - is\u00e6r SSD'er - 8 KiB-sektorer eller endda st\u00f8rre.<\/p>\n<p>I ZFS-systemet er der en egenskab, der g\u00f8r det muligt at indstille sektorst\u00f8rrelsen manuelt. Denne egenskab <code>ashift<\/code>. Det er lidt forvirrende, at ashift er en potens af to. For eksempel, <code>ashift=9<\/code> betyder sektorst\u00f8rrelse 2^9 eller 512 byte.<\/p>\n<p>ZFS anmoder operativsystemet om detaljerede oplysninger om hver blok enhed, n\u00e5r det tilf\u00f8jes til en ny vdev, og teoretisk set indstiller det automatisk ashift korrekt baseret p\u00e5 disse oplysninger. Desv\u00e6rre lyver mange diske om deres sektorst\u00f8rrelse for at bevare kompatibiliteten med Windows XP (som ikke kunne forst\u00e5 diske med andre sektorst\u00f8rrelser).<\/p>\n<p>Dette betyder, at ZFS-administratorer st\u00e6rkt anbefales at kende den faktiske sektorst\u00f8rrelse af deres enheder og manuelt indstille <code>ashift<\/code>. Hvis en for lille ashift er indstillet, stiger antallet af l\u00e6se-\/skriveoperationer astronomisk. S\u00e5ledes betyder skrivning af 512-bytes 'sektorer' til en faktisk sektor p\u00e5 4 KiB, at det er n\u00f8dvendigt f\u00f8rst at skrive den 'sektor', s\u00e5 l\u00e6se den 4 KiB sektor, \u00e6ndre den med den anden 512-bytes 'sektor', skrive den tilbage til en ny 4 KiB sektor og s\u00e5 videre for hver skrivning.<\/p>\n<p>I den virkelige verden rammer en s\u00e5dan straf SSD'er fra Samsung EVO, for hvilke der skal v\u00e6re <code>ashift=13<\/code>, men disse SSD'er lyver om deres sektorst\u00f8rrelse, og derfor er standardindstillingen <code>ashift=9<\/code>. Hvis en erfaren systemadministrator ikke \u00e6ndrer denne parameter, fungerer denne SSD <i>langsommere<\/i> som en almindelig magnetisk HDD.<\/p>\n<p>Til sammenligning er der n\u00e6sten ingen straf for en for stor st\u00f8rrelse <code>ashift<\/code> . Der er ingen reel neds\u00e6ttelse af ydeevnen, og stigningen i ubrugt plads er uendeligt lille (eller lig nul ved aktiveret kompression). Derfor anbefaler vi kraftigt, at selv de diske, der faktisk bruger 512-bytes sektorer, skal indstille <code>ashift=12<\/code> eller endda <code>ashift=13<\/code>, for at se mod fremtiden med tillid.<\/p>\n<p>Egenskab <code>ashift<\/code> indstilles for hver virtuel enhed vdev, og <i>ikke for puljen<\/i>, som mange fejlagtigt tror - og \u00e6ndres ikke efter installation. Hvis du ved en fejltagelse har \u00e6ndret <code>ashift<\/code> da du tilf\u00f8jede en ny vdev til puljen, har du uopretteligt forurenet denne pulje med en enhed med lav ydeevne, og der er som regel ikke andet valg end at \u00f8del\u00e6gge puljen og starte forfra. Selv fjernelse af vdev redder ikke fra den forkert indstillede <code>ashift<\/code>!<\/p>\n<h3>Skrivningsmekanismen<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hvis et almindeligt filsystem skal skrive data igen - \u00e6ndrer det hver blok, hvor den st\u00e5r<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Filssystemet med skriv-kopiering skriver en ny version af blokken og ul\u00e5ser derefter den gamle version.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>I abstrakt forstand, hvis man ser bort fra den faktiske fysiske placering af blokke, forenkles vores \u201edatakometa\u201c til et \u201edatorm\u201c som bev\u00e6ger sig fra venstre mod h\u00f8jre p\u00e5 kortet af det tilg\u00e6ngelige rum.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nu kan vi f\u00e5 en god forst\u00e5else for, hvordan snapshot af skriv-kopiering fungerer \u2014 hver blok kan tilh\u00f8re flere snapshots og bevares, indtil alle tilknyttede snapshots fjernes.<\/i><\/p>\n<p>Skriv-kopieringsmekanisme (Copy on Write, CoW) er den grundl\u00e6ggende basis for, hvad der g\u00f8r ZFS til et s\u00e5 fantastisk system. Hovedkonceptet er enkelt \u2014 hvis du beder et traditionelt filsystem om at \u00e6ndre en fil, vil det g\u00f8re pr\u00e6cist det, du bad om. Hvis du beder et filsystem med skriv-kopiering om at g\u00f8re det samme, vil det sige \u201eokay\u201c \u2014 men lyve for dig.<\/p>\n<p>I stedet skriver filsystemet med skriv-kopiering en ny version af den \u00e6ndrede blok og opdaterer derefter filmetadataene for at bryde forbindelsen til den gamle blok og binde den til den nye blok, som du lige har skrevet.<\/p>\n<p>Frakoblingen af den gamle blok og bindingen af den nye udf\u00f8res i en enkelt operation, s\u00e5 den ikke kan afbrydes \u2014 hvis du slukker str\u00f8mmen, efter at det er sket, har du en ny filversion, og hvis du slukker str\u00f8mmen f\u00f8r, har du den gamle version. I begge tilf\u00e6lde vil der ikke opst\u00e5 konflikter i filsystemet.<\/p>\n<p>Skriv-kopiering i ZFS foreg\u00e5r ikke kun p\u00e5 filsystemniveau, men ogs\u00e5 p\u00e5 diskstyringsniveau. Det betyder, at ZFS ikke er modtagelig for skrivefejl (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">fejl i RAID<\/a><\/noindex>) \u2014 et f\u00e6nomen, hvor b\u00e5ndet kun er blevet delvist skrevet, f\u00f8r systemet fejler, hvilket resulterer i et beskadiget array efter genstart. Her skrives b\u00e5ndet atomisk, vdev er altid konsistent, og <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob er din onkel.<\/a><\/noindex>.<\/p>\n<h3>ZIL: ZFS intentionslog.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZFS-systemet h\u00e5ndterer synkroniserede skrivninger p\u00e5 en s\u00e6rlig m\u00e5de \u2014 det gemmer dem midlertidigt, men straks i ZIL, f\u00f8r de senere skrives permanent sammen med asynkrone skrivninger.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Normalt bliver data skrevet til ZIL aldrig l\u00e6st igen. Men det er muligt efter et systemfejl.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, eller det sekund\u00e6re LOG-enhed, er blot et specielt - og helst meget hurtigt - vdev, hvor ZIL kan opbevares adskilt fra det prim\u00e6re lager.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Efter et nedbrud genskabes alle de beskidte data i ZIL - i dette tilf\u00e6lde er ZIL placeret p\u00e5 SLOG, s\u00e5 de genskabes netop derfra.<\/i><\/p>\n<p>Der er to hovedkategorier af skriveoperationer - synkrone (sync) og asynkrone (async). For de fleste arbejdsbelastninger er langt st\u00f8rstedelen af skriveoperationerne asynkrone - filsystemet tillader at aggregere dem og udlevere i pakker, hvilket reducerer fragmentering og betydeligt \u00f8ger b\u00e5ndbredden.<\/p>\n<p>Synkrone skrivninger er noget helt andet. N\u00e5r en applikation anmoder om en synkron skrivning, siger den til filsystemet: 'Du skal gemme dette i non-volatile hukommelse, <i>lige nu<\/i>, og indtil da kan jeg ikke g\u00f8re noget mere'. Derfor skal synkrone skrivninger straks bekr\u00e6ftes p\u00e5 disken - og hvis det \u00f8ger fragmenteringen eller neds\u00e6tter b\u00e5ndbredden, s\u00e5 v\u00e6r s\u00e5dan.<\/p>\n<p>ZFS h\u00e5ndterer synkrone skrivninger anderledes end almindelige filsystemer - i stedet for straks at indl\u00e6se dem i det almindelige lager, bevarer ZFS dem i et s\u00e6rligt opbevaringsomr\u00e5de kaldet ZFS Intent Log, eller ZIL. Hemmeligheden er, at disse poster <i>ogs\u00e5<\/i> forbliver i hukommelsen, mens de er aggregeret sammen med almindelige asynkrone skriveanmodninger, for senere at blive udskrevet til lager som helt normale TXG (Transaction Groups).<\/p>\n<p>I normal drift skrives ZIL, og den l\u00e6ses aldrig igen. N\u00e5r skriveanmodninger fra ZIL efter et par \u00f8jeblikke bekr\u00e6ftes i det prim\u00e6re lager i almindelige TXG fra RAM, frakobles de fra ZIL. Det eneste tidspunkt, hvor noget l\u00e6ses fra ZIL, er ved import af puljen.<\/p>\n<p>Hvis der opst\u00e5r et ZFS-nedbrud - et systemfejl eller str\u00f8msvigt - n\u00e5r der er data i ZIL, vil disse data blive l\u00e6st under n\u00e6ste import af puljen (f.eks. ved genstart af det katastrofeafhj\u00e6lpende system). Alt, hvad der er i ZIL, vil blive l\u00e6st, samlet i TXG-grupper, gemt i det prim\u00e6re lager og derefter frakoblet fra ZIL under importprocessen.<\/p>\n<p>En af hj\u00e6lpeklasserne vdev kaldes LOG eller SLOG, det sekund\u00e6re LOG-enhed. Dens opgave er at give poolen en separat og, helst, meget hurtigere vdev-enhed med meget h\u00f8j skrivebestandighed til opbevaring af ZIL, i stedet for at opbevare ZIL p\u00e5 det prim\u00e6re vdev-lager. ZIL opf\u00f8rer sig ens uanset opbevaringsstedet, men hvis vdev med LOG har en meget h\u00f8j skriveydelse, vil synkrone skrivninger finde sted hurtigere.<\/p>\n<p>Tilf\u00f8jelse af vdev med LOG til poolen vil ikke <b>kan ikke<\/b> forbedre ydeevnen for asynkrone skrivninger \u2013 selv hvis du tvinger alle skrivninger til ZIL med <code>zfs set sync=always<\/code>, vil de stadig v\u00e6re bundet til det prim\u00e6re lager i TXG p\u00e5 samme m\u00e5de og i samme tempo som uden log. Den eneste direkte forbedring i ydeevnen er forsinkelsen af synkrone skrivninger (da h\u00f8jere loghastighed accelererer udf\u00f8relsen af operationer <code>synk<\/code>).<\/p>\n<p>Men i et milj\u00f8, der allerede kr\u00e6ver mange synkrone skrivninger, kan vdev LOG indirekte accelerere asynkrone skrivninger og ikke-cachede l\u00e6sninger. Afsendelse af ZIL-skrivninger til en separat vdev LOG betyder mindre konkurrence om IOPS i det prim\u00e6re lager, hvilket forbedrer ydeevnen for alle l\u00e6se- og skriveoperationer i nogen grad.<\/p>\n<h3>Snapshots<\/h3>\n<p>\nSkrive-ved-kopi mekanismen er ogs\u00e5 en n\u00f8dvendig grundpille for atomare snapshots af ZFS og inkrementel asynkron replikering. I et aktivt filsystem findes der et tr\u00e6 af pegepinde, der markerer alle poster med nuv\u00e6rende data \u2013 n\u00e5r du tager et snapshot, laver du blot en kopi af dette tr\u00e6 af pegepinde.<\/p>\n<p>N\u00e5r en post i det aktive filsystem overskrives, skriver ZFS f\u00f8rst den nye version af blokken til ikke-brugt plads. Derefter adskiller den den gamle version af blokken fra det nuv\u00e6rende filsystem. Men hvis et snapshot refererer til den gamle blok, forbliver den stadig u\u00e6ndret. Den gamle blok vil faktisk ikke blive genoprettet som ledig plads, indtil alle snapshots, der refererer til denne blok, er slettet!<\/p>\n<h3>Replikering<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Mit Steam-bibliotek i 2015 fyldte 158 GiB og indeholdt 126.927 filer. Det er ret t\u00e6t p\u00e5 den optimale situation for rsync \u2013 ZFS-replikering over nettet var \"kun\" 750% hurtigere.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>I det samme netv\u00e6rk er replikationen af en 40-gigabyte Windows 7-maskinbillede en helt anden historie. ZFS-replikation finder sted 289 gange hurtigere end rsync \u2013 eller \"kun\" 161 gange hurtigere, hvis du er nok vidende til at kalde rsync med n\u00f8glen --inplace.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Introduktion til ZFS: lager- og ydeevne\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00e5r en maskinbillede skaleres, skaleres rsync-problemerne sammen med den. En st\u00f8rrelse p\u00e5 1,9 TiB er ikke s\u00e5 stor for et moderne maskinbillede \u2013 men det er stort nok til, at ZFS-replikation viser sig at v\u00e6re 1148 gange hurtigere end rsync, selv med rsync-argumentet --inplace.<\/i><\/p>\n<p>N\u00e5r du f\u00f8rst forst\u00e5r, hvordan snapshots fungerer, er det ikke sv\u00e6rt at fange essensen af replikation. Da et snapshot blot er et tr\u00e6 af pegepinde p\u00e5 poster, f\u00f8lger det, at hvis vi laver <code>zfs send<\/code> et snapshot, s\u00e5 sender vi b\u00e5de dette tr\u00e6 og alle tilknyttede poster. N\u00e5r vi overf\u00f8rer dette <code>zfs send<\/code> i <code>zfs receive<\/code> til det m\u00e5lobjekt, skriver det b\u00e5de det faktiske indhold af blokken samt tr\u00e6et af pegepinde, der refererer til blokkene, i det m\u00e5lretter datas\u00e6t.<\/p>\n<p>Det bliver endnu mere interessant i det andet <code>zfs send<\/code>. Nu har vi to systemer, hver med <code>poolname\/datasetname@1<\/code>, og du tager et nyt snapshot <code>poolname\/datasetname@2<\/code>. S\u00e5 i den oprindelige pulje har du <code>datasetname@1<\/code> og <code>datasetname@2<\/code>, mens den m\u00e5lrettede pulje indtil videre kun har det f\u00f8rste snapshot. <code>datasetname@1<\/code>.<\/p>\n<p>Da vi har et f\u00e6lles snapshot mellem kilde og m\u00e5l <code>datasetname@1<\/code>, kan vi lave <i>en inkrementel<\/i> <code>zfs send<\/code> over det. N\u00e5r vi siger til systemet <code>zfs send -i poolname\/datasetname@1 poolname\/datasetname@2<\/code>, sammenligner det de to tr\u00e6er af pegepinde. Enhver pegepind, der kun eksisterer i <code>@2<\/code>, refererer klart til nye blokke \u2013 derfor har vi brug for indholdet af disse blokke.<\/p>\n<p>I det fjerntliggende system er behandlingen af den inkrementelle <code>send<\/code> lige s\u00e5 enkel. F\u00f8rst skriver vi alle nye poster inkluderet i str\u00f8mmen <code>send<\/code>, og derefter tilf\u00f8jer vi pegepindene til disse blokke. Voila, vi har <code>@2<\/code> i det nye system!<\/p>\n<p>Asynkron inkrementel replikation af ZFS er et k\u00e6mpe forbedring i forhold til tidligere metoder, der ikke er baseret p\u00e5 snapshots, s\u00e5som rsync. I begge tilf\u00e6lde overf\u00f8res kun de \u00e6ndrede data \u2013 men rsync skal f\u00f8rst <i>l\u00e6se<\/i> l\u00e6se alle data fra begge sider for at kontrollere summen og sammenligne den. I mods\u00e6tning hertil l\u00e6ser ZFS-replikation ikke noget bortset fra tr\u00e6erne af pegepinde \u2013 og eventuelle blokke, der ikke er repr\u00e6senteret i det f\u00e6lles snapshot.<\/p>\n<h3>Indbygget kompression<\/h3>\n<p>\nKopieringsmekanismen ved skrivning forenkler ogs\u00e5 systemet med indbygget kompression. I traditionelle filsystemer er kompression problematisk \u2014 b\u00e5de den gamle og den nye version af \u00e6ndrede data befinder sig i det samme rum.<\/p>\n<p>Hvis vi ser p\u00e5 et datastykke midt i en fil, der begynder sit liv som en megabyte af nuller fra 0x00000000 og fremad \u2014 s\u00e5 er det meget nemt at komprimere det til en enkelt sektor p\u00e5 disken. Men hvad sker der, hvis vi erstatter denne megabyte af nuller med en megabyte af ikke-komprimerbare data, s\u00e5som JPEG eller pseudorandom st\u00f8j? Pludselig vil denne megabyte data kr\u00e6ve ikke \u00e9n, men 256 sektorer p\u00e5 4 KiB, mens der kun er reserveret \u00e9n sektor p\u00e5 dette sted p\u00e5 disken.<\/p>\n<p>ZFS har ikke dette problem, da \u00e6ndrede poster altid skrives til ubrugt plads \u2014 den oprindelige blok optager kun \u00e9n sektor p\u00e5 4 KiB, og den nye post vil optage 256, men det er ikke et problem \u2014 det nyligt \u00e6ndrede stykke fra \"midten\" af filen ville blive skrevet i ubrugt plads uanset om dens st\u00f8rrelse \u00e6ndrede sig eller ej, s\u00e5 for ZFS er det en ganske almindelig situation.<\/p>\n<p>Indbygget kompression i ZFS er deaktiveret som standard, og systemet tilbyder tilsluttede algoritmer \u2014 lige nu inkluderer de LZ4, gzip (1-9), LZJB og ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 det er en stream-algoritme, der tilbyder ekstremt hurtig kompression og dekompression og pr\u00e6stationsgevinster for de fleste brugsscenarier \u2014 selv p\u00e5 ret langsomme CPU'er.\n<\/li>\n<li><b>GZIP<\/b> \u2014 en anerkendt algoritme, som alle brugere af Unix-systemer kender og elsker. Den kan implementeres med kompressionsniveauer fra 1-9, hvor kompressionen og CPU-forbruget stiger, jo t\u00e6ttere man kommer p\u00e5 niveau 9. Algoritmen fungerer godt for alle tekstbaserede (eller andre ekstremt komprimerbare) anvendelser, men ellers kan den ofte for\u00e5rsage CPU-problemer \u2014 brug den med forsigtighed, is\u00e6r p\u00e5 h\u00f8jere niveauer.\n<\/li>\n<li><b>LZJB<\/b> \u2014 den oprindelige algoritme i ZFS. Den er for\u00e6ldet og b\u00f8r ikke l\u00e6ngere bruges, LZ4 overg\u00e5r den p\u00e5 alle punkter.\n<\/li>\n<li><b>ZLE<\/b> \u2014 nullniveau kodning, Zero Level Encoding. Den ber\u00f8rer slet ikke normale data, men komprimerer store sekvenser af nuller. Dette er nyttigt til helt ukomprimerbare datas\u00e6t (f.eks. JPEG, MP4 eller andre allerede komprimerede formater), da det ignorerer ukomprimerbare data, men komprimerer det ubenyttede rum i de endelige poster.<\/li>\n<\/ul>\n<p>\nVi anbefaler LZ4-komprimering til n\u00e6sten alle anvendelsessituationer; pr\u00e6stationsstraffen ved m\u00f8det med ukomprimerbare data er meget lille, og <i>v\u00e6kst<\/i> pr\u00e6stationen for typiske data er betydelig. Kopiering af et virtuelt maskinebillede til en ny installation af Windows-operativsystemet (nyinstalleret OS, ingen data indeni endnu) med <code>compression=lz4<\/code> foregik 27% hurtigere end med <code>compression=none<\/code>, i <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">denne test fra 2015<\/a><\/noindex>.<\/p>\n<h1>ARC\u00a0\u2014 adaptiv erstatningsbuffer<\/h1>\n<p>\nZFS\u00a0\u2014 er det eneste moderne filsystem, vi kender, der bruger sin egen l\u00e6sebuffer mekanisme, og ikke er afh\u00e6ngig af kernels sidecache til at opbevare kopier af nyligt l\u00e6ste blokke i RAM.<\/p>\n<p>Selvom den egen cache ikke er uden sine problemer \u2014 ZFS kan ikke reagere p\u00e5 nye anmodninger om hukommelsesallokering lige s\u00e5 hurtigt som kernen, derfor kan en ny anmodning <code>malloc()<\/code> om hukommelsesallokering mislykkes, hvis den kr\u00e6ver RAM, der aktuelt er optaget af ARC. Men der er gode grunde til at bruge den egen cache, i det mindste nu.<\/p>\n<p>Alle kendte moderne operativsystemer, herunder MacOS, Windows, Linux og BSD, bruger LRU (Least Recently Used) algoritmen til at implementere sidecache. Dette er en simpel algoritme, der flytter den cachede blok 'op i k\u00f8en' efter hver l\u00e6sning og udskifter blokke 'nederst i k\u00f8en' efter behov for at tilf\u00f8je nye cachemiss (blokke, der skulle have v\u00e6ret l\u00e6st fra disken og ikke fra cachen) op.<\/p>\n<p>Algoritmen fungerer normalt godt, men i systemer med store arbejdsdatas\u00e6t f\u00f8rer LRU let til thrashing \u2014 udskiftning af ofte n\u00f8dvendige blokke for at frig\u00f8re plads til blokke, der aldrig vil blive l\u00e6st igen fra cachen.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 en langt mindre naiv algoritme, der kan betragtes som en \"v\u00e6gtet\" cache. Efter hver afl\u00e6sning af en cachet blok, bliver den lidt \"tungere\" og sv\u00e6rere at fjerne \u2014 og selv efter fjernelse bliver blokken <i>sporbar<\/i> i en bestemt periode. En blok, der er blevet fjernet, men som derefter skal l\u00e6ses tilbage i cachen, vil ogs\u00e5 blive \"tungere\".<\/p>\n<p>Det endelige resultat af dette er en cache med en langt h\u00f8jere hit ratio \u2014 forholdet mellem hits i cachen (l\u00e6sninger udf\u00f8rt fra cachen) og misses (l\u00e6sninger fra disken). Dette er en ekstremt vigtig statistik \u2014 ikke blot behandles cache-hits hurtigere, men ogs\u00e5 cache-misses kan behandles hurtigere, da jo flere cache-hits, desto f\u00e6rre parallelle anmodninger til disken og dermed mindre forsinkelse for de resterende misses, som skal behandles fra disken.<\/p>\n<h1>Konklusion<\/h1>\n<p>\nEfter at have studeret den grundl\u00e6ggende semantik af ZFS \u2014 hvordan kopiering ved skrivning fungerer, samt forholdet mellem lagringspuljer, virtuelle enheder, blokke, sektorer og filer \u2014 er vi klar til at diskutere den faktiske ydeevne med reelle tal.<\/p>\n<p>I den n\u00e6ste del vil vi se p\u00e5 den faktiske ydeevne af puljer med spejl-vdev og RAIDz, sammenlignet med hinanden, samt sammenlignet med de traditionelle RAID-topologier i Linux-kernen, som vi har unders\u00f8gt. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">tidligere<\/a><\/noindex>.<\/p>\n<p>F\u00f8rst ville vi kun se p\u00e5 det grundl\u00e6ggende \u2014 selve ZFS-topologierne \u2014 men efter <i>s\u00e5dan<\/i> er vi klar til at tale om mere avanceret konfiguration og tuning af ZFS, inklusive brugen af hj\u00e6lpetyper af vdev, s\u00e5som L2ARC, SLOG og Special Allocation.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/504692\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Grundl\u00e6ggende ZFS: Lagringssystem og ydeevne | ProHoster","description":"I denne for\u00e5r har vi allerede diskuteret nogle.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-01T17:42:21+00:00","article:modified_time":"2020-06-01T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83582","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:14:37","updated":"2022-09-28 10:00:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}