{"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\/it\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Fondamenti di ZFS: sistema di archiviazione e prestazioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesta primavera abbiamo gi\u00e0 discusso alcuni argomenti introduttivi, ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">come controllare la velocit\u00e0 dei vostri dischi<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">cosa sia il RAID<\/a><\/noindex>. Nella seconda di esse abbiamo persino promesso di continuare a esplorare le prestazioni delle diverse topologie multi-disco in ZFS. Questo \u00e8 un file system di nuova generazione che sta attualmente venendo implementato ovunque: da <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> fino a <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 \/>\nBene, oggi \u00e8 il giorno perfetto per conoscere ZFS, cari lettori curiosi. Sappiate solo che, secondo la modesta stima dello sviluppatore di OpenZFS, Matt Arends, \u2018\u00e8 davvero complicato\u2019.<\/p>\n<p>Ma prima di arrivare ai numeri - e ci saranno, promesso - su tutte le varianti della configurazione a otto dischi di ZFS, dobbiamo parlare di come <i>come<\/i> ZFS memorizza i dati su disco.<\/p>\n<h1>Zpool, vdev e device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Questo diagramma del pool completo include tre vdev ausiliari, uno per ciascuna classe, e quattro per RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Di solito non ci sono motivi per creare un pool di vdev di tipi e dimensioni non corrispondenti - ma se lo desiderate, nulla vi impedisce di farlo.<\/i><\/p>\n<p>Per veramente comprendere il file system ZFS, \u00e8 necessario dare un'occhiata attenta alla sua struttura effettiva. In primo luogo, ZFS combina i tradizionali livelli di gestione dei volumi e del file system. In secondo luogo, utilizza un meccanismo di transazione di copia all'atto della scrittura. Queste caratteristiche significano che il sistema \u00e8 strutturalmente molto diverso dai normali file system e dagli array RAID. Il primo set di elementi costitutivi fondamentali per la comprensione: \u00e8 il pool di archiviazione (zpool), il dispositivo virtuale (vdev) e il dispositivo reale (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nIl pool di archiviazione zpool \u00e8 la struttura superiore di ZFS. Ogni pool contiene uno o pi\u00f9 dispositivi virtuali. A sua volta, ognuno di essi contiene uno o pi\u00f9 dispositivi reali (device). I pool virtuali sono blocchi autonomi. Un singolo computer fisico pu\u00f2 contenere due o pi\u00f9 pool separati, ma ognuno \u00e8 completamente indipendente dagli altri. I pool non possono condividere dispositivi virtuali.<\/p>\n<p>La ridondanza di ZFS si trova a livello dei dispositivi virtuali, non a livello dei pool. A livello dei pool non c'\u00e8 assolutamente alcuna ridondanza - se un disco vdev o un vdev speciale va perso, si perde anche l'intero pool.<\/p>\n<p>Le moderne pool di archiviazione possono sopportare la perdita della cache o del diario del dispositivo virtuale, sebbene possano perdere una piccola quantit\u00e0 di dati sporchi se perdi il diario vdev durante un'interruzione di corrente o un guasto di sistema.<\/p>\n<p>C'\u00e8 un'eccessiva convinzione che le 'strisce di dati' (striping) in ZFS vengano scritte su tutto il pool. Questo \u00e8 errato. Zpool non \u00e8 affatto un divertente RAID0, \u00e8 piuttosto un divertente <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> con un meccanismo di distribuzione variabile complesso.<\/p>\n<p>Per la maggior parte, le scritture vengono distribuite tra i dispositivi virtuali disponibili in base allo spazio libero disponibile, in modo che, teoricamente, tutti vengano riempiti contemporaneamente. Nelle versioni pi\u00f9 recenti di ZFS, viene considerato l'uso corrente (utilizzo) del vdev: se un dispositivo virtuale \u00e8 significativamente pi\u00f9 carico di un altro (ad esempio, a causa di un carico di lettura), verr\u00e0 temporaneamente saltato per la scrittura, nonostante ci sia spazio libero disponibile.<\/p>\n<p>Il meccanismo di determinazione dell'utilizzo, integrato nei moderni metodi di distribuzione della scrittura di ZFS, pu\u00f2 ridurre la latenza e aumentare la larghezza di banda in periodi di carico di lavoro insolitamente elevato, ma questo non \u00e8 <i>un lasciapassare<\/i> per una mescolanza involontaria di HDD lenti e SSD veloci in un unico pool. Un pool impari funzioner\u00e0 comunque alla velocit\u00e0 del dispositivo pi\u00f9 lento, come se fosse composto esclusivamente da tali dispositivi.<\/p>\n<h3>vdev<\/h3>\n<p>\nOgni pool di archiviazione \u00e8 composto da uno o pi\u00f9 dispositivi virtuali (virtual device, vdev). A sua volta, ogni vdev include uno o pi\u00f9 dispositivi fisici. La maggior parte dei dispositivi virtuali viene utilizzata per la semplice archiviazione dei dati, ma ci sono diverse classi ausiliarie di vdev, tra cui CACHE, LOG e SPECIAL. Ognuno di questi tipi di vdev pu\u00f2 avere una delle cinque topologie: dispositivo singolo (single-device), RAIDz1, RAIDz2, RAIDz3 o mirror.<\/p>\n<p>RAIDz1, RAIDz2 e RAIDz3 sono speciali variet\u00e0 di ci\u00f2 che i veterani chiamerebbero RAID a doppia (diagonale) parit\u00e0. 1, 2 e 3 si riferiscono a quanti blocchi di parit\u00e0 sono riservati per ciascuna stripe di dati. Invece di dischi separati per garantire la parit\u00e0, i dispositivi virtuali RAIDz distribuiscono uniformemente questa parit\u00e0 tra i dischi. Un array RAIDz pu\u00f2 perdere tanti dischi quanti sono i suoi blocchi di parit\u00e0; se ne perde un altro, smetter\u00e0 di funzionare e porter\u00e0 con s\u00e9 il pool di archiviazione.<\/p>\n<p>Nei dispositivi virtuali a specchio (mirror vdev), ogni blocco \u00e8 memorizzato su ciascun dispositivo nel vdev. Sebbene i doppi specchi (two-wide) siano i pi\u00f9 comuni, nello specchio pu\u00f2 esserci qualsiasi numero arbitrario di dispositivi; nelle installazioni pi\u00f9 grandi, per migliorare le prestazioni di lettura e la tolleranza ai guasti, spesso si utilizzano i tripli. Uno specchio vdev pu\u00f2 sopravvivere a qualsiasi guasto, purch\u00e9 almeno un dispositivo nel vdev continui a funzionare.<\/p>\n<p>I vdev singoli sono intrinsecamente pericolosi. Un tale dispositivo virtuale non sopravviver\u00e0 a nessun guasto; e se viene utilizzato come storage o vdev speciale, il suo guasto porter\u00e0 alla distruzione dell'intero pool. Fai attenzione qui, molto, molto attenzione.<\/p>\n<p>I dispositivi virtuali CACHE, LOG e SPECIAL possono essere creati secondo qualsiasi delle topologie sopra menzionate \u2014 ma ricorda che la perdita di un dispositivo virtuale SPECIAL significa la perdita del pool, quindi si raccomanda vivamente una topologia ridondante.<\/p>\n<h3>dispositivo<\/h3>\n<p>\nProbabilmente \u00e8 il termine pi\u00f9 semplice da capire in ZFS \u2014 \u00e8 letteralmente un dispositivo a blocchi di accesso casuale. Ricorda che i dispositivi virtuali sono composti da dispositivi separati, e il pool \u00e8 fatto di dispositivi virtuali.<\/p>\n<p>I dischi \u2014 magnetici o a stato solido \u2014 sono i dispositivi a blocchi pi\u00f9 comuni utilizzati come mattoni per il vdev. Tuttavia, qualsiasi dispositivo con un descrittore in \/dev \u00e8 adatto \u2014 quindi interi array RAID hardware possono essere utilizzati come dispositivi separati.<\/p>\n<p>Un semplice file raw \u00e8 uno dei pi\u00f9 importanti dispositivi a blocchi alternativi da cui pu\u00f2 essere costruito un vdev. I pool di test da <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">file sparsi<\/a><\/noindex>\u00a0sono un modo molto utile per verificare i comandi del pool e vedere quanta memoria \u00e8 disponibile nel pool o nel dispositivo virtuale di questa topologia.<\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Puoi creare un pool di test da file sparsi in pochi secondi, ma non dimenticare di rimuovere successivamente l'intero pool e i suoi componenti.<\/i> <\/p>\n<p>Supponiamo che tu voglia configurare un server con otto dischi e stia pianificando di utilizzare dischi da 10 TB (~9300 GiB) - ma non sei sicuro su quale topologia si adatti meglio alle tue esigenze. Nell'esempio sopra, costruiamo in pochi secondi un pool di test da file sparsi e ora sappiamo che un vdev RAIDz2 composto da otto dischi da 10 TB offre 50 TiB di capacit\u00e0 utile.<\/p>\n<p>Un'altra classe speciale di dispositivi \u00e8 SPARE (riserva). I dispositivi hot-swappable, a differenza dei normali dispositivi, appartengono a tutto il pool, non a un singolo dispositivo virtuale. Se un vdev nel pool fallisce e un dispositivo di riserva \u00e8 connesso al pool e disponibile, si unir\u00e0 automaticamente al vdev danneggiato.<\/p>\n<p>Dopo che il dispositivo di riserva si \u00e8 collegato al vdev danneggiato, inizia a ricevere copie o ricostruzioni dei dati che dovrebbero essere sul dispositivo mancante. Nel RAID tradizionale, questo \u00e8 chiamato recupero (rebuilding), mentre in ZFS \u00e8 'ripristino della ridondanza' (resilvering).<\/p>\n<p>\u00c8 importante notare che i dispositivi di riserva non sostituiscono permanentemente i dispositivi guasti. Sono solo una sostituzione temporanea per ridurre il tempo durante il quale si verifica la degradazione del vdev. Dopo che l'amministratore sostituisce il dispositivo guasto nel vdev, la ridondanza viene ripristinata su questo dispositivo permanente, e il SPARE si disconnette dal vdev e torna a funzionare come riserva per l'intero pool.<\/p>\n<h1>Set di dati, blocchi e settori<\/h1>\n<p>\nIl prossimo set di mattoni da capire nel nostro viaggio attraverso ZFS riguarda non tanto l'hardware, quanto il modo in cui i dati stessi sono organizzati e memorizzati. Qui saltando alcuni livelli \u2014 come il metaslab \u2014 per non sovraccaricare i dettagli, mantenendo la comprensione della struttura generale.<\/p>\n<h3>Set di dati (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Quando creiamo per la prima volta un set di dati, mostra tutto lo spazio disponibile nel pool. Poi imposteremo una quota e cambieremo il punto di montaggio. Magia!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol \u00e8 per lo pi\u00f9 semplicemente un set di dati privo del proprio strato di file system, che qui sostituiamo con un file system ext4 del tutto normale.<\/i> <\/p>\n<p>Il dataset ZFS \u00e8 sostanzialmente simile a un file system montato standard. Proprio come un normale file system, a prima vista sembra \"solo un'altra cartella\". Ma, come con i normali file system montati, ogni dataset ZFS ha un insieme proprio di propriet\u00e0 fondamentali.<\/p>\n<p>Prima di tutto, un dataset pu\u00f2 avere una quota assegnata. Se si imposta <code>zfs set quota=100G poolname\/datasetname<\/code>, non sar\u00e0 possibile scrivere nella cartella montata <code>\/poolname\/datasetname<\/code> pi\u00f9 di 100 GiB.<\/p>\n<p>Hai notato la presenza \u2013 e l'assenza \u2013 di slash all'inizio di ogni riga? Ogni dataset ha il proprio posto sia nell'gerarchia ZFS che nell'gerarchia di montaggio del sistema. Nell'gerarchia ZFS non c'\u00e8 uno slash iniziale: si inizia con il nome del pool e poi il percorso da un dataset all'altro. Ad esempio, <code>pool\/parent\/child<\/code> per un dataset con il nome <code>child<\/code> sotto il dataset genitore <code>parent<\/code> in un pool con un nome creativo <code>pool<\/code>.<\/p>\n<p>Per impostazione predefinita, il punto di montaggio del dataset sar\u00e0 equivalente al suo nome nell'gerarchia ZFS, con uno slash all'inizio: il pool con nome <code>pool<\/code> viene montato come <code>\/pool<\/code>, il dataset <code>parent<\/code> viene montato in <code>\/pool\/parent<\/code>, e il dataset figlio <code>child<\/code> viene montato in <code>\/pool\/parent\/child<\/code>. Tuttavia, il punto di montaggio del dataset del sistema pu\u00f2 essere modificato.<\/p>\n<p>Se specifichiamo <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, il dataset <code>pool\/parent\/child<\/code> sar\u00e0 montato nel sistema come <code>\/lol<\/code>.<\/p>\n<p>In aggiunta ai dataset, dobbiamo menzionare i volumi (zvols). Un volume \u00e8 sostanzialmente simile a un dataset, eccetto che in esso non c'\u00e8 effettivamente un file system \u2013 \u00e8 semplicemente un dispositivo a blocchi. Puoi, ad esempio, creare <code>zvol<\/code> con il nome <code>mypool\/myzvol<\/code>, quindi formattarlo con il file system ext4, e poi montare questo file system \u2013 ora hai un file system ext4, ma con il supporto di tutte le funzionalit\u00e0 di sicurezza ZFS! Pu\u00f2 sembrare strano su un singolo computer, ma ha molto pi\u00f9 senso come backend quando si esporta un dispositivo iSCSI.<\/p>\n<h3>Blocchi<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un file \u00e8 rappresentato da uno o pi\u00f9 blocchi. Ogni blocco \u00e8 memorizzato su un singolo dispositivo virtuale. La dimensione del blocco \u00e8 generalmente uguale al parametro <b>recordsize<\/b>, ma pu\u00f2 essere ridotta a <b>2^ashift<\/b>, se contiene metadati o un file di piccole dimensioni.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Non stiamo davvero scherzando riguardo al danno enorme alle prestazioni se si imposta un ashift troppo piccolo. <b>in effetti<\/b> non stiamo scherzando riguardo ai danni enormi alle prestazioni se imposti un ashift troppo piccolo.<\/i><\/p>\n<p>Nel pool ZFS, tutti i dati, comprese le metainformazioni, sono memorizzati in blocchi. La dimensione massima del blocco per ciascun dataset \u00e8 definita nella propriet\u00e0 <code>recordsize<\/code> (dimensione del record). La dimensione del record pu\u00f2 variare, ma questo non influenzer\u00e0 la dimensione o la posizione di qualsiasi blocco che \u00e8 gi\u00e0 stato scritto nel dataset \u2014 vale solo per i nuovi blocchi man mano che vengono scritti.<\/p>\n<p>Se non diversamente specificato, la dimensione del record attuale per impostazione predefinita \u00e8 di 128 KiB. \u00c8 una sorta di compromesso non banale, dove le prestazioni non saranno ideali, ma nemmeno disastrose nella maggior parte dei casi. <code>Recordsize<\/code> pu\u00f2 essere impostato su qualsiasi valore da 4K a 1M (con ulteriori configurazioni <code>recordsize<\/code> pu\u00f2 essere impostato ancora pi\u00f9 in alto, ma di solito non \u00e8 una buona idea).<\/p>\n<p>Ogni blocco fa riferimento solo ai dati di un singolo file \u2014 non \u00e8 possibile inserire due file diversi in un unico blocco. Ogni file \u00e8 composto da uno o pi\u00f9 blocchi, a seconda della dimensione. Se la dimensione del file \u00e8 inferiore alla dimensione del record, verr\u00e0 memorizzato in un blocco di dimensioni inferiori \u2014 per esempio, un blocco con un file di 2 KiB occuper\u00e0 solo un settore di 4 KiB sul disco.<\/p>\n<p>Se il file \u00e8 sufficientemente grande e richiede pi\u00f9 blocchi, tutte le registrazioni con quel file avranno una dimensione <code>recordsize<\/code>\u00a0\u2014 inclusa l'ultima registrazione, la cui parte principale potrebbe risultare <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">spazio non utilizzato<\/a><\/noindex>.<\/p>\n<p>I volumi zvol non hanno la propriet\u00e0 <code>recordsize<\/code>\u00a0\u2014 invece hanno una propriet\u00e0 equivalente <code>volblocksize<\/code>.<\/p>\n<h3>Settori<\/h3>\n<p>\nL'ultimo e pi\u00f9 basilare mattoncino \u00e8 il settore. Questa \u00e8 l'unit\u00e0 fisica pi\u00f9 piccola che pu\u00f2 essere scritta o letta dal dispositivo sottostante. Per decenni, la maggior parte dei dischi ha utilizzato settori da 512 byte. Ultimamente, la maggior parte dei dischi \u00e8 configurata per settori da 4 KiB, e in alcuni \u2014 specialmente SSD \u2014 settori da 8 KiB o anche di pi\u00f9.<\/p>\n<p>Nel sistema ZFS esiste una propriet\u00e0 che consente di impostare manualmente la dimensione del settore. Questa propriet\u00e0 <code>ashift<\/code>. \u00c8 un po' confuso, poich\u00e9 ashift \u00e8 una potenza di due. Ad esempio, <code>ashift=9<\/code> significa una dimensione del settore di 2^9, ovvero 512 byte.<\/p>\n<p>ZFS richiede al sistema operativo informazioni dettagliate su ogni dispositivo di archiviazione a blocchi quando viene aggiunto a un nuovo vdev, e teoricamente imposta automaticamente ashift correttamente sulla base di queste informazioni. Sfortunatamente, molti dischi mentono sulle loro dimensioni di settore, per mantenere la compatibilit\u00e0 con Windows XP (che non \u00e8 in grado di comprendere dischi con dimensioni di settore diverse).<\/p>\n<p>Questo significa che l'amministratore ZFS \u00e8 fortemente incoraggiato a conoscere la reale dimensione del settore delle proprie unit\u00e0 e a impostarla manualmente <code>ashift<\/code>. Se ashift \u00e8 impostato troppo piccolo, il numero di operazioni di lettura\/scrittura aumenta astronomicamente. Scrivere \"settori\" da 512 byte in un vero settore da 4 KiB implica la necessit\u00e0 di scrivere prima il \"settore\" poi leggere il settore da 4 KiB, modificarlo con il secondo \"settore\" da 512 byte, riscriverlo nel nuovo settore da 4 KiB e cos\u00ec via per ogni scrittura.<\/p>\n<p>Nel mondo reale, questa penalizzazione colpisce gravemente i dischi a stato solido Samsung EVO, per i quali deve essere applicato <code>ashift=13<\/code>, ma questi SSD mentono sulla loro dimensione di settore, e quindi per impostazione predefinita viene fissato <code>ashift=9<\/code>. Se un amministratore di sistema esperto non modifica questa impostazione, questo SSD funziona <i>pi\u00f9 lentamente<\/i> come un normale HDD magnetico.<\/p>\n<p>A confronto, per dimensioni troppo grandi <code>ashift<\/code> non c\u2019\u00e8 praticamente alcuna penalizzazione. Non c'\u00e8 una reale riduzione delle prestazioni, e l'aumento dello spazio inutilizzato \u00e8 infinitesimale (o nullo con la compressione attivata). Pertanto, raccomandiamo vivamente anche a quei dischi che utilizzano effettivamente settori da 512 byte di impostare <code>ashift=12<\/code> o addirittura <code>ashift=13<\/code>, per guardare al futuro con fiducia.<\/p>\n<p>La propriet\u00e0 <code>ashift<\/code> viene impostato per ogni dispositivo virtuale vdev, e <i>non per il pool<\/i>, come molti erroneamente pensano - e non pu\u00f2 essere cambiato dopo l'impostazione. Se accidentalmente si sbaglia <code>ashift<\/code> quando si aggiunge un nuovo vdev al pool, si \u00e8 contaminato irreparabilmente questo pool con un dispositivo a bassa prestazione e, in genere, non c'\u00e8 altra soluzione se non quella di distruggere il pool e ricominciare da capo. Anche rimuovere il vdev non salver\u00e0 da un'impostazione errata. <code>ashift<\/code>!<\/p>\n<h3>Il meccanismo di copia su scrittura<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Se un normale file system deve riscrivere i dati, cambia ogni blocco l\u00ec dove si trova.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il file system con copia alla scrittura salva una nuova versione del blocco e poi sblocca la vecchia versione.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>In termini astratti, ignorando la reale posizione fisica dei blocchi, la nostra \u00abcometa dei dati\u00bb si semplifica in un \u00abverme dei dati\u00bb che si muove da sinistra a destra sulla mappa dello spazio disponibile.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ora possiamo avere una buona comprensione di come funzionano gli snapshot di copia alla scrittura: ogni blocco pu\u00f2 appartenere a pi\u00f9 snapshot e rester\u00e0 fino a quando non verranno distrutti tutti gli snapshot associati.<\/i><\/p>\n<p>Il meccanismo di copia alla scrittura (Copy on Write, CoW) \u00e8 la base fondamentale di ci\u00f2 che rende ZFS un sistema cos\u00ec straordinario. Il concetto di base \u00e8 semplice: se chiedi a un file system tradizionale di modificare un file, far\u00e0 esattamente ci\u00f2 che hai richiesto. Se chiedi a un file system con copia alla scrittura di fare lo stesso, dir\u00e0 \u00abva bene\u00bb \u2014 ma ti mentir\u00e0.<\/p>\n<p>Invece, il file system con copia alla scrittura salva una nuova versione del blocco modificato e poi aggiorna i metadati del file per interrompere il legame con il vecchio blocco e collegare a esso il nuovo blocco che hai appena scritto.<\/p>\n<p>La disconnessione del vecchio blocco e il collegamento del nuovo avviene in un'unica operazione, quindi non pu\u00f2 essere interrotta: se spegni l'alimentazione dopo che ci\u00f2 \u00e8 avvenuto, hai una nuova versione del file, e se spegni l'alimentazione prima, hai la vecchia versione. In entrambi i casi, non ci saranno conflitti nel file system.<\/p>\n<p>La copia alla scrittura in ZFS avviene non solo a livello di file system, ma anche a livello di gestione dei dischi. Questo significa che ZFS non \u00e8 soggetto a un buco nella scrittura (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">buco nel RAID<\/a><\/noindex>) \u2014 un fenomeno in cui il numero di strisce \u00e8 stato scritto solo parzialmente prima di un guasto di sistema, con danni all'array dopo il riavvio. Qui la striscia \u00e8 scritta in modo atomico, vdev \u00e8 sempre coerente, e <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob \u00e8 tuo zio.<\/a><\/noindex>.<\/p>\n<h3>ZIL: diario delle intenzioni ZFS<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il sistema ZFS gestisce le scritture sincrone in modo particolare: le salva temporaneamente, ma immediatamente, nello ZIL, prima di scriverle successivamente in modo permanente insieme alle scritture asincrone.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Di solito, i dati scritti nello ZIL non vengono mai letti di nuovo. Ma ci\u00f2 \u00e8 possibile dopo un guasto di sistema.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, o dispositivo LOG secondario, \u00e8 semplicemente un vdev speciale \u2013 e, preferibilmente, molto veloce \u2013 dove ZIL pu\u00f2 essere memorizzato separatamente dallo storage principale<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dopo un guasto, tutti i dati sporchi nel ZIL vengono ripristinati \u2013 in questo caso il ZIL si trova su SLOG, quindi vengono ripristinati proprio da l\u00ec<\/i><\/p>\n<p>Ci sono due categorie principali di operazioni di scrittura \u2013 sincroniche (sync) e asincroniche (async). Per la maggior parte dei carichi di lavoro, la stragrande maggioranza delle operazioni di scrittura \u00e8 asincronica \u2013 il file system consente di aggregarle e restituirle in pacchetti, riducendo la frammentazione e aumentando notevolmente la larghezza di banda.<\/p>\n<p>Le scritture sincroniche sono un'altra cosa. Quando un'applicazione richiede una scrittura sincronica, sta dicendo al file system: \u00abDevi confermarla nella memoria non volatile <i>questo preciso momento<\/i>, e fino ad allora non posso fare nient'altro\u00bb. Pertanto, le scritture sincroniche devono essere immediatamente confermate su disco \u2013 e se ci\u00f2 aumenta la frammentazione o riduce la larghezza di banda, cos\u00ec sia.<\/p>\n<p>ZFS gestisce le scritture sincroniche in modo diverso rispetto ai normali file system \u2013 invece di riversarle immediatamente nello storage normale, ZFS le conferma in un'area di storage speciale chiamata journal delle intenzioni ZFS \u2013 ZFS Intent Log, o ZIL. La chiave \u00e8 che queste scritture <i>anche<\/i> rimangono in memoria, aggregate insieme alle normali richieste di scrittura asincroniche, per essere successivamente scaricate nello storage come normali TXG (gruppi di transazione, Transaction Groups).<\/p>\n<p>In condizioni di funzionamento normale, il ZIL viene scritto e mai pi\u00f9 letto. Quando, dopo qualche istante, le scritture dal ZIL vengono confermate nello storage principale nei normali TXG dalla memoria, si scollegano dal ZIL. L'unico momento in cui qualcosa viene letto dal ZIL \u00e8 durante l'importazione del pool.<\/p>\n<p>Se si verifica un guasto di ZFS \u2013 guasto del sistema operativo o interruzione di corrente \u2013 quando ci sono dati nel ZIL, questi dati verranno letti durante il successivo import del pool (ad esempio, al riavvio del sistema di emergenza). Tutto ci\u00f2 che si trova nel ZIL sar\u00e0 letto, aggregato in gruppi TXG, confermato nello storage principale e poi scollegato dal ZIL durante il processo di importazione.<\/p>\n<p>Una delle classi ausiliarie vdev si chiama LOG o SLOG, dispositivo secondario LOG. Ha un compito: fornire un pool con un dispositivo vdev separato e, preferibilmente, molto pi\u00f9 veloce, con un'alta resilienza alla scrittura per memorizzare ZIL, invece di memorizzare ZIL nel principale archivio vdev. Lo stesso ZIL si comporta allo stesso modo indipendentemente dalla posizione di archiviazione, ma se un vdev con LOG ha una prestazione di scrittura molto alta, le scritture sincrone avranno luogo pi\u00f9 rapidamente.<\/p>\n<p>L'aggiunta di un vdev con LOG nel pool in alcun modo <b>non pu\u00f2<\/b> migliorare le prestazioni della scrittura asincrona - anche se forzi tutte le scritture in ZIL tramite <code>zfs set sync=always<\/code>, saranno comunque legate all'archiviazione principale in TXG allo stesso modo e alla stessa velocit\u00e0 di prima della registrazione. L'unico miglioramento diretto delle prestazioni \u00e8 il ritardo nella scrittura sincrona (poich\u00e9 una maggiore velocit\u00e0 del log accelera l'esecuzione delle operazioni <code>sync<\/code>).<\/p>\n<p>Tuttavia, in un ambiente che richiede gi\u00e0 un gran numero di scritture sincrone, il vdev LOG pu\u00f2 indirettamente accelerare la scrittura asincrona e la lettura non memorizzata nella cache. Scaricare le scritture ZIL in un vdev LOG separato significa meno concorrenza per gli IOPS nello storage primario, il che migliora in qualche modo le prestazioni di tutte le operazioni di lettura e scrittura.<\/p>\n<h3>Snapshot<\/h3>\n<p>\nIl meccanismo di copia-on-write \u00e8 anche una base necessaria per gli istantanei atomici di ZFS e la replica asincrona incrementale. In un file system attivo esiste un albero di puntatori che segna tutte le scritture con i dati correnti: quando si crea uno snapshot, si fa semplicemente una copia di questo albero di puntatori.<\/p>\n<p>Quando in un file system attivo viene sovrascritta una scrittura, ZFS prima scrive una nuova versione del blocco in uno spazio inutilizzato. Poi scollega la vecchia versione del blocco dal file system corrente. Ma se uno snapshot fa riferimento al vecchio blocco, rimane comunque immutato. Il vecchio blocco non sar\u00e0 effettivamente recuperato come spazio libero finch\u00e9 tutti gli snapshot che fanno riferimento a quel blocco non saranno eliminati!<\/p>\n<h3>Replica<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>La mia libreria Steam nel 2015 occupava 158 GiB e conteneva 126.927 file. \u00c8 abbastanza vicino alla situazione ottimale per rsync: la replica di ZFS in rete era \"solo\" il 750% pi\u00f9 veloce.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nella stessa rete, la replica di un file immagine di macchina virtuale Windows 7 da 40 GiB \u00e8 un'altra storia. La replica ZFS avviene 289 volte pi\u00f9 velocemente rispetto a rsync \u2014 o 'solo' 161 volte pi\u00f9 veloce, se sei abbastanza esperto da chiamare rsync con l'opzione \u2014inplace.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fondamenti di ZFS: sistema di archiviazione e prestazioni\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Quando l'immagine della macchina virtuale viene scalata, i problemi di rsync si scalano insieme ad essa. Una dimensione di 1,9 TiB non \u00e8 cos\u00ec grande per un'immagine di macchina virtuale moderna \u2014 ma \u00e8 abbastanza grande affinch\u00e9 la replica ZFS risulti 1148 volte pi\u00f9 veloce di rsync, anche con l'argomento rsync \u2014inplace.<\/i><\/p>\n<p>Una volta che capisci come funzionano gli snapshot, sar\u00e0 facile afferrare il concetto di replica. Poich\u00e9 uno snapshot \u00e8 semplicemente un albero di puntatori a registrazioni, ne consegue che se facciamo <code>zfs send<\/code> di uno snapshot, stiamo inviando sia questo albero che tutte le registrazioni ad esso correlate. Quando trasmettiamo questo <code>zfs send<\/code> in <code>zfs receive<\/code> all'oggetto di destinazione, scrive sia il reale contenuto del blocco sia l'albero di puntatori che punta ai blocchi, nel set di dati di destinazione.<\/p>\n<p>Le cose diventano ancora pi\u00f9 interessanti con il secondo <code>zfs send<\/code>. Ora abbiamo due sistemi, ciascuno dei quali contiene <code>poolname\/datasetname@1<\/code>, e tu scatti un nuovo snapshot <code>poolname\/datasetname@2<\/code>. Pertanto, nel pool sorgente hai <code>datasetname@1<\/code> e <code>datasetname@2<\/code>, mentre nel pool di destinazione hai solo il primo snapshot. <code>datasetname@1<\/code>.<\/p>\n<p>Poich\u00e9 tra sorgente e destinazione abbiamo uno snapshot comune <code>datasetname@1<\/code>, possiamo fare <i>incrementale<\/i> <code>zfs send<\/code> su di esso. Quando diciamo al sistema <code>zfs send -i poolname\/datasetname@1 poolname\/datasetname@2<\/code>, confronta i due alberi di puntatori. Qualsiasi puntatore che esista solo in <code>@2<\/code>, evidentemente, punta a nuovi blocchi - quindi avremo bisogno del contenuto di questi blocchi.<\/p>\n<p>Nel sistema remoto, l'elaborazione incrementale <code>send<\/code> \u00e8 altrettanto semplice. Prima registriamo tutte le nuove registrazioni incluse nel flusso <code>send<\/code>, e poi aggiungiamo i puntatori a questi blocchi. Voil\u00e0, abbiamo <code>@2<\/code> nel nuovo sistema!<\/p>\n<p>La replica incrementale asincrona ZFS \u00e8 un enorme miglioramento rispetto ai metodi precedenti non basati su snapshot, come rsync. In entrambi i casi vengono trasferiti solo i dati modificati - ma rsync deve prima <i>lettura<\/i> leggere i dati da entrambe le parti per verificare il checksum e confrontarlo. Al contrario, la replica ZFS non legge nulla tranne gli alberi di puntatori - e qualsiasi blocco che non \u00e8 presente nello snapshot comune.<\/p>\n<h3>Compressione integrata<\/h3>\n<p>\nIl meccanismo di copia durante la scrittura semplifica anche il sistema di compressione integrata. Nelle tradizionali sistemi di file, la compressione \u00e8 problematica: sia la vecchia versione che la nuova versione dei dati modificati si trovano nello stesso spazio.<\/p>\n<p>Se consideriamo un frammento di dati nel mezzo di un file, che inizia la sua vita come un megabyte di zeri da 0x00000000 e cos\u00ec via, \u00e8 molto facile comprimerlo in un solo settore su disco. Ma cosa succede se sostituiamo questo megabyte di zeri con un megabyte di dati non comprimibili, come JPEG o rumore pseudo-casuale? Improvvisamente, a questo megabyte di dati servirebbero non uno, ma 256 settori da 4 KiB, mentre in questa parte del disco \u00e8 riservato solo un settore.<\/p>\n<p>ZFS non ha questo problema, poich\u00e9 le registrazioni modificate vengono sempre scritte in spazio inutilizzato: il blocco originale occupa solo un settore da 4 KiB, mentre la nuova registrazione occuper\u00e0 256, ma questo non \u00e8 un problema: il frammento modificato pi\u00f9 recentemente \"dal mezzo\" del file sarebbe scritto nello spazio inutilizzato indipendentemente dal fatto che la sua dimensione sia cambiata o meno, quindi per ZFS \u00e8 una situazione del tutto normale.<\/p>\n<p>La compressione integrata di ZFS \u00e8 disabilitata per impostazione predefinita e il sistema offre algoritmi plug-in: attualmente ci sono LZ4, gzip (1-9), LZJB e ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 \u00e8 un algoritmo a flusso che offre una compressione e decompressione estremamente veloci e vantaggi prestazionali per la maggior parte dei casi d'uso, anche su CPU piuttosto lente.\n<\/li>\n<li><b>GZIP<\/b> \u2014 \u00e8 un algoritmo rispettabile, conosciuto e amato da tutti gli utenti dei sistemi Unix. Pu\u00f2 essere implementato con livelli di compressione da 1 a 9, con un aumento del grado di compressione e utilizzo della CPU man mano che ci si avvicina al livello 9. L'algoritmo \u00e8 ben adattato per tutti gli usi testuali (o altri casi estremamente comprimibili), ma altrimenti spesso pu\u00f2 causare problemi con la CPU: usalo con cautela, soprattutto a livelli pi\u00f9 elevati.\n<\/li>\n<li><b>LZJB<\/b> \u2014 \u00e8 l'algoritmo originale in ZFS. \u00c8 obsoleto e non dovrebbe pi\u00f9 essere utilizzato, LZ4 lo supera in tutti i parametri.\n<\/li>\n<li><b>ZLE<\/b> \u2014 codifica di livello zero, Zero Level Encoding. Essa non interferisce con i dati normali, ma comprime grandi sequenze di zeri. Utile per set di dati completamente non comprimibili (ad esempio, JPEG, MP4 o altri formati gi\u00e0 compressi), poich\u00e9 ignora i dati non comprimibili, ma comprime lo spazio non utilizzato nei record finali.<\/li>\n<\/ul>\n<p>\nConsigliamo la compressione LZ4 praticamente per tutte le applicazioni; la penalizzazione delle prestazioni quando si incontrano dati non comprimibili \u00e8 molto bassa, e <i>incremento<\/i> le prestazioni per i dati tipici sono significative. La copia di un'immagine di macchina virtuale per una nuova installazione del sistema operativo Windows (OS appena installata, senza dati all'interno) con <code>compression=lz4<\/code> \u00e8 stata eseguita con il 27% di velocit\u00e0 in pi\u00f9 rispetto a <code>compression=none<\/code>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">in questo test del 2015<\/a><\/noindex>.<\/p>\n<h1>ARC \u2014 cache di sostituzione adattiva<\/h1>\n<p>\nZFS \u00e8 l'unico file system moderno di cui siamo a conoscenza che utilizza un proprio meccanismo di caching per la lettura, invece di fare affidamento sulla cache delle pagine del sistema operativo per memorizzare copie dei blocchi letti di recente nella memoria.<\/p>\n<p>Sebbene la cache proprietaria non sia priva di problemi \u2014 ZFS non pu\u00f2 rispondere a nuove richieste di allocazione di memoria con la stessa velocit\u00e0 del kernel, quindi una nuova chiamata <code>malloc()<\/code> per l'allocazione di memoria pu\u00f2 fallire se ha bisogno di memoria RAM attualmente occupata da ARC. Ma ci sono ottime ragioni per utilizzare una cache proprietaria, almeno per ora.<\/p>\n<p>Tutti i sistemi operativi moderni noti, inclusi MacOS, Windows, Linux e BSD, utilizzano l'algoritmo LRU (Least Recently Used) per implementare la cache delle pagine. Questo \u00e8 un algoritmo primitivo, che promuove il blocco cache \"in cima alla coda\" dopo ogni lettura e espelle i blocchi \"in fondo alla coda\" secondo necessit\u00e0, per aggiungere nuovi cache miss (blocchi che dovevano essere letti dal disco, e non dalla cache) in alto.<\/p>\n<p>In genere, l'algoritmo funziona correttamente, ma nei sistemi con ampi set di dati, l'LRU porta facilmente al thrashing \u2014 espellendo blocchi spesso necessari per liberare spazio per blocchi che non saranno mai pi\u00f9 letti dalla cache.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 un algoritmo molto meno na\u00eff, che pu\u00f2 essere considerato come una cache \u00abponderata\u00bb. Dopo ogni lettura di un blocco memorizzato nella cache, esso diventa un po' pi\u00f9 \u00abpesante\u00bb e diventa pi\u00f9 difficile da espellere \u2014 e anche dopo l'espulsione, il blocco <i>\u00e8 monitorato<\/i> per un determinato periodo di tempo. Un blocco che \u00e8 stato espulso ma deve essere letto nuovamente nella cache diventer\u00e0 anch'esso \u00abpi\u00f9 pesante\u00bb.<\/p>\n<p>Il risultato finale di tutto ci\u00f2 \u00e8 una cache con un rapporto di hit (hit ratio) molto pi\u00f9 elevato \u2014 ovvero il rapporto tra i hit nella cache (lettura eseguita dalla cache) e i miss (lettura dal disco). Questa \u00e8 una statistica estremamente importante \u2014 i hit nella cache non solo vengono gestiti considerevolmente pi\u00f9 velocemente, ma anche i miss della cache possono essere gestiti pi\u00f9 rapidamente, perch\u00e9 pi\u00f9 hit nella cache significano meno richieste parallele al disco e meno latenza per i miss rimanenti, che devono essere gestiti dal disco.<\/p>\n<h1>Conclusione<\/h1>\n<p>\nDopo aver studiato la semantica fondamentale di ZFS \u2014 come funziona la scrittura, nonch\u00e9 le relazioni tra i pool di storage, i dispositivi virtuali, i blocchi, i settori e i file \u2014 siamo pronti a discutere delle reali prestazioni con numeri concreti.<\/p>\n<p>Nella parte successiva, esamineremo le prestazioni effettive dei pool con vdev speculari e RAIDz, uno in confronto all'altro, e anche rispetto alle tradizionali topologie RAID del kernel Linux che abbiamo esplorato. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">in precedenza<\/a><\/noindex>.<\/p>\n<p>Inizialmente volevamo esaminare solo le basi \u2014 le stesse topologie di ZFS \u2014 ma dopo <i>tanto<\/i> saremo pronti a parlare di configurazioni avanzate e ottimizzazione di ZFS, incluso l'uso di tipi ausiliari di vdev, come L2ARC, SLOG e Special Allocation.<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Fondamenti di ZFS: sistema di archiviazione e prestazioni | ProHoster","description":"Questa primavera abbiamo gi\u00e0 discusso alcune di esse.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}