{"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\/et\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"ZFS alused: salvestuss\u00fcsteem ja tootlikkus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSel kevadel arutasime juba m\u00f5ningaid sissejuhatavaid teemasid, n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">kuidas kontrollida oma ketaste kiirus<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">mis on RAID<\/a><\/noindex>. Teises neist lubasime isegi j\u00e4tkata ZFS-s erinevate mitme ketta topoloogiate j\u00f5udluse uurimist. See on j\u00e4rgmise p\u00f5lvkonna failis\u00fcsteem, mida rakendatakse praegu laialdaselt, alates <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> kuni <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 \/>\nNoh, t\u00e4na on k\u00f5ige sobivam p\u00e4ev ZFS-iga tutvumiseks, uudishimulikkud lugejad. Lihtsalt teadke, et OpenZFS arendaja Matt Ahrens on tagasihoidlikult \u00f6elnud, et 'see on t\u00f5eliselt keeruline'.<\/p>\n<p>Kuid enne, kui j\u00f5uame numbrite juurde \u2013 ja need tulevad, luban \u2013 ZFS-i kaheksakettilise konfiguratsiooni k\u00f5ikide variantide osas, peame r\u00e4\u00e4kima sellest, <i>kuidas<\/i> kuidas ZFS t\u00f5eliselt andmeid kettale salvestab.<\/p>\n<h1>Zpool, vdev ja seade<\/h1>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>See diagrammi t\u00e4is bass koostab kolm abivahendit vdev&#8217;ist, \u00fche igast klassist, ja neli RAIDz2 jaoks.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tavaliselt pole p\u00f5hjust luua puu, mis koosneb sobimatutest t\u00fc\u00fcpidest ja suurustest vdev'idest \u2013 aga kui soovite, ei takista teid miski selle tegemiselt<\/i><\/p>\n<p>Kuna ZFS failis\u00fcsteemi t\u00f5eliselt m\u00f5istmiseks peate hoolikalt vaatama selle tegelikku struktuuri. Esiteks, ZFS \u00fchildab traditsioonilised mahtude ja failis\u00fcsteemi halduse tasemed. Teiseks kasutab ta kirjutamise ajal koopiate tegemise tehingumehhanismi. Need omadused t\u00e4hendab, et s\u00fcsteem on struktuuriliselt v\u00e4ga erinev tavalisest failis\u00fcsteemist ja RAID-massiividest. Esimene p\u00f5hiehituse elementide komplekt, mida m\u00f5ista: see on salvestuspuu (zpool), virtuaalne seade (vdev) ja tegelik seade (seade).<\/p>\n<h3>zpool<\/h3>\n<p>\nSalvestuspuu zpool on ZFS-i k\u00f5ige \u00fclemine struktuur. Iga puu sisaldab \u00fchte v\u00f5i mitut virtuaalset seadet. See omakorda sisaldab \u00fchte v\u00f5i mitut tegelikku seadet (seade). Virtuaalsed puud on iseseisvad \u00fcksused. \u00dcks f\u00fc\u00fcsiline arvuti v\u00f5ib sisaldada kahte v\u00f5i enamat eraldi puud, kuid iga\u00fcks neist on teistest t\u00e4ielikult s\u00f5ltumatu. Puid ei saa \u00fchiselt kasutada virtuaalseid seadmeid.<\/p>\n<p>ZFS-i \u00fcleliigusus asub virtuaalsete seadmete tasemel, mitte puude tasemel. Puu tasemel ei ole absoluutselt mingit \u00fcleliigsust \u2013 kui m\u00f5ni vdev v\u00f5i eelnevalt m\u00e4\u00e4ratud vdev kaob, kaob koos sellega ka kogu puu.<\/p>\n<p>Kaasaegsed salvestuspaigid v\u00f5ivad taluda virtuaalse seadme vahem\u00e4lu v\u00f5i logi kaotust, kuigi nad v\u00f5ivad kaduda v\u00e4ikese hulga r\u00e4paste andmete, kui nad kaotavad vdev logi voolukatkestuse v\u00f5i s\u00fcsteemirikkega.<\/p>\n<p>On levinud v\u00e4\u00e4rarusaam, et ZFS andmepaarid (stripes) kirjutatakse kogu paiki. See ei ole t\u00f5si. Zpool ei ole lihtsalt l\u00f5bus RAID0, see on pigem l\u00f5bus. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> keerulise muutliku jaotamismehhanismiga.<\/p>\n<p>Suur osa kirjutamist jagatakse kergesti saadavail virtuaalsetel seadmetel, l\u00e4htudes olemasolevast vaba ruumist, nii et teoreetiliselt t\u00e4idetakse need k\u00f5ik samaaegselt. Uuemates ZFS versioonides arvestatakse jooksva kasutuse (utiliseerimise) vdev'i - kui \u00fcks virtuaalne seade on palju rohkem koormatud kui teine (n\u00e4iteks lugemise koormuse t\u00f5ttu), siis selle kirjutamise ajutiselt m\u00f6\u00f6da minnakse, hoolimata k\u00f5rgeimast vabast ruumist.<\/p>\n<p>Kaasaegse ZFS kirjutamise jaotamismehhanismis sisseehitatud(utiliseerimise) seire v\u00f5ib v\u00e4hendada viivitust ja suurendada l\u00e4bilaskev\u00f5imet ebatavaliselt k\u00f5rgete koormuste ajal - kuid see ei ole <i>karantsi<\/i> aeglaste HDD-de ja kiirete SSD-de tahtmatu segamise vastu \u00fches paigis. Selline eba\u00fchtlane paigaldus t\u00f6\u00f6tab siiski k\u00f5ige aeglasema seadme kiirusel, see t\u00e4hendab, et see toimib nagu oleks see t\u00e4ielikult koostatud sellistest seadmetest.<\/p>\n<h3>vdev<\/h3>\n<p>\nIga salvestuspaik koosneb \u00fchest v\u00f5i mitmest virtuaalsest seadmest (virtual device, vdev). Iga vdev sisaldab omakorda \u00fchte v\u00f5i mitut f\u00fc\u00fcsilist seadet. Enamus virtuaalseid seadmeid kasutatakse andmete lihtsaks salvestamiseks, kuid on olemas ka mitmeid abklasse vdev'e, sealhulgas CACHE, LOG ja SPECIAL. Igal neist vdev'i t\u00fc\u00fcbist v\u00f5ib olla \u00fcks viiest topoloogiast: \u00fchte seadet (single-device), RAIDz1, RAIDz2, RAIDz3 v\u00f5i peegel (mirror).<\/p>\n<p>RAIDz1, RAIDz2 ja RAIDz3 on erilised variandid sellest, mida vanad nimetavad kahekordseks (diagonaalseks) pariteediks. 1, 2 ja 3 viitavad sellele, kui palju pariteetplokke on eraldatud iga andmete ribale. Erinevalt eraldiseisvatest kettadest, mis tagavad pariteedi, jaotavad RAIDz virtuaalsed seadmed pariteedi kettale \u00fchtlaselt. RAIDz massiiv suudab kaotada nii palju kettasid, kui tal on pariteetplokke; kui ta kaotab veel \u00fche, lakkab ta olemast ja viib endaga kaasa salvestusalu.<\/p>\n<p>Peegeldavatel virtuaalsetel seadmetel (mirror vdev) hoitakse iga plokk iga seadme peal vdev-is. Kuigi k\u00f5ige levinumad on kaksikpeeglid (two-wide), v\u00f5ib peeglis olla mis tahes arvu seadmeid - suurtes seadistustes, et suurendada lugemise j\u00f5udlust ja talitlush\u00e4irete vastupidavust, kasutatakse sageli kolmikpeegleid. Vdev peegeldus suudab taluda mis tahes rikkeid, seni kuni v\u00e4hemalt \u00fcks seade vdev-is t\u00f6\u00f6tab.<\/p>\n<p>\u00dcksikud vdev-id on oma olemuselt ohtlikud. Selline virtuaalne seade ei talunda \u00fchtegi riket - ja kui seda kasutatakse salvestusala v\u00f5i spetsiaalse vdev-i jaoks, toob tema rike kaasa kogu ala h\u00e4vimise. Olge selle osas v\u00e4ga, v\u00e4ga ettevaatlik.<\/p>\n<p>Virtuaalsed seadmed CACHE, LOG ja SPECIAL v\u00f5ivad olla loodud mis tahes \u00fclaltoodud topoloogiate p\u00f5hjal - kuid pidage meeles, et virtuaalse seadme SPECIAL kaotamine t\u00e4hendab kogu ala kaotamist, seet\u00f5ttu on tungivalt soovitatav \u00fcleliigne topoloogia.<\/p>\n<h3>seade<\/h3>\n<p>\nSee on t\u00f5en\u00e4oliselt k\u00f5ige lihtsam m\u00f5istetav termin ZFS-is - see on s\u00f5na-s\u00f5nalt juhusliku juurdep\u00e4\u00e4su blokiseade. Pidage meeles, et virtuaalsed seadmed koosnevad eraldi seadmetest ja ala on loodud virtuaalsetest seadmetest.<\/p>\n<p>Kettad - magnetilised v\u00f5i tahked - on k\u00f5ige levinumad blokiseadmestena, mida kasutatakse vdev-i ehitamiseks. Siiski sobib iga seade, millel on kirjeldus \/dev-is - seega v\u00f5ib eraldi seadmetena kasutada ka terveid riistvara RAID-massiive.<\/p>\n<p>Lihtne raw-fail on \u00fcks k\u00f5ige olulisemaid alternatiivseid blokiseadmeid, millest vdev-i saab ehitada. Testimisalad <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">haruldased failid<\/a><\/noindex>\u00a0on v\u00e4ga mugav viis kontrolida ala k\u00e4ske ja n\u00e4ha, kui palju ruumi on saadaval antud topoloogia ala v\u00f5i virtuaalse seadme jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Saate luua testkasti h\u00f5redatest failidest vaid m\u00f5ne sekundiga \u2014 kuid \u00e4rge unustage seej\u00e4rel kustutada kogu kasti ja selle komponente.<\/i> <\/p>\n<p>Oletame, et soovite seadistada serveri kaheksa ketta peale ja plaanite kasutada 10 TB (~9300 GiB) kettaid \u2014 kuid te ei ole kindel, milline topoloogia vastab teie vajadustele k\u00f5ige paremini. \u00dclaltoodud n\u00e4ites loome testkasti h\u00f5redatest failidest m\u00f5ne sekundiga \u2014 ja n\u00fc\u00fcd teame, et kaheksa 10 TB kettaga RAIDz2 vdev tagab 50 TiB kasulikku mahtu.<\/p>\n<p>Teine eriline seadme klasse on SPARE (varu). Soojavarustusseadmed, erinevalt tavap\u00e4rastest seadmetest, kuuluvad kogu kasti, mitte \u00fchele virtuaalsele seadmele. Kui m\u00f5ni vdev kastis eba\u00f5nnestub ja varuseade on kasti \u00fchendatud ja saadaval, liitub see automaatselt kahjustatud vdev'iga.<\/p>\n<p>P\u00e4rast kahjustatud vdev'iga \u00fchendamist hakkab varuseade saama koopiaid v\u00f5i andmete rekonstrueerimist, mis peaksid puuduvatel seadmetel olema. Traditsioonilises RAID-is nimetatakse seda taastamiseks (rebuilding) ja ZFS-is on see \"\u00fclemineku taastamine\" (resilvering).<\/p>\n<p>Oluline on m\u00e4rkida, et varuseadmed ei asenda p\u00fcsivalt rikutud seadmeid. Need on vaid ajutised asendajad, et v\u00e4hendada aega, mille jooksul vdev degradeerub. P\u00e4rast seda, kui administraator on asendanud riknenud seadme vdev'is, toimub taastamine uuele seadmele ja varu seade eraldatakse vdev'ist ning naaseb varuseadmest t\u00f6\u00f6le kogu kasti jaoks.<\/p>\n<h1>Andmekogud, plokid ja sektorid<\/h1>\n<p>\nJ\u00e4rgmised alusloomaelemendid, mida meie ZFS-i teekonnal m\u00f5ista, ei seondu nii palju riistvaraga, kui selle kohapealse andmete korralduse ja salvestamisega. \u00dcksikute tasemete loomine, nagu metaslab, j\u00e4i meil selgelt m\u00f5istmise huvides vahele.<\/p>\n<h3>Andmekogud (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kui me esmakordselt loome andmekogu, kuvab see kogu saadaoleva kasti ruumi. Seej\u00e4rel seadistame kvoodi \u2014 ja muudame mount-punkti. Imeline!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol on enamasti lihtsalt andmekogu, millel puudub oma failis\u00fcsteemi kiht, mida asendame siin t\u00e4iesti tavap\u00e4rase failis\u00fcsteemiga ext4.<\/i> <\/p>\n<p>ZFS andmegrupp on enam-v\u00e4hem sarnane tavalise monteeritud failis\u00fcsteemiga. Nagu tavaline failis\u00fcsteem, n\u00e4eb see esmapilgul v\u00e4lja nagu \"\u00fcks tavaline kaust\". Kuid nagu tavalistel monteeritud failis\u00fcsteemidel, on igal ZFS andmegrupil oma p\u00f5hivarade kogum.<\/p>\n<p>Esiteks v\u00f5ib andmegrupile m\u00e4\u00e4rata kvoodi. Kui seadistate <code>zfs set quota=100G poolname\/datasetname<\/code>, siis ei saa te kirjutada monteeritud kausta <code>\/poolname\/datasetname<\/code> rohkem kui 100 GiB.<\/p>\n<p>Kas m\u00e4rkate, et iga rea alguses on olemas ja puudub kaldkriips? Igal andmegrupil on oma koht nii ZFS hierarhias kui ka s\u00fcsteemi monteerimise hierarhias. ZFS hierarhias ei ole esimest kaldkriipsu \u2014 alustate ankrust ning seej\u00e4rel tee\u00fclesande andmegrupi juurde. N\u00e4iteks, <code>pool\/vanem\/laps<\/code> andmegrupi kohta nimega <code>laps<\/code> vanema andmegrupi all <code>vanem<\/code> loovalt nimetatud ankrus <code>pool<\/code>.<\/p>\n<p>Vaikimisi on andmegrupi monteerimispunkt ZFS hierarhias tema nimega ekvivalentne, alustades kaldkriipsust \u2014 ankur nimega <code>pool<\/code> monteeritakse kui <code>\/pool<\/code>, andmegrupp <code>vanem<\/code> monteeritakse <code>\/pool\/parent<\/code>, ja alamandmegrupp <code>laps<\/code> monteeritakse <code>\/pool\/parent\/child<\/code>. Siiski on v\u00f5imalik muuta andmegrupi s\u00fcsteemi monteerimispunkti.<\/p>\n<p>Kui me m\u00e4\u00e4rame <code>zfs set mountpoint=\/lol pool\/vanem\/laps<\/code>, siis andmegrupp <code>pool\/vanem\/laps<\/code> monteeritakse s\u00fcsteemi kui <code>\/lol<\/code>.<\/p>\n<p>Lisaks andmegruppidele peame mainima ka mahtusid (zvols). Mahu struktuur on sarnane andmegrupile, v\u00e4lja arvatud see, et seal ei ole tegelikult failis\u00fcsteemi \u2014 see on lihtsalt plokiseade. N\u00e4iteks saate luua <code>zvol<\/code> nimega <code>mypool\/myzvol<\/code>, seej\u00e4rel vormindada selle ext4 failis\u00fcsteemiga ja siis monteerida see failis\u00fcsteem \u2014 n\u00fc\u00fcd on teil ext4 failis\u00fcsteem, kuid k\u00f5igi ZFS turvafunktsioonide toetusega! See v\u00f5ib tunduda m\u00f5ttetu \u00fchel arvutil, kuid omab palju rohkem t\u00e4hendust iSCSI seadme eksportimise taustana.<\/p>\n<h3>Jaotusseadmed<\/h3>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fail esindab \u00fchte v\u00f5i mitut plokki. Iga plokk salvestatakse \u00fchel virtuaalses seadmel. Ploki suurus on tavaliselt kuues v\u00e4\u00e4rtuses <b>recordsize<\/b>, kuid v\u00f5ib olla v\u00e4hendatud kuni <b>2^ashift<\/b>, kui see sisaldab metaandmeid v\u00f5i v\u00e4ikest faili.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Me t\u00f5esti, <b>t\u00f5eliselt<\/b> ei naljasta tohutu j\u00f5udluse kaotuse \u00fcle, kui seada ashift liiga madalaks.<\/i><\/p>\n<p>ZFS-i baselines salvestatakse k\u00f5ik andmed, sealhulgas metaandmed plokkidesse. Iga andmestiku maksimaalne ploki suurus m\u00e4\u00e4ratakse omaduses <code>recordsize<\/code> (salvestusv\u00e4li). Salvestusv\u00e4lja saab muuta, kuid see ei muuda ega asenda \u00fchtegi plokki, mis on juba andmestikku kirjutatud - see kehtib ainult uute plokkide puhul nende kirjutamise ajal.<\/p>\n<p>Kui pole m\u00e4\u00e4ratud muud, on praegune salvestusv\u00e4li vaikesuurus 128 KiB. See on omamoodi keeruline kompromiss, kus j\u00f5udlus ei ole ideaalne, kuid pole ka kohutav enamikes olukordades. <code>Salvestusv\u00e4li<\/code> saab seadistada v\u00e4\u00e4rtuseks vahemikus 4K kuni 1M (lisaseadetega <code>recordsize<\/code> saab seadistada ka suuremaks, kuid see on harva hea m\u00f5te).<\/p>\n<p>Iga plokk viitab ainult \u00fche faili andmetele - sa ei saa kahe erineva faili andmeid \u00fchte plokki suruda. Iga fail koosneb \u00fchest v\u00f5i mitmest plokist, s\u00f5ltuvalt suurusest. Kui faili suurus on v\u00e4iksem kui salvestusv\u00e4li, salvestatakse see v\u00e4iksemas plokis - n\u00e4iteks 2 KiB faili plokk h\u00f5ivab ainult \u00fche 4 KiB sektori kettal.<\/p>\n<p>Kui fail on piisavalt suur ja vajab mitmeid plokke, on k\u00f5ik salvestused, mis sisaldavad seda faili, suurusega <code>recordsize<\/code>\u00a0- sealhulgas viimane salvestus, mille peamine osa v\u00f5ib olla <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">kasutamata ruum<\/a><\/noindex>.<\/p>\n<p>Zvoli mahutitel ei ole omadust <code>recordsize<\/code>\u00a0- selle asemel on neil ekvivalentne omadus <code>volblocksize<\/code>.<\/p>\n<h3>Sektorid<\/h3>\n<p>\nViimane ja k\u00f5ige p\u00f5hjalikum ehitusplokk on sektor. See on v\u00e4ikseim f\u00fc\u00fcsiline \u00fcksus, mida saab aluseks olevast seadmega kirjutada v\u00f5i lugeda. Aastak\u00fcmneid on enamus ketastest kasutanud 512-baidiseid sektoreid. Viimasel ajal on enamus ketastest seadistatud 4 KiB sektoriteks, ja m\u00f5nedes - eriti SSD-de puhul - 8 KiB sektoriteks v\u00f5i isegi rohkem.<\/p>\n<p>ZFS-s\u00fcsteemis on omadus, mis v\u00f5imaldab manuaalselt seadistada sektori suurust. See omadus <code>ashift<\/code>. Veidi segane on see, et ashift on 2 astme. N\u00e4iteks, <code>ashift=9<\/code> t\u00e4hendab sektori suurust 2^9, ehk 512 baiti.<\/p>\n<p>ZFS k\u00fcsib operatsioonis\u00fcsteemilt iga plokiseadmest \u00fcksikasjalikku teavet, kui see lisatakse uude vdev'i, ja teoreetiliselt seadistab ashifti automaatselt selle teabe p\u00f5hjal. Kahjuks valetavad paljud kettad oma sektori suuruse kohta, et s\u00e4ilitada \u00fchilduvus Windows XP-ga (millel oli probleeme teiste sektori suurustega kettaste m\u00f5istmisega).<\/p>\n<p>See t\u00e4hendab, et ZFS-i administraator peab teadma oma seadmete tegelikku sektori suurust ja seadistama selle k\u00e4sitsi. <code>ashift<\/code>. Kui ashift on seadistatud liiga v\u00e4ikseks, suureneb lugemis-\/kirjutamisoperatsioonide arv erakordsetes ulatustes. Nii tuleb 512-baidiseid \"sektoore\" kirjutada reaalsetesse 4 KiB-sektoritesse, mis t\u00e4hendab, et esmalt tuleb kirjutada esimene \"sektor\", siis lugeda 4 KiB sektor, muuta see teise 512-baidise \"sektoriga\", kirjutada see tagasi uude 4 KiB-sektorisse ja nii edasi iga kirje puhul.<\/p>\n<p>Tegelikus maailmas on selline trahv tuntav Samsung EVO tahkete ketaste puhul, mille jaoks peaks olema kehtiv <code>ashift=13<\/code>, kuid need SSD-d valetavad oma sektori suuruse kohta, seega on see seadistatud <code>ashift=9<\/code>. Kui kogenud s\u00fcsteemiadministraator seda parameetrit ei muuda, siis t\u00f6\u00f6tab see SSD <i>aeglase<\/i> tavalise magnet HDD-ga.<\/p>\n<p>V\u00f5rdluseks, liiga suure suuruse korral <code>ashift<\/code> pole praktiliselt mingit trahvi. Tegelikku j\u00f5udluse v\u00e4henemist ei ole ning kasutamata ruumi suurenemine on \u00e4\u00e4rmiselt v\u00e4ike (v\u00f5i null, kui tihendamine on sisse l\u00fclitatud). Seet\u00f5ttu soovitame tungivalt isegi neile kettastele, mis tegelikult kasutavad 512-baidiseid sektoore, seadistada <code>ashift=12<\/code> v\u00f5i isegi <code>ashift=13<\/code>, et kindlalt tulevikku vaadata.<\/p>\n<p>Omadus <code>ashift<\/code> seadetakse iga virtuaalse seadme vdev jaoks, mitte <i>pooli<\/i>, nagu paljud ekslikult arvavad - ja p\u00e4rast seadistamist ei muutu. Kui sa kogemata seaded \u00fcmber ajasid <code>ashift<\/code> uue vdev'i lisamisel paiku, siis olete selle mahu madala j\u00f5udlusega seadmega p\u00f6\u00f6rdumatult saastanud ja tavaliselt pole muud lahendust, kui purustada maht ja alustada k\u00f5ik otsast. Isegi vdev'i eemaldamine ei p\u00e4\u00e4sta vale seadistuse eest. <code>ashift<\/code>!<\/p>\n<h3>Kopeerimise mehhanism kirjutamisel<\/h3>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kui tavaline failis\u00fcsteem peab andmeid uuesti kirjutama, muudab ta iga ploki seal, kus see asub.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Failis\u00fcsteem, kus toimub kirjutamise k\u00e4igus kopeerimine, salvestab uue ploki versiooni ja seej\u00e4rel vabastab vana versiooni.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00dcldiselt, kui ignoreerida plokkide reaalsest f\u00fc\u00fcsilisest asukohast, lihtsustub meie \"andmete komeet\" \"andmeussiks\", mis liigub vasakult paremale saadaval oleva ruumi kaartidel.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>N\u00fc\u00fcd saame h\u00e4sti aru, kuidas kirjutamise k\u00e4igus kopeerimise sn\u00e4ppshotid t\u00f6\u00f6tavad \u2014 iga plokk v\u00f5ib kuuluda mitmele sn\u00e4ppshotile ja j\u00e4\u00e4b alles seni, kuni k\u00f5ik seotud sn\u00e4ppshotid on h\u00e4vitatud.<\/i><\/p>\n<p>Kirjutamise k\u00e4igus kopeerimise mehhanism (Copy on Write, CoW) on ZFS-i unikaalse s\u00fcsteemi aluseks. P\u00f5hikontseptsioon on lihtne \u2014 kui palute traditsiooniliselt failis\u00fcsteemil faili muuta, teeb ta n\u00f5utud. Kui aga palute kirjutamise k\u00e4igus kopeerimise failis\u00fcsteemil sama teha, \u00fctleb ta \"okei\" \u2014 kuid petab teid.<\/p>\n<p>Selle asemel kirjutab kirjutamise k\u00e4igus kopeerimise failis\u00fcsteem uue versiooni muudetud plokist ja seej\u00e4rel uuendab faili metaandmeid, et katkestada side vana plokiga ja siduda sellega uus plokk, mille just salvestasite.<\/p>\n<p>Vana ploki eraldamine ja uue sidumine toimub \u00fches operatsioonis, seega ei saa seda katkestada \u2014 kui l\u00fclitate p\u00e4rast selle toimumist v\u00e4lja, on teil uus faili versioon, kuid kui l\u00fclitate varem v\u00e4lja, on teil vana versioon. Igatahes ei teki failis\u00fcsteemi konfliktide.<\/p>\n<p>Kirjutamise k\u00e4igus kopeerimine ZFS-is toimub mitte ainult failis\u00fcsteemi tasandil, vaid ka ketaste halduse tasemel. See t\u00e4hendab, et ZFS ei ole vastuv\u00f5tlik kirjutamise t\u00fchikule (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">RAID augule<\/a><\/noindex>) \u2014 n\u00e4htusele, kus riba on salvestatud ainult osaliselt enne s\u00fcsteemi t\u00f5rget, mis kahjustab massiivi p\u00e4rast taask\u00e4ivitamist. Siin kirjutatakse riba aatomaarseks, vdev on alati j\u00e4rjepidev, ja <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob on su onu.<\/a><\/noindex>.<\/p>\n<h3>ZIL: ZFS-i kavatsuste \u017eurnal.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZFS s\u00fcsteem k\u00e4sitleb s\u00fcnkroonseid kirjeid eriliselt \u2014 see salvestab need ajutiselt, kuid koheselt ZIL-i, enne kui salvestab need hiljem p\u00fcsivalt koos as\u00fcnkroonsete kirjetega.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tavaliselt ei loeta ZIL-i salvestatud andmeid enam kunagi. Kuid p\u00e4rast s\u00fcsteemi t\u00f5rget on see v\u00f5imalik.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, v\u00f5i sekundaarne LOG-seade, on lihtsalt eriline - ja eelistatavalt v\u00e4ga kiire - vdev, kus ZIL v\u00f5ib olla eraldi peamisest salvestusruumist.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>P\u00e4rast viga taastatakse k\u00f5ik m\u00e4\u00e4rdunud andmed ZIL-is - antud juhul asub ZIL SLOG-is, seega taastatakse need just sealt.<\/i><\/p>\n<p>On olemas kaks peamist kirjutamistoimingu kategooriat - s\u00fcnkroonsed (sync) ja as\u00fcnkroonsed (async). Enamikus t\u00f6\u00f6koormustes on absoluutne enamik kirjutamistoimingutest as\u00fcnkroonsed - failis\u00fcsteem v\u00f5imaldab neid koondada ja edastada partiitena, v\u00e4hendades fragmenteerimist ja suurendades oluliselt l\u00e4bilaskev\u00f5imet.<\/p>\n<p>S\u00fcnkroonsed kirjutamised on t\u00e4iesti teistsugune asi. Kui rakendus k\u00fcsib s\u00fcnkroonset kirjutamist, \u00fctleb see failis\u00fcsteemile: \"Sa pead selle salvestama energiat mittekaotavasse m\u00e4llu, <i>right now<\/i>, ja kuni selle ajani ei saa ma midagi muud teha.\" Seega peavad s\u00fcnkroonsed kirjutamised olema kohe ketta peale salvestatud - ja kui see suurendab fragmenteerimist v\u00f5i v\u00e4hendab l\u00e4bilaskev\u00f5imet, siis olgu nii.<\/p>\n<p>ZFS k\u00e4sitleb s\u00fcnkroonseid kirjutamisi teistmoodi kui tavalised failis\u00fcsteemid - selle asemel, et kohe neid tavalisse salvestusse laadida, salvestab ZFS need spetsiaalsesse salvestusala, mida nimetatakse ZFS-i kavatsuste logiks - ZFS Intent Log, v\u00f5i ZIL. Kiirus on selles, et need kirjutised <i>samuti<\/i> j\u00e4\u00e4vad m\u00e4llu, kui need on koondatud koos tavaliste as\u00fcnkroonsete kirjutamisv\u00f5imetega, et hiljem neid salvestada nagu t\u00e4iesti normaalsed TXG (tehingugrupid, Transaction Groups).<\/p>\n<p>Normaalses t\u00f6\u00f6s on ZIL salvestatud ja ei loeta enam kunagi. Kui m\u00f5ne hetke p\u00e4rast ZIL-i kirjutised salvestatakse p\u00f5hiseadmesse tavalisetes TXG-des m\u00e4lust, eraldatakse need ZIL-ist. Ainus hetk, mil midagi ZIL-ist loetakse, on siis, kui importitakse aed.<\/p>\n<p>Kui ZFS-l on t\u00f5rge - operatsioonis\u00fcsteemi t\u00f5rge v\u00f5i toite l\u00f5ppemine - kui ZIL-is on andmeid, loetakse need andmed j\u00e4rgmise aeda importimise ajal (n\u00e4iteks avariiseadmest taask\u00e4ivitamisel). K\u00f5ik, mis on ZIL-is, loetakse, koondatakse TXG-deks, salvestatakse p\u00f5hiseadmesse ja seej\u00e4rel eraldatakse ZIL-ist importimise k\u00e4igus.<\/p>\n<p>\u00dcks vdev abiklassidest on LOG v\u00f5i SLOG, sekundaarne LOG seade. Selle ainus \u00fclesanne on tagada basseinile eraldi ja eelistatult palju kiirema, v\u00e4ga k\u00f5rge kirjutamisvastupidavusega vdev seade ZIL-i salvestamiseks, selle asemel, et salvestada ZIL p\u00f5hivdev-i peamisse salvestusse. Isegi ZIL k\u00e4itub s\u00f5ltumata salvestus kohast \u00fchtemoodi, kuid kui LOG-iga vdev-l on v\u00e4ga k\u00f5rge kirjutamiskiirus, siis s\u00fcnkroonsed kirjutamised toimuvad kiiremini.<\/p>\n<p>LOG-iga vdev lisamine basseini ei paranda <b>ei suuda<\/b> as\u00fcnkroonsete kirjutamiste j\u00f5udlust - isegi kui sunnid k\u00f5iki kirjutamisi ZIL-i kaudu <code>zfs set sync=always<\/code>, need on ikkagi seotud p\u00f5hiseadmest TXG-ga samamoodi ja samas tempos nagu ilma p\u00e4evikuta. Ainus otsene j\u00f5udluse parendamine on s\u00fcnkroonsest kirjutamisest tulenev viivitus (kuna p\u00e4eviku suurem kiirus kiirendab operatsioonide t\u00e4itmist. <code>sync<\/code>).<\/p>\n<p>Kuid keskkonnas, mis juba n\u00f5uab suurt hulka s\u00fcnkroonseid kirjutamisi, v\u00f5ib vdev LOG kaudselt kiirendada as\u00fcnkroonset kirjutamist ja vahem\u00e4luta lugemist. ZIL-i kirjutiste laadimine eraldi vdev LOG-i t\u00e4hendab v\u00e4hem konkurentsi IOPS-i nimel p\u00f5hiseadmes, mis omakorda suurendab k\u00f5ikide lugemise ja kirjutamise operatsioonide j\u00f5udlust.<\/p>\n<h3>Snapshoot'id<\/h3>\n<p>\nKirjutamise ajal kopeerimise mehhanism on samuti vajalik alus ZFS-i aatomiliste hetkeseisude ja inkrementaalse as\u00fcnkroonse replikatsiooni jaoks. Aktiivses failis\u00fcsteemis on punktiiride puu, mis m\u00e4rgib k\u00f5ik kirjutised praeguste andmete osas - kui teete hetkt\u00f5mmise, teete lihtsalt koopia sellest punktiiride puust.<\/p>\n<p>Kui aktiivses failis\u00fcsteemis kirjutatakse mingi kirjutis \u00fcle, salvestab ZFS esmalt uue versiooni plokist kasutamata ruumi. Seej\u00e4rel eemaldab vana ploki versiooni praegusest failis\u00fcsteemist. Kuid kui m\u00f5ni hetkt\u00f5mmis viitab vanale plokile, j\u00e4\u00e4b see siiski muutumatuks. Vana plokk ei taastata tegelikult vabaks ruumiks, kuni k\u00f5ik sellele plokile viitavad hetkt\u00f5mmised ei h\u00e4vitata!<\/p>\n<h3>Replikatsioon<\/h3>\n<p>\n<img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Minu Steam'i raamatukogu 2015. aastal oli 158 GiB ja see sisaldas 126 927 faili. See on \u00fcsna l\u00e4hedal optimaalsele olukorrale rsync jaoks - ZFS-i replikatsioon \u00fcle v\u00f5rgu oli \"vaid\" 750% kiiremini.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Samas v\u00f5rgus on 40 GiB Windows 7 virtuaalmasina pildifaili replikatsioon hoopis erinev lugu. ZFS-i replikatsioon toimub 289 korda kiiremini kui rsync \u2014 v\u00f5i \"ainult\" 161 korda kiiremini, kui oskate rsync-i k\u00e4itada -inplace lippu.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"ZFS alused: salvestuss\u00fcsteem ja tootlikkus\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kui virtuaalmasina pilt suurendab, siis rsync-i probleemid suurenevad koos sellega. 1,9 TiB suurus ei ole t\u00e4nap\u00e4evase virtuaalmasina puhul nii suur \u2014 kuid see on piisavalt suur, et ZFS-i replikatsioon oleks 1148 korda kiiremini kui rsync, isegi kui kasutada rsync-i -inplace argumenti.<\/i><\/p>\n<p>Kuna te m\u00f5istate, kuidas t\u00f6\u00f6deldakse snapshots'e, pole raske tabada replikatsiooni olemust. Kuna snapshot on lihtsalt viidete puu m\u00e4rgete, t\u00e4hendab see, et kui me teeme <code>zfs send<\/code> snapshot'i, edastame me nii selle puu, kui k\u00f5ik seotud m\u00e4rkmed. Kui me edastame selle <code>zfs send<\/code> ja <code>zfs receive<\/code> sihtkohta, salvestab see nii tegeliku ploki sisu kui ka viidete puu, mis viitab plokkidele, sihtkohta andmete kogusse.<\/p>\n<p>Asjad muutuvad veelgi huvitavamaks teisel <code>zfs send<\/code>. N\u00fc\u00fcd on meil kaks s\u00fcsteemi, millest igal on <code>poolname\/datasetname@1<\/code>, ja v\u00f5tate uue snapshot'i <code>poolname\/datasetname@2<\/code>. Seega on teie algses puulis <code>datasetname@1<\/code> ja <code>datasetname@2<\/code>, ja sihtpuulis on praegu alles esimene snapshot. <code>datasetname@1<\/code>.<\/p>\n<p>Kuna allika ja sihtkoha vahel on meil \u00fchine snapshot <code>datasetname@1<\/code>, saame teha <i>inkrementaalse<\/i> <code>zfs send<\/code> selle peal. Kui me r\u00e4\u00e4gime s\u00fcsteemile <code>zfs send -i poolname\/datasetname@1 poolname\/datasetname@2<\/code>, siis v\u00f5rdleb see kahte viidete puud. K\u00f5ik viidatud, mis eksisteerivad ainult <code>@2<\/code>, viitavad ilmselgelt uutele plokkidele - seega vajame nende plokkide sisu.<\/p>\n<p>Kaug-s\u00fcsteemis on inkrementaalne t\u00f6\u00f6tlemine sama lihtne. Esmalt salvestame k\u00f5ik uued m\u00e4rkmed, mis on voolus, ja seej\u00e4rel lisame viidatud need plokkidele. Voil\u00e0, meil on <code>send<\/code> uues s\u00fcsteemis! <code>send<\/code>As\u00fcnkroonne inkrementaalne ZFS replikatsioon on tohutu parandamine v\u00f5rreldes varasemate mitte-snapshot meetoditega, nagu rsync. M\u00f5lemal juhul edastatakse ainult muudetud andmed - kuid rsync peab esmalt <code>@2<\/code> k\u00f5ik andmed m\u00f5lemalt poolt kettalt lugema, et kontrollida summeerimist ja v\u00f5rrelda seda. Selle vastu, ZFS replikatsioon ei loe midagi, v\u00e4lja arvatud viidete puud - ja k\u00f5ik plokid, mis ei ole esindatud \u00fchises snapshot'is.<\/p>\n<p>As\u00fcnkroonne inkrementaalne replikatsioon ZFS on tohutu t\u00e4iustus varasemate, snapshot'e mitte kasutavate meetodite, n\u00e4iteks rsync, suhtes. M\u00f5lemal juhul edastatakse ainult muutunud andmed - kuid rsync peab esmalt <i>lugeda<\/i> k\u00f5ik andmed kettalt m\u00f5lemal poolel lugema, et kontrollida summat ja v\u00f5rrelda seda. Erinevalt sellest ei loe ZFS replikatsioon midagi muud kui viidete puid - ja k\u00f5ik plokid, mis ei ole esindatud \u00fchises snapshot'is.<\/p>\n<h3>Sisseehitus<\/h3>\n<p>\nKirjutamise kopeerimismehanism lihtsustab samuti sisseehitatud kompressioonis\u00fcsteemi. Traditsioonilises failis\u00fcsteemis on kompressioon probleemne \u2014 nii vana kui ka uus muudetud versioon andmetest asuvad samas ruumis.<\/p>\n<p>Kui me vaatame andmefragmenti faili keskosas, mis alustab oma elu megabaidiga nullidest 0x00000000 ja edasi \u2014 on seda v\u00e4ga lihtne kokku suruda \u00fche sekundi suurusesse. Kuid mis juhtub, kui asendame selle megabaidi nullidega megabaidi mittekompressitavate andmetega, n\u00e4iteks JPEG v\u00f5i pseudo-juhusliku m\u00fcra? \u00dcht\u00e4kki vajab see megabaidi andmete jaoks mitte \u00fchte, vaid 256 sektori suurust 4 KiB, ja sellel kohal on kettal reserveeritud vaid \u00fcks sektor.<\/p>\n<p>ZFS-l pole sellist probleemi, kuna muudetud kirjad kirjutatakse alati kasutamata ruumi \u2014 algne plokk h\u00f5ivab vaid \u00fche 4 KiB sektori, kuid uus kirje v\u00f5tab 256, kuid see pole probleem \u2014 hiljuti muudetud fragment \"faili keskelt\" kirjutataks kasutamata ruumi, s\u00f5ltumata sellest, kas selle suurus muutus v\u00f5i mitte, seega on ZFS jaoks see t\u00e4iesti tavap\u00e4rane olukord.<\/p>\n<p>ZFS sisseehitatud kompressioon on vaikimisi keelatud ja s\u00fcsteem pakub \u00fchendatavaid algoritme \u2014 praegu on nende hulgas LZ4, gzip (1-9), LZJB ja ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 see on vooluhulga algoritm, mis pakub \u00e4\u00e4rmiselt kiiret kompressiooni ja dekompressiooni ning j\u00f5udluse kasvu enamikus kasutusjuhtudes \u2014 isegi \u00fcsna aeglastel CPU-del.\n<\/li>\n<li><b>GZIP<\/b> \u2014 austatud algoritm, mida tunnevad ja armastavad k\u00f5ik Unix-s\u00fcsteemide kasutajad. Seda saab kasutada kompressioonitasemete 1-9 juures, kompressioonitaseme suurenemise ja CPU kasutamise kasvu t\u00f5ttu, kui l\u00e4henduda tasemele 9. Algoritm sobib h\u00e4sti k\u00f5ikide tekstiliste (v\u00f5i muude \u00e4\u00e4rmiselt kompressitavate) kasutusjuhtude jaoks, kuid vastasel korral tekitab see sageli probleeme CPU-ga \u2014 kasutage seda ettevaatlikult, eriti k\u00f5rgematel tasemetel.\n<\/li>\n<li><b>LZJB<\/b> \u2014 originaalalgoritm ZFS-is. See on vananenud ja ei tohiks enam kasutada, LZ4 \u00fcletab selle igas m\u00f5\u00f5tmes.\n<\/li>\n<li><b>ZLE<\/b> \u2014 null-taseme kodeerimine, Zero Level Encoding. See ei muuda normaalseid andmeid, vaid pigem tihendab suurte nullide j\u00e4rjestusi. See on kasulik t\u00e4iesti tihendamatute andmestike jaoks (nt JPEG, MP4 v\u00f5i muude juba tihendatud formaatide jaoks), kuna see ignoreerib tihendamatu sisu, kuid tihendab kasutamata ruumi l\u00f5plikest kirjetest.<\/li>\n<\/ul>\n<p>\nSoovitatav on LZ4 tihendamine praktiliselt k\u00f5igi kasutusjuhtumite puhul; j\u00f5udluse kokkupuude tihendamatute andmetega on v\u00e4ga v\u00e4ike ja <i>kasv<\/i> t\u00fc\u00fcpiliste andmete jaoks on see m\u00e4rkimisv\u00e4\u00e4rne. Virtuaalse masina pildi kopeerimine uue Windowsi operatsioonis\u00fcsteemi installeerimise jaoks (v\u00e4rskelt installitud OS, andmeid sees ei ole) <code>compression=lz4<\/code> oli 27% kiirem kui <code>compression=none<\/code>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">selles 2015. aasta testis.<\/a><\/noindex>.<\/p>\n<h1>ARC - adaptiivne asenduskate<\/h1>\n<p>\nZFS on ainus kaasaegne failis\u00fcsteem, millest me teame, mis kasutab oma lugemisk\u00e4itlemise mehhanismi, mitte ei tugi operatsioonis\u00fcsteemi lehtede vahemikule, et hoida hiljuti loetud blokke RAM-is.<\/p>\n<p>Kuigi sellel omal vahem\u00e4lu ei ole oma probleemid - ZFS ei saa reageerida uusi m\u00e4lu eraldamise p\u00e4ringuid nii kiiresti kui kernel, seega uus m\u00e4lu eraldamise kutse v\u00f5ib eba\u00f5nnestuda, kui see vajab RAM-i, mille ARC praegu kasutab. Kuid on kaalukaid p\u00f5hjuseid kasutada oma vahem\u00e4lu, v\u00e4hemalt praegu. <code>malloc()<\/code> K\u00f5ik tuntud kaasaegsed operatsioonis\u00fcsteemid, sealhulgas MacOS, Windows, Linux ja BSD, kasutavad lehtede vahem\u00e4lu rakendamiseks LRU (Mitte Hiljuti Kasutatud) algoritmi. See on primitiivne algoritm, mis t\u00f5stab vahem\u00e4llu talletatud bloki \"j\u00e4rjekorra tippu\" p\u00e4rast igat lugemist ja eemaldab bloki \"j\u00e4rjekorrast alla\", et vajadusel lisada uusi vahem\u00e4lu puuduolekuid (bloke, mis oleks pidanud lugema kettalt, mitte vahem\u00e4lust) tippu.<\/p>\n<p>Tavaliselt t\u00f6\u00f6tab algoritm h\u00e4sti, kuid suurte t\u00f6\u00f6andmete kogumitega s\u00fcsteemides viib LRU kergesti trashingu - sageli vajalike blokide eemaldamiseni, et vabastada ruumi blokeeringutele, mis ei loeta kunagi enam vahem\u00e4lust.<\/p>\n<p>ARC<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 oluliselt v\u00e4hem naivne algoritm, mida v\u00f5ib k\u00e4sitleda kui \"kaalutud\" vahem\u00e4lu. Iga kord, kui vahem\u00e4lust loetakse plokk, muutub see veidi \"raskemaks\" ja on keerulisem k\u00f5rvaldada \u2014 ning isegi p\u00e4rast eemaldamist plokk <i>j\u00e4lgitakse<\/i> teatud aja jooksul. Plokk, mis on k\u00f5rvaldatud, kuid peab seej\u00e4rel taas loetakse vahem\u00e4lusse, muutub samuti \"raskemaks\".<\/p>\n<p>K\u00f5ikide nende tegevuste l\u00f5pptulemus on vahem\u00e4lu, millel on palju suurem k\u00e4tte saamise koefitsient (hit ratio) \u2014 suhe vahem\u00e4lus toimuva lugemise (vahem\u00e4lust lugemine) ja puude (lugemine kettalt) vahel. See on \u00e4\u00e4rmiselt oluline statistika \u2014 mitte ainult see, et vahem\u00e4lu hitid teenindatakse kordades kiiremini, vaid ka vahem\u00e4lu puudud saavad samuti kiiremini teenindatud, kuna mida rohkem on vahem\u00e4lu hiti, seda v\u00e4hem on paralleelseid p\u00e4ringuid kettale ja seda v\u00e4hem on viivitusi nende j\u00e4\u00e4kpuudude teenindamisel, mis peavad olema teenindatud kettalt.<\/p>\n<h1>Kokkuv\u00f5te<\/h1>\n<p>\nP\u00e4rast ZFS p\u00f5hisemantika uurimist \u2014 kuidas toimib kirjutamisprotsess ning suhete uurimist salvestusreservide, virtuaalsete seadmete, plokkide, sektorite ja failide vahel \u2014 oleme valmis arutama tegelikku j\u00f5udlust koos tegelike numbritega.<\/p>\n<p>J\u00e4rgmisel osal vaatame v\u00f5rreldavat tegelikku j\u00f5udlust peegeldava vdev ja RAIDz vahel, samuti traditsiooniliste Linuxi tuuma RAID-topoloogiate vahel, mida oleme uurinud. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">artiklis<\/a><\/noindex>.<\/p>\n<p>Alguses soovisime vaadelda ainult p\u00f5hiteemasid \u2014 ZFS topoloogiaid endid \u2014 kuid p\u00e4rast <i>nii<\/i> oleme valmis r\u00e4\u00e4kima keerukamatest seadistustest ja ZFS h\u00e4\u00e4lestusest, sealhulgas abistavate vdev t\u00fc\u00fcpide, nagu L2ARC, SLOG ja Special Allocation, kasutamisest.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47ZFS p\u00f5him\u00f5tted: salvestuss\u00fcsteem ja j\u00f5udlus | ProHoster","description":"Sellel kevadel oleme juba arutanud m\u00f5ningaid.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}