{"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\/nl\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Basisprincipes van ZFS: opslag- en prestatiessysteem","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeze lente hebben we al enkele inleidende onderwerpen besproken, zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">hoe u de snelheid van uw schijven kunt controleren<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">wat RAID is<\/a><\/noindex>. In de tweede hebben we zelfs beloofd om de prestaties van verschillende multi-schijf topologie\u00ebn in ZFS verder te onderzoeken. Dit is een next-gen bestandssysteem dat momenteel overal wordt ge\u00efmplementeerd: van <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> tot <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 \/>\nNou, vandaag is de meest geschikte dag om kennis te maken met ZFS, nieuwsgierige lezers. Weet gewoon dat, volgens de bescheiden schatting van de OpenZFS-ontwikkelaar Matt Arons, 'het echt moeilijk is'.<\/p>\n<p>Maar voordat we bij de cijfers komen - en die komen, beloof ik - voor alle varianten van de acht-schijfconfiguraties van ZFS, moeten we het hebben over <i>hoe<\/i> hoe ZFS data op de schijf opslaat.<\/p>\n<h1>Zpool, vdev en device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dit diagram van de volledige pool bevat drie ondersteunende vdev's, \u00e9\u00e9n van elke klasse, en vier voor RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Normaal gesproken zijn er geen redenen om een pool te cre\u00ebren van incompatibele types en maten vdev - maar als je dat wilt, staat er niets in de weg.<\/i><\/p>\n<p>Om het ZFS-bestandssysteem echt te begrijpen, moet je goed kijken naar de werkelijke structuur. Ten eerste combineert ZFS de traditionele niveaus van volume- en bestandssysteembeheer. Ten tweede maakt het gebruik van een transactionele copy-on-write-mechanisme. Deze kenmerken maken het systeem structureel zeer verschillend van reguliere bestandssystemen en RAID-arrays. De eerste set bouwstenen om te begrijpen: dat is de opslagpool (zpool), het virtuele apparaat (vdev) en het fysieke apparaat (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nDe opslagpool zpool is de bovenste structuur van ZFS. Elke pool bevat een of meerdere virtuele apparaten. Op hun beurt bevat elk van deze een of meerdere fysieke apparaten (device). Virtuele pools zijn autonome blokken. E\u00e9n fysiek apparaat kan twee of meer gescheiden pools bevatten, maar elke pool is volledig onafhankelijk van de andere. Pools kunnen geen gebruik maken van virtuele apparaten.<\/p>\n<p>De redundantie van ZFS bevindt zich op het niveau van de virtuele apparaten en niet op het niveau van de pools. Op het niveau van de pools is er absoluut geen redundantie - als een vdev-opslag of een speciaal vdev verloren gaat, gaat de hele pool samen met hem verloren.<\/p>\n<p>Moderne opslagpools kunnen het verlies van cache of log van een virtueel apparaat overleven - hoewel ze een kleine hoeveelheid vuile gegevens kunnen verliezen als ze het vdev-log verliezen tijdens een stroomuitval of systeemfout.<\/p>\n<p>Er heerst een wijdverspreide misvatting dat 'data stripes' (stripes) in ZFS over de hele pool worden geschreven. Dit is onjuist. Een Zpool is niet zomaar een leuk RAID0, het is eerder een leuk <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> met een complex en variabel mechanisme voor gegevensverdeling.<\/p>\n<p>Over het algemeen worden gegevens verdeeld over de beschikbare virtuele apparaten op basis van de beschikbare vrije ruimte, zodat ze theoretisch allemaal gelijktijdig gevuld zullen worden. In latere versies van ZFS wordt het huidige gebruik (utilisatie) van vdev overwogen - als een virtueel apparaat veel zwaarder belast is dan een ander (bijvoorbeeld door een hoge leesbelasting), wordt het tijdelijk overgeslagen voor schrijven, ondanks de hoogste graad van vrije ruimte.<\/p>\n<p>Het mechanisme voor het bepalen van de utilisatie, ingebouwd in moderne gegevensverdelingsmethoden van ZFS, kan de latentie verminderen en de doorvoer verhogen tijdens perioden van ongewoon hoge belasting - maar dat is geen <i>blanke cheque<\/i> voor onvrijwillige menging van langzame HDD's en snelle SSD's in \u00e9\u00e9n pool. Zo'n ongelijkwaardige pool werkt nog steeds met de snelheid van het langzame apparaat, dat wil zeggen alsof het volledig uit zulke apparaten bestaat.<\/p>\n<h3>vdev<\/h3>\n<p>\nElke opslagpool bestaat uit een of meerdere virtuele apparaten (virtual device, vdev). Elk vdev omvat op zijn beurt een of meerdere fysieke apparaten. De meeste virtuele apparaten worden gebruikt voor eenvoudige gegevensopslag, maar er zijn verschillende ondersteunende klassen vdev, waaronder CACHE, LOG en SPECIAL. Elk van deze vdev-typen kan een van de vijf topologie\u00ebn hebben: enkel apparaat (single-device), RAIDz1, RAIDz2, RAIDz3 of mirror.<\/p>\n<p>RAIDz1, RAIDz2 en RAIDz3 zijn speciale varianten van wat oudere systemen een RAID met dubbele (diagonaal) pariteit zouden noemen. 1, 2 en 3 verwijzen naar het aantal pariteitsblokken dat aan elke datalagi is toegewezen. In plaats van aparte schijven voor pariteit, verdelen virtuele RAIDz-apparaten deze pariteit gelijkmatig over de schijven. Een RAIDz-array kan zoveel schijven verliezen als het aantal pariteitsblokken; als het er nog \u00e9\u00e9n verliest, komt het in storing en neemt het de opslagpool mee.<\/p>\n<p>In gemirrorde virtuele apparaten (mirror vdev) wordt elk blok op elk apparaat in de vdev opgeslagen. Hoewel de meest voorkomende dubbele mirror (two-wide) is, kan er in een mirror een willekeurig aantal apparaten aanwezig zijn \u2013 in grote installaties worden vaak driedubbele mirrors gebruikt voor hogere leesprestaties en fouttolerantie. Een mirror vdev kan elke storing overleven zolang er minstens \u00e9\u00e9n apparaat in de vdev blijft functioneren.<\/p>\n<p>Enkele vdev's zijn van nature riskant. Zo'n virtueel apparaat overleeft geen enkele storing \u2013 en als het wordt gebruikt als opslag of speciaal vdev, dan zal de storing leiden tot de vernietiging van de hele pool. Wees hier zeer, zeer voorzichtig.<\/p>\n<p>Virtuele apparaten CACHE, LOG en SPECIAL kunnen worden gemaakt volgens een van de bovenstaande topologie\u00ebn \u2013 maar onthoud dat het verlies van een virtueel SPECIAL-apparaat betekent dat de pool verloren gaat, daarom wordt een redundante topologie sterk aanbevolen.<\/p>\n<h3>apparaat<\/h3>\n<p>\nWaarschijnlijk de eenvoudigste term in ZFS om te begrijpen \u2013 het is letterlijk een blokapparaat voor willekeurige toegang. Onthoud dat virtuele apparaten zijn opgebouwd uit afzonderlijke apparaten en dat de pool uit virtuele apparaten bestaat.<\/p>\n<p>Schijven \u2013 magnetisch of solid-state \u2013 zijn de meest voorkomende blokapparaten die worden gebruikt als bouwstenen van vdev. Echter, elk apparaat met een descriptor in \/dev is geschikt \u2013 dus zelfs hele hardware RAID-arrays kunnen als afzonderlijke apparaten worden gebruikt.<\/p>\n<p>Een eenvoudige raw-bestand is een van de belangrijkste alternatieve blokapparaten waaruit een vdev kan worden opgebouwd. Testpools uit <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">sparse bestanden<\/a><\/noindex>\u00a0zijn een zeer handige manier om poolcommando's te testen en te zien hoeveel ruimte beschikbaar is in de pool of het virtuele apparaat van deze topologie.<\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Je kunt binnen enkele seconden een testpool van dunne schijven aanmaken - maar vergeet niet om daarna de hele pool en zijn componenten te verwijderen.<\/i> <\/p>\n<p>Stel dat je een server wilt opzetten met acht schijven en van plan bent schijven van 10 TB (~9300 GiB) te gebruiken - maar je weet niet zeker welke topologie het beste aansluit bij jouw behoeften. In het bovenstaande voorbeeld bouwen we binnen enkele seconden een testpool van dunne schijven - en weten nu dat een RAIDz2 vdev van acht schijven van 10 TB 50 TiB nuttige capaciteit biedt.<\/p>\n<p>Een andere bijzondere klasse apparaten zijn SPARE (reserve). Apparaten met hot-swappable mogelijkheden behoren, in tegenstelling tot gewone apparaten, tot de hele pool en niet tot \u00e9\u00e9n virtueel apparaat. Als een vdev in de pool uitvalt en een reserveapparaat is verbonden met de pool en beschikbaar, wordt het automatisch toegevoegd aan de getroffen vdev.<\/p>\n<p>Nadat het reserveapparaat aan de getroffen vdev is gekoppeld, begint het met het ontvangen van kopie\u00ebn of reconstructies van gegevens die op het ontbrekende apparaat zouden moeten staan. In traditionele RAID wordt dit herstel genoemd (rebuilding), terwijl dit in ZFS 'herstel van redundantie' (resilvering) wordt genoemd.<\/p>\n<p>Het is belangrijk op te merken dat reserveapparaten niet permanent de defecte apparaten vervangen. Ze zijn slechts tijdelijke vervangers om de tijd te verkorten waarin er een degradatie van de vdev is. Nadat de beheerder het defecte vdev-apparaat heeft vervangen, vindt er herstel van redundantie plaats op dit permanente apparaat, en wordt de SPARE losgekoppeld van de vdev en opnieuw gebruikt als reserve voor de hele pool.<\/p>\n<h1>Datasets, blokken en sectoren<\/h1>\n<p>\nDe volgende set bouwstenen die we moeten begrijpen in onze reis door ZFS heeft minder met hardware te maken, en meer met hoe de gegevens zelf zijn georganiseerd en opgeslagen. We slaan hier een paar niveaus over, zoals metaslab, om de details niet te overweldigen en het begrip van de algemene structuur te behouden.<\/p>\n<h3>Dataset<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wanneer we voor het eerst een dataset aanmaken, toont deze alle beschikbare ruimte van de pool. Daarna stellen we een quotum in - en veranderen we het inbouwpunt. Magie!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol is in wezen gewoon een dataset, zonder zijn laag van het bestandssysteem, dat we hier vervangen door een volkomen normaal bestandssysteem ext4.<\/i> <\/p>\n<p>Een ZFS-dataset is ongeveer vergelijkbaar met een standaard gemounte bestandssysteem. Net als een gewoon bestandssysteem lijkt het op het eerste gezicht \"gewoon weer een map\". Maar net als bij gewone gemounte bestandssystemen heeft elke ZFS-dataset zijn eigen set basis eigenschappen.<\/p>\n<p>In de eerste plaats kan er een toegewezen quotum voor de dataset zijn. Als je instelt <code>zfs set quota=100G poolname\/datasetname<\/code>, dan kun je niet meer schrijven naar de gemounte map <code>\/poolname\/datasetname<\/code> dan 100 GiB.<\/p>\n<p>Heb je de aanwezigheid \u2013 en afwezigheid \u2013 van schuine strepen aan het begin van elke regel opgemerkt? Elke dataset heeft zijn eigen plaats in zowel de ZFS-hi\u00ebrarchie als de hi\u00ebrarchie van het systeemmontage. In de ZFS-hi\u00ebrarchie is er geen leidende schuine streep \u2013 je begint met de naam van de pool en vervolgens de pad van de ene dataset naar de volgende. Bijvoorbeeld, <code>pool\/parent\/child<\/code> voor een dataset met de naam <code>kind<\/code> onder de bovenliggende dataset <code>parent<\/code> in de pool met de creatieve naam <code>pool<\/code>.<\/p>\n<p>Standaard zal het montagempunt van de dataset gelijk zijn aan zijn naam in de ZFS-hi\u00ebrarchie, met een schuine streep aan het begin \u2013 de pool met de naam <code>pool<\/code> zal worden gemonteerd als <code>\/pool<\/code>, de dataset <code>parent<\/code> wordt gemonteerd in <code>\/pool\/parent<\/code>, en de onderliggende dataset <code>kind<\/code> wordt gemonteerd in <code>\/pool\/parent\/child<\/code>. Echter, het systeemmontagempunt van de dataset kan worden gewijzigd.<\/p>\n<p>Als we opgeven <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, zal de dataset <code>pool\/parent\/child<\/code> in het systeem worden gemonteerd als <code>\/lol<\/code>.<\/p>\n<p>Naast datasets moeten we het hebben over volumes (zvols). Een volume is ongeveer vergelijkbaar met een dataset, behalve dat het feitelijk geen bestandssysteem heeft \u2013 het is gewoon een block device. Je kunt bijvoorbeeld een <code>zvol<\/code> met de naam <code>mypool\/myzvol<\/code>, vervolgens formatteren met het bestandssysteem ext4, en daarna dat bestandssysteem mounten \u2013 nu heb je een ext4-bestandssysteem, maar met ondersteuning voor alle ZFS-beveiligingsfuncties! Dit lijkt misschien onzinnig op \u00e9\u00e9n computer, maar heeft veel meer zin als backend bij het exporteren van een iSCSI-apparaat.<\/p>\n<h3>Modules<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Een bestand wordt gepresenteerd door een of meerdere blokken. Elk blok wordt op \u00e9\u00e9n virtueel apparaat opgeslagen. De grootte van het blok is meestal gelijk aan de parameter <b>recordsize<\/b>, maar kan worden verminderd tot <b>2^ashift<\/b>, als het metadata of een klein bestand bevat.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>We bedoelen echt, <b>inderdaad<\/b> we maken geen grappen over enorme prestatiedalingen als je ashift te klein instelt.<\/i><\/p>\n<p>In de ZFS-pool worden alle gegevens, inclusief metadata, opgeslagen in blokken. De maximale blokgrootte voor elke dataset wordt bepaald door de eigenschap <code>recordsize<\/code> (recordgrootte). De recordgrootte kan worden aangepast, maar dit verandert de grootte of locatie van bestaande blokken die al in de dataset zijn geschreven - het geldt alleen voor nieuwe blokken wanneer deze worden geschreven.<\/p>\n<p>Als niets anders is gedefinieerd, is de huidige recordgrootte standaard 128 KiB. Dit is een soort moeilijk compromis, waarbij de prestaties in de meeste gevallen niet ideaal, maar ook niet slecht zijn. <code>Recordgrootte<\/code> kan worden ingesteld op elke waarde van 4K tot 1M (met extra instellingen <code>recordsize<\/code> kan het zelfs groter worden ingesteld, maar dat is zelden een goed idee).<\/p>\n<p>Elk blok verwijst naar de gegevens van slechts \u00e9\u00e9n bestand - je kunt niet twee verschillende bestanden in \u00e9\u00e9n blok proppen. Elk bestand bestaat uit een of meerdere blokken, afhankelijk van de grootte. Als de bestandsgrootte kleiner is dan de recordgrootte, wordt het opgeslagen in een blok van kleinere grootte - bijvoorbeeld, een blok met een bestand van 2 KiB zal slechts \u00e9\u00e9n sector van 4 KiB op de schijf innemen.<\/p>\n<p>Als een bestand groot genoeg is en meerdere blokken vereist, dan zullen alle records met dat bestand een grootte hebben <code>recordsize<\/code>\u00a0- inclusief de laatste record, waarvan het grootste deel misschien <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">ongebruikt ruimte zal zijn.<\/a><\/noindex>.<\/p>\n<p>Zvol volumes hebben geen eigenschap <code>recordsize<\/code>\u00a0- in plaats daarvan hebben ze een equivalente eigenschap <code>volblocksize.<\/code>.<\/p>\n<h3>Sectoren<\/h3>\n<p>\nDe laatste, meest basale bouwsteen - de sector. Dit is de kleinste fysieke eenheid die kan worden geschreven of gelezen van het basisapparaat. Gedurende enkele tientallen jaren werden de meeste schijven geleverd met sectoren van 512 bytes. Tegenwoordig zijn de meeste schijven ingesteld op 4 KiB sectoren, en sommige, vooral SSD's, hebben sectoren van 8 KiB of zelfs meer.<\/p>\n<p>In het ZFS-systeem is er een eigenschap waarmee je handmatig de sectorgrootte kunt instellen. Deze eigenschap <code>ashift<\/code>. Het is een beetje verwarrend omdat ashift een macht van twee is. Bijvoorbeeld, <code>ashift=9<\/code> betekent een sector grootte van 2^9, of 512 bytes.<\/p>\n<p>ZFS vraagt bij het toevoegen van elk blokapparaat aan een nieuwe vdev gedetailleerde informatie van het besturingssysteem en stelt theoretisch automatisch de ashift correct in op basis van deze informatie. Helaas liegen veel schijven over hun sectorgrootte om compatibiliteit met Windows XP te behouden (dat niet in staat was om schijven met andere sectorformaten te begrijpen).<\/p>\n<p>Dit betekent dat een ZFS-beheerder ten zeerste wordt aangeraden om de werkelijke sectorgrootte van hun apparaten te kennen en deze handmatig in te stellen <code>ashift<\/code>. Als ashift te klein is ingesteld, neemt het aantal lees- en schrijfoperaties astronomisch toe. Het schrijven van 512-byte 'sectoren' naar een echte sector van 4 KiB betekent dat je eerst de eerste 'sector' moet schrijven, daarna de sector van 4 KiB moet lezen, deze moet wijzigen met de tweede 512-byte 'sector', deze terug moet schrijven naar de nieuwe sector van 4 KiB, en dat voor elke schrijfoperatie.<\/p>\n<p>In de echte wereld heeft deze straf een grote impact op de Samsung EVO SSD's, waarvoor <code>ashift=13<\/code>, maar deze SSD's liegen over hun sectorgrootte, en daarom wordt standaard ingesteld op <code>ashift=9<\/code>. Als de ervaren systeembeheerder deze parameter niet wijzigt, werkt deze SSD <i>trager<\/i> van een gewone magnetische HDD.<\/p>\n<p>Ter vergelijking, een te grote grootte heeft <code>ashift<\/code> bijna geen straf. Er is geen merkbare prestatievermindering en de toename van ongebruikt ruimte is verwaarloosbaar (of gelijk aan nul als compressie is ingeschakeld). Daarom raden we zelfs voor schijven die echt 512-byte sectoren gebruiken, aan om <code>ashift=12<\/code> of zelfs <code>ashift=13<\/code>, om zeker naar de toekomst te kijken.<\/p>\n<p>Eigenschap <code>ashift<\/code> wordt ingesteld voor elk virtueel apparaat vdev, en <i>niet voor de pool<\/i>, zoals velen ten onrechte denken \u2014 en wordt niet gewijzigd na de installatie. Als je per ongeluk deze instelling verstoort <code>ashift<\/code> bij het toevoegen van een nieuwe vdev aan de pool, heb je deze pool onherroepelijk verontreinigd met een apparaat met een lage prestatie, en meestal is er geen andere optie dan de pool te vernietigen en opnieuw te beginnen. Zelfs het verwijderen van de vdev zal niet helpen tegen de verstoorde configuratie. <code>ashift<\/code>!<\/p>\n<h3>Het mechanisme van copy-on-write<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Als een gewone bestandssysteem gegevens opnieuw moet schrijven, wijzigt het elk blok waar het zich bevindt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Een bestandssysteem met copy-on-write schrijft een nieuwe versie van een blok en ontgrendelt vervolgens de oude versie.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>In abstracte termen, als we de echte fysieke locatie van de blokken negeren, vereenvoudigt onze 'datacomet' zich tot een 'datakrook', die van links naar rechts over de kaart van beschikbare ruimte beweegt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nu kunnen we een goed begrip krijgen van hoe snapshots met copy-on-write werken - elk blok kan toebehoren aan meerdere snapshots en blijft bestaan totdat alle gekoppelde snapshots zijn vernietigd.<\/i><\/p>\n<p>Het copy-on-write mechanisme (CoW) is de fundamentele basis van wat ZFS zo'n geweldig systeem maakt. Het belangrijkste concept is eenvoudig: als je een traditioneel bestandssysteem vraagt om een bestand te wijzigen, doet het precies wat je vraagt. Als je een bestandssysteem met copy-on-write hetzelfde vraagt, zegt het 'prima' - maar het liegt je.<\/p>\n<p>In plaats daarvan schrijft een bestandssysteem met copy-on-write een nieuwe versie van het gewijzigde blok en werkt de metadata van het bestand bij om de verbinding met het oude blok te verbreken en deze te verbinden met het nieuwe blok dat je net hebt geschreven.<\/p>\n<p>Het ontkoppelen van het oude blok en het koppelen van het nieuwe gebeurt in \u00e9\u00e9n operatie, zodat deze niet kan worden onderbroken - als je de stroom uitschakelt nadat dit is gebeurd, heb je een nieuwe versie van het bestand, en als je de stroom eerder uitschakelt, heb je de oude versie. In beide gevallen zullen er geen conflicten in het bestandssysteem optreden.<\/p>\n<p>Copy-on-write in ZFS vindt niet alleen plaats op bestandssysteemniveau, maar ook op schijfbeheerniveau. Dit betekent dat ZFS niet onderhevig is aan een write hole (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">RAID hole<\/a><\/noindex>) - een fenomeen waarbij de stripe slechts gedeeltelijk is geschreven voordat er een systeemfout optreedt, wat leidt tot beschadiging van de array na het opnieuw opstarten. Hier wordt de stripe atomair geschreven, vdev is altijd consistent, en <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob's je oom<\/a><\/noindex>.<\/p>\n<h3>ZIL: de intentie-log van ZFS<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Het ZFS-systeem behandelt synchrone schrijfacties op een speciale manier - het slaat ze tijdelijk, maar onmiddellijk op in ZIL, voordat het ze later samen met asynchrone schrijfacties permanent opslaat.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Gewoonlijk worden gegevens die op ZIL zijn geschreven, nooit meer gelezen. Maar dat is mogelijk na een systeemfout.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, of secundaire LOG-apparaat, is gewoon een speciale - en bij voorkeur zeer snelle - vdev, waar ZIL apart van de hoofdopslag kan worden opgeslagen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Na een crash worden alle onbenutte gegevens in ZIL hersteld - in dit geval bevindt ZIL zich op SLOG, dus worden ze precies vanaf daar hersteld.<\/i><\/p>\n<p>Er zijn twee hoofdtypen schrijfoperaties - synchrone (sync) en asynchrone (async). Voor de meeste werkbelastingen zijn verreweg de meeste schrijfoperaties asynchroon - het bestandssysteem stelt hen in staat om te aggregeren en in pakketten uit te geven, wat fragmentatie vermindert en de doorvoer aanzienlijk verhoogt.<\/p>\n<p>Synchrone schrijfinvoer is een totaal andere zaak. Wanneer een applicatie om een synchrone schrijfinvoer vraagt, zegt het bestandssysteem: 'Je moet dit vastleggen in niet-verliesgevoelige geheugen. <i>direct nu<\/i>, en totdat dat gebeurt kan ik niks meer doen.' Daarom moeten synchrone schrijfinvoeren onmiddellijk op de schijf worden vastgelegd - en als dit fragmentatie verhoogt of de doorvoer vermindert, dan zij dat maar zo.<\/p>\n<p>ZFS behandelt synchrone schrijfinvoeren anders dan gewone bestandssystemen - in plaats van ze onmiddellijk in de normale opslag te gieten, legt ZFS ze vast in een speciaal opslaggebied dat de ZFS Intent Log wordt genoemd - ZIL. De truc is dat deze invoeren <i>ook<\/i> in het geheugen blijven, samen met gewone asynchrone schrijfinvoeren worden geaggregeerd, zodat ze later als volkomen normale TXG (transactiegroepen, Transaction Groups) naar de opslag kunnen worden weggeschreven.<\/p>\n<p>In de normale werking wordt ZIL weggeschreven en nooit meer gelezen. Wanneer na een paar ogenblikken de invoeren uit ZIL in de hoofdopslag worden vastgelegd in de gewone TXG vanuit het RAM, worden ze losgekoppeld van ZIL. De enige keer dat iets uit ZIL wordt gelezen, is bij het importeren van een pool.<\/p>\n<p>Als er een ZFS-fout optreedt - een storing in het besturingssysteem of een stroomuitval - wanneer er gegevens in ZIL staan, zullen deze gegevens worden gelezen tijdens de volgende import van de pool (bijvoorbeeld bij het herstarten van een noodsysteem). Alles wat in ZIL staat, wordt gelezen, samengevoegd in TXG-groepen, vastgelegd in de hoofdopslag en vervolgens losgekoppeld van ZIL tijdens het importproces.<\/p>\n<p>Een van de hulpklassen van vdev heet LOG of SLOG, het secundaire LOG-apparaat. Het heeft \u00e9\u00e9n taak: om een pool te voorzien van een aparte en bij voorkeur veel snellere vdev met een zeer hoge schrijfstabiliteit voor het opslaan van ZIL, in plaats van ZIL op de hoofdopslagvdev op te slaan. De ZIL gedraagt zich hetzelfde, ongeacht de opslaglocatie, maar als de vdev met LOG zeer hoge schrijfsnelheden heeft, zullen synchronisatie-opnames sneller plaatsvinden.<\/p>\n<p>Het toevoegen van een vdev met LOG aan de pool kan <b>kan<\/b> de prestaties van asynchrone schrijfopdrachten niet verbeteren - ook niet als je alle schrijfopdrachten geforceerd uitvoert naar ZIL met <code>zfs set sync=always<\/code>, ze zullen nog steeds verbonden zijn met de hoofdopslag in TXG op dezelfde manier en in hetzelfde tempo als zonder log. De enige directe prestatieverbetering is de vertraging van de synchronisatie-opname (aangezien de hogere snelheid van het log het uitvoeren van bewerkingen versnelt. <code>sync<\/code>).<\/p>\n<p>Echter, in een omgeving die al veel synchronisatie-schrijfovergangen vereist, kan vdev LOG indirect asynchrone opname en ongecachede leesprestaties versnellen. Het uitladen van ZIL-opnames naar een aparte vdev LOG betekent minder concurrentie voor IOPS in de primaire opslag, wat in zekere mate de prestaties van alle lees- en schrijfoperaties verbetert.<\/p>\n<h3>Snapshots<\/h3>\n<p>\nDe copy-on-write mechaniek is ook een noodzakelijke basis voor atomische snapshots van ZFS en incrementele asynchrone replicatie. In een actieve bestandssysteem is er een boom van pointers die alle records met actuele gegevens bijhouden - wanneer je een snapshot maakt, maak je simpelweg een kopie van deze boom van pointers.<\/p>\n<p>Wanneer er een record in het actieve bestandssysteem wordt overschreven, schrijft ZFS eerst een nieuwe versie van de blok in ongebruikte ruimte. Daarna koppelt het de oude versie van het blok los van het huidig bestandssysteem. Maar als een snapshot naar de oude blok verwijst, blijft deze onveranderd. De oude blok zal feitelijk niet als vrije ruimte worden hersteld totdat alle snapshots die naar deze blok verwijzen, zijn vernietigd!<\/p>\n<h3>Replicatie<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Mijn Steam-bibliotheek in 2015 bevatte 158 GiB en omvatte 126.927 bestanden. Dit is vrij dicht bij de optimale situatie voor rsync - de replicatie van ZFS over het netwerk was \"slechts\" 750% sneller.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>In hetzelfde netwerk is de replicatie van \u00e9\u00e9n 40-gibibyte afbeelding van een virtuele machine met Windows 7 heel iets anders. ZFS-replicatie gebeurt 289 keer sneller dan rsync - of 'slechts' 161 keer sneller, als je goed genoeg bent om rsync met de optie --inplace aan te roepen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Basisprincipes van ZFS: opslag- en prestatiessysteem\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wanneer de afbeelding van de virtuele machine geschaald wordt, schaalt de rsync-problemen mee. Een formaat van 1,9 TiB is niet zo groot voor een moderne virtuele machine - maar groot genoeg zodat de ZFS-replicatie 1148 keer sneller is dan rsync, zelfs met het rsync-argument --inplace.<\/i><\/p>\n<p>Zodra je begrijpt hoe snapshots werken, is het niet moeilijk om de essentie van replicatie te begrijpen. Aangezien een snapshot eenvoudigweg een boom van verwijzingen naar records is, volgt hieruit dat als we een <code>zfs send<\/code> snapshot maken, we zowel deze boom als alle daaraan gerelateerde records verzenden. Wanneer we deze <code>zfs send<\/code> in <code>zfs receive<\/code> naar het doelobject sturen, schrijft het zowel de feitelijke inhoud van de blokken als de boom van verwijzingen die naar de blokken wijzen, naar de doel dataset.<\/p>\n<p>Het wordt nog interessanter bij de tweede <code>zfs send<\/code>. Nu hebben we twee systemen, elk met <code>poolname\/datasetname@1<\/code>, en je maakt een nieuwe snapshot <code>poolname\/datasetname@2.<\/code>Daarom heb je in de oorspronkelijke pool <code>datasetname@1<\/code> en <code>datasetname@2,<\/code>, terwijl de doelpool tot nu toe alleen de eerste snapshot heeft. <code>datasetname@1<\/code>.<\/p>\n<p>Aangezien we een gemeenschappelijk snapshot hebben tussen de bron en het doel, kunnen we een <code>datasetname@1<\/code>incremental <i>bovenop maken. Wanneer we het systeem zeggen<\/i> <code>zfs send<\/code> zfs send -i poolname\/datasetname@1 poolname\/datasetname@2 <code>, vergelijkt het de twee bomen van verwijzingen. Elke verwijzing die alleen in<\/code>bestaat, verwijst duidelijk naar nieuwe blokken - daarom hebben we de inhoud van deze blokken nodig. <code>@2<\/code>In het externe systeem is het verwerken van de incrementele<\/p>\n<p>even eenvoudig. Eerst schrijven we alle nieuwe records die in de stroom zijn opgenomen, en voegen dan de verwijzingen naar deze blokken toe. Voil\u00e0, we hebben <code>send<\/code> in het nieuwe systeem! <code>send<\/code>Asynchrone incrementele ZFS-replicatie is een enorme verbetering ten opzichte van eerdere methoden die niet op snapshots zijn gebaseerd, zoals rsync. In beide gevallen worden alleen de gewijzigde gegevens verzonden - maar rsync moet eerst <code>@2<\/code> alle gegevens van beide kanten vanaf de schijf lezen om de checksum te controleren en deze te vergelijken. In tegenstelling tot dit leest ZFS-replicatie niets, behalve de bomen van verwijzingen - en elke blok die niet wordt weergegeven in de gemeenschappelijke snapshot.<\/p>\n<p>Asynchrone incrementele ZFS-replicatie is een enorme verbetering ten opzichte van eerdere methoden die niet op snapshots zijn gebaseerd, zoals rsync. In beide gevallen worden alleen de gewijzigde gegevens verzonden - maar rsync moet eerst <i>lezen<\/i> alle gegevens van beide kanten vanaf de schijf lezen om de checksum te controleren en deze te vergelijken. In tegenstelling tot dit leest ZFS-replicatie niets, behalve de bomen van verwijzingen - en elke blok die niet wordt weergegeven in de gemeenschappelijke snapshot.<\/p>\n<h3>Ingebouwde compressie<\/h3>\n<p>\nHet schrijfmechanisme vereenvoudigt ook het systeem van ingebouwde compressie. In traditionele bestandssystemen is compressie problematisch \u2014 zowel de oude als de nieuwe versie van gewijzigde gegevens bevinden zich in dezelfde ruimte.<\/p>\n<p>Als we een gegevensfragment in het midden van een bestand bekijken, dat zijn leven begint als een megabyte nullen van 0x00000000 en zo verder \u2014 het is heel gemakkelijk samen te persen tot \u00e9\u00e9n sector op de schijf. Maar wat gebeurt er als we deze megabyte nullen vervangen door een megabyte niet-samendrukbare gegevens, zoals JPEG of pseudo-willekeurige ruis? Verbijsterend genoeg heeft deze megabyte gegevens plotseling niet \u00e9\u00e9n, maar 256 sectoren van 4 KiB nodig, terwijl er op dit punt op de schijf slechts \u00e9\u00e9n sector is gereserveerd.<\/p>\n<p>ZFS heeft dit probleem niet, omdat gewijzigde opnamen altijd worden geschreven naar ongebruikte ruimte \u2014 het oorspronkelijke blok neemt slechts \u00e9\u00e9n sector van 4 KiB in beslag, en de nieuwe opname neemt er 256 in beslag, maar dat is geen probleem \u2014 het onlangs gewijzigde fragment uit het \"midden\" van het bestand zou naar ongebruikte ruimte worden geschreven, ongeacht of de grootte is veranderd of niet, dus voor ZFS is dit een volkomen normale situatie.<\/p>\n<p>Ingebouwde compressie van ZFS is standaard uitgeschakeld, en het systeem biedt uitbreidbare algoritmen \u2014 momenteel zijn dat LZ4, gzip (1-9), LZJB en ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 dit is een streaming-algoritme dat extreem snelle compressie en decompressie biedt en prestatievoordelen oplevert voor de meeste gebruiksgevallen \u2014 zelfs op vrij langzame CPU's.\n<\/li>\n<li><b>GZIP<\/b> \u2014 een gerenommeerd algoritme dat bekend en geliefd is bij alle gebruikers van Unix-systemen. Het kan worden ge\u00efmplementeerd met compressieniveaus van 1-9, waarbij de compressie toeneemt en het CPU-gebruik stijgt naarmate we dichter bij niveau 9 komen. Het algoritme is goed geschikt voor alle tekstuele (of andere extreem samen te drukken) gebruikstoepassingen, maar kan anderszins vaak problemen met CPU veroorzaken \u2014 gebruik het met voorzichtigheid, vooral op hogere niveaus.\n<\/li>\n<li><b>LZJB<\/b> \u2014 het originele algoritme in ZFS. Het is verouderd en zou niet meer gebruikt moeten worden, LZ4 overtreft het op alle gebieden.\n<\/li>\n<li><b>ZLE<\/b> \u2014 nul-niveau codering, Zero Level Encoding. Het raakt \u00fcberhaupt geen normale gegevens aan, maar comprimeert grote reeksen nullen. Dit is nuttig voor volledig niet-samendrukbare datasets (zoals JPEG, MP4 of andere al gecomprimeerde formats), omdat het niet-samendrukbare gegevens negeert, maar ongebruikte ruimte in de uiteindelijke records comprimeert.<\/li>\n<\/ul>\n<p>\nWe raden LZ4-compressie aan voor vrijwel alle gebruikstoepassingen; de prestatiekosten bij het tegenkomen van niet-samendrukbare gegevens zijn zeer laag, en <i>stijging<\/i> de prestatieverbeteringen voor typische gegevens zijn aanzienlijk. Het kopi\u00ebren van een virtuele machine-image voor een nieuwe installatie van het Windows-besturingssysteem (een verse installatie, er zijn nog geen gegevens binnen) met <code>compression=lz4<\/code> ging 27% sneller dan met <code>compression=none<\/code>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">deze test uit 2015<\/a><\/noindex>.<\/p>\n<h1>ARC - adaptief vervangingscache<\/h1>\n<p>\nZFS is het enige moderne bestandssysteem dat we kennen dat zijn eigen leescache-mechanisme gebruikt en niet afhankelijk is van de paginacache van het besturingssysteem om kopie\u00ebn van recent gelezen blokken in het werkgeheugen op te slaan.<\/p>\n<p>Hoewel de eigen cache niet zonder problemen is - ZFS kan niet zo snel reageren op nieuwe geheugenallocatieverzoeken als de kernel, waardoor een nieuwe aanvraag <code>malloc()<\/code> voor geheugenallocatie kan falen als het geheugen vereist dat momenteel door ARC wordt gebruikt. Maar er zijn goede redenen om de eigen cache te gebruiken, althans nu.<\/p>\n<p>Alle bekende moderne besturingssystemen, inclusief MacOS, Windows, Linux en BSD, gebruiken een LRU (Least Recently Used) algoritme voor het implementeren van de paginacache. Dit is een primitief algoritme dat een gecachete blok 'omhoog in de rij' brengt na elke lezing en blokken 'omlaag in de rij' verdringt wanneer nodig om nieuwe cache-misses (blokken die van de schijf gelezen moesten worden en niet uit de cache) bovenaan toe te voegen.<\/p>\n<p>Over het algemeen werkt het algoritme goed, maar in systemen met grote werklasten leidt LRU gemakkelijk tot thrashing - de verdringing van vaak benodigde blokken om ruimte vrij te maken voor blokken die nooit meer uit de cache gelezen zullen worden.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 een veel minder na\u00efef algoritme dat kan worden beschouwd als een \"gewichtige\" cache. Na elke lezing van een gecached blok wordt het een beetje \"zwaarder\" en daardoor moeilijker om te verwijderen \u2014 en zelfs nadat het is verwijderd, blijft het blok <i>wordt gevolgd<\/i> gedurende een bepaalde tijd. Een blok dat is verwijderd, maar daarna terug in de cache moet worden gelezen, wordt ook \"zwaarder\".<\/p>\n<p>Het uiteindelijke resultaat van dit alles is een cache met een veel hogere hitratio \u2014 de verhouding tussen hits in de cache (lezen, uitgevoerd uit de cache) en misses (lezen vanaf de schijf). Dit is een uiterst belangrijke statistiek - niet alleen worden cache-hits vele malen sneller bediend, maar ook cache-misses kunnen sneller worden bediend, omdat hoe meer cache-hits er zijn, hoe minder parallelle aanvragen naar de schijf en hoe minder vertraging voor de overgebleven misses die vanaf de schijf moeten worden bediend.<\/p>\n<h1>Conclusie<\/h1>\n<p>\nNa het bestuderen van de basissemantiek van ZFS \u2014 hoe schrijven met snapshots werkt, evenals de relaties tussen opslagpools, virtuele apparaten, blokken, sectoren en bestanden \u2014 zijn we klaar om over de werkelijke prestaties te praten met concrete cijfers.<\/p>\n<p>In het volgende deel zullen we de daadwerkelijke prestaties van pools met mirror vdev en RAIDz met elkaar vergelijken, evenals met traditionele RAID-topologie\u00ebn van de Linux-kernel die we hebben onderzocht. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">eerder<\/a><\/noindex>.<\/p>\n<p>Aanvankelijk wilden we alleen de basisprincipes bekijken \u2014 de topologie\u00ebn van ZFS zelf \u2014 maar daarna <i>zoveel<\/i> zijn we klaar om te spreken over meer geavanceerde configuratie en tuning van ZFS, inclusief het gebruik van auxiliaire vdev-typen, zoals L2ARC, SLOG en Special Allocation.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Basisprincipes van ZFS: opslag en prestaties | ProHoster","description":"Deze lente hebben we al enkele besproken.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}