{"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\/es\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Fundamentos de ZFS: sistema de almacenamiento y rendimiento","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsta primavera ya discutimos algunos temas introductorios, como <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">c\u00f3mo verificar la velocidad de sus discos<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">qu\u00e9 es RAID<\/a><\/noindex>. En el segundo de ellos incluso prometimos continuar explorando el rendimiento de varias topolog\u00edas de m\u00faltiples discos en ZFS. Este es un sistema de archivos de pr\u00f3xima generaci\u00f3n que se est\u00e1 implementando en todas partes: desde <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> hasta <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 \/>\nBien, hoy es el d\u00eda m\u00e1s adecuado para conocer ZFS, lectores curiosos. Simplemente sepan que, seg\u00fan la modesta estimaci\u00f3n del desarrollador de OpenZFS, Matt Arens, \"realmente es complicado\".<\/p>\n<p>Pero antes de llegar a los n\u00fameros \u2014y los habr\u00e1, lo prometo\u2014 sobre todas las configuraciones de ocho discos de ZFS, es necesario hablar de c\u00f3mo <i>c\u00f3mo<\/i> ZFS almacena datos en el disco.<\/p>\n<h1>Zpool, vdev y device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Este diagrama de pool completo incluye tres vdevs auxiliares, uno de cada clase, y cuatro para RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Generalmente, no hay razones para crear un pool a partir de tipos y tama\u00f1os de vdev no coincidentes \u2014pero si lo desea, nada le impide hacerlo<\/i><\/p>\n<p>Para entender realmente el sistema de archivos ZFS, es necesario observar de cerca su estructura real. En primer lugar, ZFS combina los niveles tradicionales de gesti\u00f3n de vol\u00famenes y sistemas de archivos. En segundo lugar, utiliza un mecanismo transaccional de copia en escritura. Estas caracter\u00edsticas significan que la estructura del sistema es muy diferente de los sistemas de archivos y arrays RAID convencionales. El primer conjunto de bloques de construcci\u00f3n b\u00e1sicos para entender: es el pool de almacenamiento (zpool), el dispositivo virtual (vdev) y el dispositivo real (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nEl pool de almacenamiento zpool es la estructura m\u00e1s alta de ZFS. Cada pool contiene uno o m\u00e1s dispositivos virtuales. A su vez, cada uno de ellos contiene uno o m\u00e1s dispositivos reales (device). Los pools virtuales son bloques aut\u00f3nomos. Una computadora f\u00edsica puede contener dos o m\u00e1s pools separados, pero cada uno es completamente independiente de los dem\u00e1s. Los pools no pueden compartir dispositivos virtuales.<\/p>\n<p>La redundancia de ZFS est\u00e1 a nivel de dispositivos virtuales, no a nivel de pools. A nivel de pools no hay absolutamente ninguna redundancia \u2014si se pierde alg\u00fan almacenamiento vdev o un vdev dedicado, entonces se pierde todo el pool junto con \u00e9l.<\/p>\n<p>Los modernos grupos de almacenamiento pueden sobrevivir a la p\u00e9rdida de cach\u00e9 o de registro del dispositivo virtual; aunque pueden perder una peque\u00f1a cantidad de datos no escritos si pierden el registro del vdev durante un corte de energ\u00eda o una falla del sistema.<\/p>\n<p>Existe una creencia com\u00fan de que las 'bandas de datos' (stripes) de ZFS se escriben a trav\u00e9s de todo el grupo. Esto es incorrecto. Zpool no es simplemente un RAID0 divertido, es m\u00e1s bien algo m\u00e1s complejo. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> con un mecanismo complejo y variable de distribuci\u00f3n.<\/p>\n<p>En su mayor parte, las escrituras se distribuyen entre los dispositivos virtuales disponibles de acuerdo con el espacio libre disponible, por lo que te\u00f3ricamente todos se llenar\u00edan al mismo tiempo. En versiones m\u00e1s recientes de ZFS, se toma en cuenta el uso actual (utilizaci\u00f3n) del vdev; si un dispositivo virtual est\u00e1 significativamente m\u00e1s cargado que otro (por ejemplo, debido a una alta carga de lectura), se omitir\u00e1 temporalmente para la escritura, a pesar de tener el mayor coeficiente de espacio libre.<\/p>\n<p>El mecanismo de determinaci\u00f3n de utilizaci\u00f3n incorporado en los m\u00e9todos modernos de distribuci\u00f3n de escritura de ZFS puede reducir la latencia y aumentar el rendimiento durante per\u00edodos de carga inusualmente alta; pero esto no <i>da carta blanca<\/i> para la mezcla involuntaria de HDD lentos y SSD r\u00e1pidos en un mismo grupo. Un grupo desigualmente equilibrado seguir\u00e1 funcionando a la velocidad del dispositivo m\u00e1s lento, es decir, como si estuviera completamente compuesto de esos dispositivos.<\/p>\n<h3>vdev<\/h3>\n<p>\nCada grupo de almacenamiento consta de uno o varios dispositivos virtuales (virtual device, vdev). A su vez, cada vdev incluye uno o m\u00e1s dispositivos f\u00edsicos. La mayor\u00eda de los dispositivos virtuales se utilizan para almacenamiento simple de datos, pero existen varias clases auxiliares de vdev, incluyendo CACHE, LOG y SPECIAL. Cada uno de estos tipos de vdev puede tener una de cinco topolog\u00edas: dispositivo \u00fanico (single-device), RAIDz1, RAIDz2, RAIDz3 o espejo (mirror).<\/p>\n<p>RAIDz1, RAIDz2 y RAIDz3 son tipos especiales de lo que los viejos llamar\u00edan RAID de doble paridad (diagonal). 1, 2 y 3 se refieren a cu\u00e1ntos bloques de paridad se asignan a cada franja de datos. En lugar de discos separados para la paridad, los dispositivos virtuales RAIDz distribuyen esta paridad de manera semiuniforme entre los discos. Un arreglo RAIDz puede perder tantos discos como bloques de paridad tenga; si pierde uno m\u00e1s, fallar\u00e1 y llevar\u00e1 consigo el pool de almacenamiento.<\/p>\n<p>En los dispositivos virtuales espejo (mirror vdev), cada bloque se almacena en cada dispositivo en vdev. Aunque los espejos dobles (two-wide) son los m\u00e1s comunes, en un espejo puede haber cualquier cantidad arbitraria de dispositivos; en instalaciones grandes, para mejorar el rendimiento de lectura y la resiliencia, a menudo se utilizan espejos triples. Un espejo vdev puede sobrevivir a cualquier falla mientras al menos un dispositivo en vdev siga funcionando.<\/p>\n<p>Los vdev individuales son intr\u00ednsecamente peligrosos. Este tipo de dispositivo virtual no sobrevivir\u00e1 a ninguna falla, y si se utiliza como almacenamiento o vdev especial, su falla resultar\u00e1 en la destrucci\u00f3n de todo el pool. Aqu\u00ed se debe tener mucho, mucho cuidado.<\/p>\n<p>Los dispositivos virtuales CACHE, LOG y SPECIAL pueden ser creados en cualquiera de las topolog\u00edas mencionadas anteriormente, pero recuerde que la p\u00e9rdida de un dispositivo virtual SPECIAL significa la p\u00e9rdida del pool, por lo que se recomienda encarecidamente una topolog\u00eda redundante.<\/p>\n<h3>dispositivo<\/h3>\n<p>\nProbablemente este es el t\u00e9rmino m\u00e1s f\u00e1cil de entender en ZFS: se refiere literalmente a un dispositivo de bloques de acceso aleatorio. Recuerde que los dispositivos virtuales est\u00e1n compuestos de dispositivos individuales, y un pool est\u00e1 hecho de dispositivos virtuales.<\/p>\n<p>Los discos, ya sean magn\u00e9ticos o de estado s\u00f3lido, son los dispositivos de bloques m\u00e1s comunes utilizados como bloques de construcci\u00f3n de vdev. Sin embargo, cualquier dispositivo con un descriptor en \/dev funcionar\u00e1, por lo que se pueden usar arreglos RAID de hardware completos como dispositivos individuales.<\/p>\n<p>Un archivo raw simple es uno de los dispositivos de bloques alternativos m\u00e1s importantes de los que se puede construir un vdev. Los pools de prueba de <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">archivos delgados<\/a><\/noindex>\u00a0son una forma muy conveniente de probar los comandos del pool y ver cu\u00e1nto espacio est\u00e1 disponible en el pool o dispositivo virtual de esta topolog\u00eda.<\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Puedes crear un grupo de prueba a partir de archivos dispersos en solo unos segundos, pero no olvides eliminar todo el grupo y sus componentes despu\u00e9s.<\/i> <\/p>\n<p>Supongamos que deseas configurar un servidor con ocho discos y planeas usar discos de 10 TB (~9300 GiB), pero no est\u00e1s seguro de cu\u00e1l topolog\u00eda se adapta mejor a tus necesidades. En el ejemplo anterior, construimos un grupo de prueba a partir de archivos dispersos en segundos, y ahora sabemos que un RAIDz2 vdev compuesto por ocho discos de 10 TB proporciona 50 TiB de capacidad \u00fatil.<\/p>\n<p>Otra categor\u00eda especial de dispositivos son los SPARE (de reserva). A diferencia de los dispositivos convencionales, los dispositivos de reemplazo en caliente pertenecen a todo el grupo, no a un solo dispositivo virtual. Si alg\u00fan vdev en el grupo falla y un dispositivo de reserva est\u00e1 conectado y disponible, se unir\u00e1 autom\u00e1ticamente al vdev afectado.<\/p>\n<p>Una vez conectado al vdev afectado, el dispositivo de reserva comienza a recibir copias o reconstrucciones de los datos que deber\u00edan estar en el dispositivo faltante. En RAID tradicional, esto se llama recuperaci\u00f3n (rebuilding), y en ZFS se conoce como \"recuperaci\u00f3n de redundancia\" (resilvering).<\/p>\n<p>Es importante destacar que los dispositivos de reserva no sustituyen permanentemente a los dispositivos fallidos. Son solo un reemplazo temporal para reducir el tiempo durante el cual se observa la degradaci\u00f3n del vdev. Despu\u00e9s de que el administrador reemplace el dispositivo fallido del vdev, se lleva a cabo la recuperaci\u00f3n de redundancia en el nuevo dispositivo permanente, y el SPARE se desconecta del vdev y regresa a su funci\u00f3n de reserva para todo el grupo.<\/p>\n<h1>Conjuntos de datos, bloques y sectores<\/h1>\n<p>\nEl siguiente conjunto de bloques de construcci\u00f3n que debemos entender en nuestro viaje por ZFS se relaciona menos con el hardware y m\u00e1s con c\u00f3mo est\u00e1n organizados y almacenados los propios datos. Aqu\u00ed omitimos algunos niveles, como el metaslab, para no sobrecargar de detalles, manteniendo as\u00ed una comprensi\u00f3n de la estructura general.<\/p>\n<h3>Conjunto de datos (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Cuando creamos un conjunto de datos por primera vez, muestra todo el espacio disponible del grupo. Luego, establecemos una cuota y cambiamos el punto de montaje. \u00a1Magia!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol es en su mayor\u00eda solo un conjunto de datos sin su capa de sistema de archivos, que aqu\u00ed reemplazamos por un sistema de archivos ext4 completamente normal.<\/i> <\/p>\n<p>El conjunto de datos ZFS es aproximadamente comparable a un sistema de archivos montado est\u00e1ndar. Al igual que un sistema de archivos com\u00fan, a primera vista parece \"simplemente otra carpeta m\u00e1s\". Pero, al igual que los sistemas de archivos montables, cada conjunto de datos ZFS tiene su propio conjunto de propiedades b\u00e1sicas.<\/p>\n<p>En primer lugar, a un conjunto de datos se le puede asignar una cuota. Si estableces <code>zfs set quota=100G poolname\/datasetname<\/code>, no podr\u00e1s escribir en la carpeta montada <code>\/poolname\/datasetname<\/code> m\u00e1s de 100 GiB.<\/p>\n<p>\u00bfNotaste la presencia y ausencia de la barra diagonal al comienzo de cada l\u00ednea? Cada conjunto de datos tiene su propio lugar tanto en la jerarqu\u00eda de ZFS como en la jerarqu\u00eda de montaje del sistema. En la jerarqu\u00eda de ZFS no hay barra inicial: comienzas con el nombre del pool y luego sigues el camino de un conjunto de datos al siguiente. Por ejemplo, <code>pool\/parent\/child<\/code> para un conjunto de datos llamado <code>child<\/code> debajo del conjunto de datos padre <code>parent<\/code> en un pool con un nombre creativo <code>pool<\/code>.<\/p>\n<p>Por defecto, el punto de montaje del conjunto de datos ser\u00e1 equivalente a su nombre en la jerarqu\u00eda de ZFS, con una barra al principio: el pool llamado <code>pool<\/code> se montar\u00e1 como <code>\/pool<\/code>, el conjunto de datos <code>parent<\/code> se montar\u00e1 en <code>\/pool\/parent<\/code>, y el conjunto de datos hijo <code>child<\/code> se montar\u00e1 en <code>\/pool\/parent\/child<\/code>. Sin embargo, el punto de montaje del conjunto de datos puede ser cambiado.<\/p>\n<p>Si especificamos <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, el conjunto de datos <code>pool\/parent\/child<\/code> se montar\u00e1 en el sistema como <code>\/lol<\/code>.<\/p>\n<p>Adem\u00e1s de los conjuntos de datos, debemos mencionar los vol\u00famenes (zvols). Un volumen es aproximadamente comparable a un conjunto de datos, excepto que en \u00e9l realmente no hay un sistema de archivos: es solo un dispositivo de bloque. Puedes, por ejemplo, crear <code>zvol<\/code> llamado <code>mypool\/myzvol<\/code>, luego formatearlo con un sistema de archivos ext4, y luego montar este sistema de archivos: \u00a1ahora tienes un sistema de archivos ext4, pero con soporte para todas las funciones de seguridad de ZFS! Puede parecer tonto en una computadora, pero tiene mucho m\u00e1s sentido como backend al exportar un dispositivo iSCSI.<\/p>\n<h3>Bloques<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un archivo se presenta como uno o varios bloques. Cada bloque se almacena en un dispositivo virtual. El tama\u00f1o del bloque generalmente es igual al par\u00e1metro <b>recordsize<\/b>, pero puede ser reducido a <b>2^ashift<\/b>, si contiene metadatos o un archivo peque\u00f1o.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Realmente, <b>realmente<\/b> no estamos bromeando sobre el enorme da\u00f1o al rendimiento si se establece un ashift demasiado peque\u00f1o.<\/i><\/p>\n<p>En el grupo ZFS, todos los datos, incluidos los metadatos, se almacenan en bloques. El tama\u00f1o m\u00e1ximo del bloque para cada conjunto de datos se define en la propiedad <code>recordsize<\/code> (tama\u00f1o del registro). El tama\u00f1o del registro puede cambiar, pero esto no alterar\u00e1 el tama\u00f1o o la ubicaci\u00f3n de cualquier bloque que ya haya sido escrito en el conjunto de datos; solo se aplica a nuevos bloques a medida que se escriben.<\/p>\n<p>A menos que se indique lo contrario, el tama\u00f1o de registro actual por defecto es de 128 KiB. Es una especie de compromiso complicado, en el que el rendimiento no ser\u00e1 ideal, pero tampoco ser\u00e1 terrible en la mayor\u00eda de los casos. <code>Tama\u00f1o del registro<\/code> puede establecerse en cualquier valor de 4K a 1M (con configuraciones adicionales <code>recordsize<\/code> puede establecerse a\u00fan m\u00e1s grande, pero rara vez es una buena idea).<\/p>\n<p>Cualquier bloque hace referencia solo a los datos de un \u00fanico archivo; no puedes encajar dos archivos diferentes en un solo bloque. Cada archivo consiste en uno o varios bloques, dependiendo de su tama\u00f1o. Si el tama\u00f1o del archivo es menor que el tama\u00f1o del registro, se almacenar\u00e1 en un bloque de menor tama\u00f1o; por ejemplo, un bloque con un archivo de 2 KiB ocupar\u00e1 solo un sector de 4 KiB en el disco.<\/p>\n<p>Si el archivo es lo suficientemente grande y requiere varios bloques, entonces todos los registros de ese archivo tendr\u00e1n un tama\u00f1o <code>recordsize<\/code>\u00a0\u2014 incluyendo el \u00faltimo registro, cuya mayor parte puede resultar ser <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">espacio no utilizado.<\/a><\/noindex>.<\/p>\n<p>Los vol\u00famenes zvol no tienen la propiedad <code>recordsize<\/code>\u00a0\u2014 en su lugar tienen una propiedad equivalente <code>volblocksize.<\/code>.<\/p>\n<h3>Sectores<\/h3>\n<p>\nEl \u00faltimo y m\u00e1s b\u00e1sico bloque de construcci\u00f3n es el sector. Esta es la unidad f\u00edsica m\u00e1s peque\u00f1a que se puede escribir o leer desde un dispositivo base. Durante varias d\u00e9cadas, la mayor\u00eda de los discos han utilizado sectores de 512 bytes. Recientemente, la mayor\u00eda de los discos est\u00e1n configurados para sectores de 4 KiB, y algunos, especialmente SSD, tienen sectores de 8 KiB o incluso m\u00e1s.<\/p>\n<p>En el sistema ZFS, hay una propiedad que permite establecer manualmente el tama\u00f1o del sector. Esta propiedad <code>ashift<\/code>. Es algo confuso que ashift sea una potencia de dos. Por ejemplo, <code>ashift=9<\/code> significa un tama\u00f1o de sector de 2^9, o 512 bytes.<\/p>\n<p>ZFS solicita al sistema operativo informaci\u00f3n detallada sobre cada dispositivo de bloque cuando se a\u00f1ade a un nuevo vdev, y te\u00f3ricamente establece ashift autom\u00e1ticamente seg\u00fan esta informaci\u00f3n. Desafortunadamente, muchos discos proporcionan informaci\u00f3n incorrecta sobre su tama\u00f1o de sector para mantener la compatibilidad con Windows XP (que no pod\u00eda entender discos con otros tama\u00f1os de sectores).<\/p>\n<p>Esto significa que se recomienda encarecidamente al administrador de ZFS conocer el tama\u00f1o real de sector de sus dispositivos y establecerlo manualmente. <code>ashift<\/code>. Si ashift se establece demasiado bajo, se incrementa de forma astron\u00f3mica la cantidad de operaciones de lectura\/escritura. As\u00ed, escribir \"sectores\" de 512 bytes en un sector real de 4 KiB implica primero escribir el primer \"sector\", luego leer el sector de 4 KiB, modificarlo con el segundo \"sector\" de 512 bytes, volver a escribirlo en el nuevo sector de 4 KiB y as\u00ed sucesivamente para cada escritura.<\/p>\n<p>En el mundo real, esta penalizaci\u00f3n afecta a los SSD Samsung EVO, para los cuales deber\u00eda aplicarse <code>ashift=13<\/code>, pero estos SSD informan incorrectamente sobre su tama\u00f1o de sector, y por lo tanto se establece por defecto <code>ashift=9<\/code>. Si un administrador del sistema experimentado no cambia esta configuraci\u00f3n, este SSD funcionar\u00e1 <i>m\u00e1s lentamente<\/i> que un HDD magn\u00e9tico normal.<\/p>\n<p>En comparaci\u00f3n, un tama\u00f1o demasiado grande <code>ashift<\/code> pr\u00e1cticamente no tiene ninguna penalizaci\u00f3n. No hay una disminuci\u00f3n real en el rendimiento, y el aumento del espacio no utilizado es infinitesimal (o nulo cuando la compresi\u00f3n est\u00e1 habilitada). Por ello, recomendamos encarecidamente que incluso aquellos discos que realmente usan sectores de 512 bytes, configuren <code>ashift=12<\/code> o incluso <code>ashift=13<\/code>, para mirar con confianza hacia el futuro.<\/p>\n<p>Propiedad <code>ashift<\/code> se establece para cada dispositivo virtual vdev, y <i>no para el pool<\/i>, como muchos piensan err\u00f3neamente, y no se cambia despu\u00e9s de la configuraci\u00f3n. Si accidentalmente lo alteras <code>ashift<\/code> al agregar un nuevo vdev al pool, habr\u00e1s contaminado irremediablemente este pool con un dispositivo de bajo rendimiento y, por lo general, no hay otra opci\u00f3n que destruir el pool y comenzar desde cero. Incluso eliminar el vdev no salvar\u00e1 de la configuraci\u00f3n incorrecta. <code>ashift<\/code>!<\/p>\n<h3>El mecanismo de copia al escribir<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Si a un sistema de archivos normal necesita reescribir datos, modifica cada bloque donde se encuentra.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>El sistema de archivos con copia al escribir guarda una nueva versi\u00f3n del bloque y luego desbloquea la versi\u00f3n antigua.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>En t\u00e9rminos abstractos, si ignoramos la ubicaci\u00f3n f\u00edsica real de los bloques, nuestra 'cometa de datos' se simplifica a un 'gusano de datos' que se mueve de izquierda a derecha por el mapa del espacio disponible.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ahora podemos tener una buena idea de c\u00f3mo funcionan los snapshots de copia al escribir: cada bloque puede pertenecer a varios snapshots y se conservar\u00e1 hasta que se destruyan todos los snapshots asociados.<\/i><\/p>\n<p>El mecanismo de copia al escribir (Copy on Write, CoW) es la base fundamental de lo que hace que ZFS sea un sistema tan impresionante. El concepto b\u00e1sico es simple: si le pides a un sistema de archivos tradicional que cambie un archivo, har\u00e1 exactamente lo que pediste. Si le pides a un sistema de archivos con copia al escribir que haga lo mismo, dir\u00e1 'est\u00e1 bien' pero te mentir\u00e1.<\/p>\n<p>En lugar de eso, el sistema de archivos con copia al escribir guarda una nueva versi\u00f3n del bloque modificado y luego actualiza los metadatos del archivo para romper la conexi\u00f3n con el bloque antiguo y asociar el nuevo bloque que acabas de guardar.<\/p>\n<p>La desconexi\u00f3n del bloque antiguo y la asociaci\u00f3n del nuevo se realiza en una sola operaci\u00f3n, por lo que no se puede interrumpir: si apagas la alimentaci\u00f3n despu\u00e9s de que ocurra, tienes una nueva versi\u00f3n del archivo, y si apagas la alimentaci\u00f3n antes, tienes la versi\u00f3n antigua. En cualquier caso, no habr\u00e1 conflictos en el sistema de archivos.<\/p>\n<p>La copia al escribir en ZFS ocurre no solo a nivel de sistema de archivos, sino tambi\u00e9n a nivel de gesti\u00f3n de discos. Esto significa que ZFS no es susceptible a los huecos de escritura (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">hoyo en RAID<\/a><\/noindex>) \u2014 un fen\u00f3meno en el que la franja solo se escribi\u00f3 parcialmente antes de un fallo del sistema, da\u00f1ando el arreglo despu\u00e9s del reinicio. Aqu\u00ed, la franja se escribe de manera at\u00f3mica, el vdev siempre es coherente, y <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob es tu t\u00edo<\/a><\/noindex>.<\/p>\n<h3>ZIL: el diario de intenciones de ZFS<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>El sistema ZFS maneja las escrituras s\u00edncronas de una manera especial: las guarda temporalmente, pero inmediatamente en el ZIL, antes de escribirlas permanentemente junto con las escrituras as\u00edncronas.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Normalmente, los datos escritos en el ZIL nunca se vuelven a leer. Pero esto es posible despu\u00e9s de un fallo del sistema.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, o dispositivo LOG secundario, es simplemente un vdev especial \u2014 y, preferiblemente, muy r\u00e1pido \u2014 donde ZIL puede almacenarse por separado del almacenamiento principal.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Despu\u00e9s de un fallo, todos los datos sucios en ZIL se reproducen \u2014 en este caso, ZIL se encuentra en SLOG, as\u00ed que se reproducen desde all\u00ed.<\/i><\/p>\n<p>Existen dos categor\u00edas principales de operaciones de escritura: sincr\u00f3nicas (sync) y asincr\u00f3nicas (async). Para la mayor\u00eda de las cargas de trabajo, la gran mayor\u00eda de las operaciones de escritura son asincr\u00f3nicas \u2014 el sistema de archivos permite agregarlas y emitirlas en paquetes, reduciendo la fragmentaci\u00f3n y aumentando significativamente el ancho de banda.<\/p>\n<p>Las escrituras sincr\u00f3nicas son algo completamente diferente. Cuando una aplicaci\u00f3n solicita una escritura sincr\u00f3nica, le dice al sistema de archivos: \u00abNecesitas registrar esto en la memoria no vol\u00e1til, <i>este mismo momento<\/i>, y hasta entonces no puedo hacer nada m\u00e1s\u00bb. Por lo tanto, las escrituras sincr\u00f3nicas deben registrarse inmediatamente en el disco \u2014 y si esto aumenta la fragmentaci\u00f3n o reduce el ancho de banda, as\u00ed sea.<\/p>\n<p>ZFS maneja las escrituras sincr\u00f3nicas de manera diferente a los sistemas de archivos convencionales \u2014 en lugar de verterlas inmediatamente en el almacenamiento normal, ZFS las registra en un \u00e1rea de almacenamiento especial llamada ZFS Intent Log, o ZIL. La clave es que estas escrituras <i>tambi\u00e9n<\/i> permanecen en memoria, siendo agregadas junto con las solicitudes de escritura asincr\u00f3nicas normales, para ser luego volcadas en el almacenamiento como grupos de transacciones (TXG, Transaction Groups) completamente normales.<\/p>\n<p>En condiciones normales de operaci\u00f3n, ZIL se escribe y nunca se lee nuevamente. Cuando despu\u00e9s de unos momentos las escrituras de ZIL se registran en el almacenamiento principal dentro de los TXG normales desde la memoria, se desconectan de ZIL. La \u00fanica vez que algo se lee de ZIL es durante la importaci\u00f3n de un pool.<\/p>\n<p>Si ocurre un fallo en ZFS \u2014 fallo del sistema operativo o corte de energ\u00eda \u2014 cuando hay datos en ZIL, estos datos se leer\u00e1n durante la pr\u00f3xima importaci\u00f3n del pool (por ejemplo, al reiniciar un sistema de recuperaci\u00f3n). Todo lo que est\u00e1 en ZIL se leer\u00e1, se combinar\u00e1 en grupos TXG, se registrar\u00e1 en el almacenamiento principal y luego se desconectar\u00e1 de ZIL durante el proceso de importaci\u00f3n.<\/p>\n<p>Una de las clases auxiliares de vdev se llama LOG o SLOG, que es un dispositivo secundario LOG. Su tarea es proporcionar al pool un dispositivo vdev separado y, preferiblemente, mucho m\u00e1s r\u00e1pido, con una alta resistencia a la escritura, para almacenar ZIL, en lugar de almacenar ZIL en el almacenamiento principal del vdev. El propio ZIL se comporta de la misma manera independientemente de d\u00f3nde se almacena, pero si el vdev con LOG tiene un rendimiento de escritura muy alto, las escrituras sincr\u00f3nicas suceder\u00e1n m\u00e1s r\u00e1pido.<\/p>\n<p>Agregar un vdev con LOG al pool no puede <b>mejorar<\/b> el rendimiento de la escritura asincr\u00f3nica, incluso si obligas a todas las escrituras en ZIL usando <code>zfs set sync=always<\/code>, seguir\u00e1n atadas al almacenamiento principal en TXG de la misma forma y al mismo ritmo que sin el registro. La \u00fanica mejora directa en el rendimiento es la latencia de la escritura sincr\u00f3nica (ya que una velocidad de registro mayor acelera la ejecuci\u00f3n de las operaciones <code>sync<\/code>).<\/p>\n<p>Sin embargo, en un entorno que ya requiere una gran cantidad de escrituras sincr\u00f3nicas, el vdev LOG puede acelerar indirectamente la escritura asincr\u00f3nica y la lectura no en cach\u00e9. Descargar las escrituras ZIL en un vdev LOG separado significa menos competencia por IOPS en el almacenamiento primario, lo que en cierta medida mejora el rendimiento de todas las operaciones de lectura y escritura.<\/p>\n<h3>Instant\u00e1neas<\/h3>\n<p>\nEl mecanismo de copia en escritura tambi\u00e9n es una base necesaria para las instant\u00e1neas at\u00f3micas de ZFS y la replicaci\u00f3n asincr\u00f3nica incremental. En un sistema de archivos activo, hay un \u00e1rbol de punteros que marca todas las escrituras con los datos actuales; cuando haces una instant\u00e1nea, simplemente haces una copia de este \u00e1rbol de punteros.<\/p>\n<p>Cuando se sobrescribe una escritura en un sistema de archivos activo, ZFS primero escribe la nueva versi\u00f3n del bloque en el espacio no utilizado. Luego desvincula la antigua versi\u00f3n del bloque del sistema de archivos actual. Pero si alguna instant\u00e1nea hace referencia al antiguo bloque, este sigue siendo inalterado. \u00a1El bloque antiguo no se recuperar\u00e1 realmente como espacio libre hasta que se destruyan todas las instant\u00e1neas que referencian ese bloque!<\/p>\n<h3>Replicaci\u00f3n<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Mi biblioteca de Steam en 2015 ocupaba 158 GiB y conten\u00eda 126,927 archivos. Esto est\u00e1 bastante cerca de la situaci\u00f3n \u00f3ptima para rsync; la replicaci\u00f3n ZFS a trav\u00e9s de la red fue \u00absolo\u00bb un 750% m\u00e1s r\u00e1pida.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>En la misma red, la replicaci\u00f3n de un archivo de imagen de m\u00e1quina virtual de 40 gigabyte de Windows 7 es una historia completamente diferente. La replicaci\u00f3n ZFS ocurre 289 veces m\u00e1s r\u00e1pido que rsync, o 'solo' 161 veces m\u00e1s r\u00e1pido si tienes suficientes conocimientos para invocar rsync con la opci\u00f3n \u2014inplace.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Fundamentos de ZFS: sistema de almacenamiento y rendimiento\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Cuando se escala una imagen de m\u00e1quina virtual, los problemas de rsync tambi\u00e9n escalan con ella. Un tama\u00f1o de 1,9 TiB no es tan grande para una imagen de m\u00e1quina virtual moderna, pero es lo suficientemente grande como para que la replicaci\u00f3n ZFS resulte 1148 veces m\u00e1s r\u00e1pida que rsync, incluso con el argumento de rsync \u2014inplace.<\/i><\/p>\n<p>Una vez que comprenda c\u00f3mo funcionan las instant\u00e1neas, no ser\u00e1 dif\u00edcil captar la esencia de la replicaci\u00f3n. Dado que una instant\u00e1nea es simplemente un \u00e1rbol de punteros a registros, se deduce que si hacemos <code>zfs send<\/code> de la instant\u00e1nea, estamos enviando tanto este \u00e1rbol como todos los registros asociados. Cuando transmitimos esto a <code>zfs send<\/code> en <code>zfs receive<\/code> en el objeto de destino, escribe tanto el contenido real del bloque como el \u00e1rbol de punteros que referencia los bloques en el conjunto de datos de destino.<\/p>\n<p>Las cosas se vuelven a\u00fan m\u00e1s interesantes en el segundo <code>zfs send<\/code>. Ahora tenemos dos sistemas, cada uno conteniendo <code>poolname\/datasetname@1<\/code>, mientras toma una nueva instant\u00e1nea <code>poolname\/datasetname@2<\/code>. Por lo tanto, en el pool original tiene <code>datasetname@1<\/code> y <code>datasetname@2<\/code>, mientras que en el pool de destino solo hay la primera instant\u00e1nea por el momento. <code>datasetname@1<\/code>.<\/p>\n<p>Dado que entre la fuente y el destino tenemos una instant\u00e1nea compartida <code>datasetname@1<\/code>, podemos hacer un <i>incremental<\/i> <code>zfs send<\/code> sobre ella. Cuando le decimos al sistema <code>zfs send -i poolname\/datasetname@1 poolname\/datasetname@2<\/code>, compara los dos \u00e1rboles de punteros. Cualquier puntero que exista solo en <code>@2<\/code>, evidentemente, apunta a nuevos bloques, por lo que necesitaremos el contenido de esos bloques.<\/p>\n<p>En el sistema remoto, el proceso incremental <code>send<\/code> es igual de sencillo. Primero, escribimos todos los nuevos registros incluidos en el flujo <code>send<\/code>, y luego a\u00f1adimos punteros a esos bloques. Voil\u00e0, tenemos <code>@2<\/code> en el nuevo sistema!<\/p>\n<p>La replicaci\u00f3n incremental as\u00edncrona de ZFS es una gran mejora respecto a los m\u00e9todos anteriores que no se basaban en instant\u00e1neas, como rsync. En ambos casos, se transfieren solo los datos modificados, pero rsync debe primero <i>leer<\/i> desde el disco todos los datos desde ambos lados, para verificar el checksum y compararlo. A diferencia de esto, la replicaci\u00f3n ZFS no lee nada excepto los \u00e1rboles de punteros y cualquier bloque que no est\u00e9 presente en el snapshot compartido.<\/p>\n<h3>Compresi\u00f3n integrada<\/h3>\n<p>\nEl mecanismo de escritura tambi\u00e9n simplifica el sistema de compresi\u00f3n integrada. En un sistema de archivos tradicional, la compresi\u00f3n es problem\u00e1tica: tanto la versi\u00f3n antigua como la nueva de los datos modificados residen en el mismo espacio.<\/p>\n<p>Si consideramos un fragmento de datos en medio del archivo, que comienza su vida como un megabyte de ceros desde 0x00000000 y as\u00ed sucesivamente, se puede comprimir f\u00e1cilmente a un solo sector en el disco. Pero \u00bfqu\u00e9 pasar\u00e1 si reemplazamos este megabyte de ceros por un megabyte de datos no comprimibles, como JPEG o ruido pseudoaleatorio? Sorprendentemente, este megabyte de datos requerir\u00e1 no uno, sino 256 sectores de 4 KiB, mientras que en este lugar del disco solo se ha reservado un sector.<\/p>\n<p>ZFS no tiene tal problema, ya que las escrituras modificadas siempre se registran en el espacio no utilizado: el bloque original ocupa solo un sector de 4 KiB, y la nueva escritura ocupar\u00e1 256, pero esto no es un problema, ya que el fragmento \"medio\" del archivo recientemente modificado se habr\u00eda registrado en el espacio no utilizado independientemente de si su tama\u00f1o ha cambiado o no, por lo que para ZFS esto es una situaci\u00f3n bastante normal.<\/p>\n<p>La compresi\u00f3n integrada de ZFS est\u00e1 desactivada por defecto, y el sistema ofrece algoritmos conectables: actualmente entre ellos est\u00e1n LZ4, gzip (1-9), LZJB y ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> es un algoritmo de flujo que ofrece una compresi\u00f3n y descompresi\u00f3n extremadamente r\u00e1pidas y una mejora en el rendimiento para la mayor\u00eda de los casos de uso, incluso en CPUs bastante lentos.\n<\/li>\n<li><b>GZIP<\/b> es un algoritmo venerable que todos los usuarios de sistemas Unix conocen y aman. Se puede implementar con niveles de compresi\u00f3n de 1 a 9, con un aumento en el grado de compresi\u00f3n y uso de CPU a medida que se acerca al nivel 9. El algoritmo es adecuado para todas las variantes de uso de texto (u otros tipos de datos extremadamente comprimibles), pero de lo contrario a menudo presenta problemas con la CPU; \u00fasalo con precauci\u00f3n, especialmente en niveles m\u00e1s altos.\n<\/li>\n<li><b>LZJB<\/b> es el algoritmo original en ZFS. Est\u00e1 obsoleto y ya no deber\u00eda usarse, LZ4 lo supera en todos los aspectos.\n<\/li>\n<li><b>ZLE<\/b> \u2014 codificaci\u00f3n de nivel cero, Zero Level Encoding. En general, no afecta a los datos normales, pero comprime grandes secuencias de ceros. Es \u00fatil para conjuntos de datos completamente no comprimibles (como JPEG, MP4 u otros formatos ya comprimidos), ya que ignora los datos no comprimibles, pero comprime el espacio no utilizado en los registros finales.<\/li>\n<\/ul>\n<p>\nRecomendamos la compresi\u00f3n LZ4 para pr\u00e1cticamente todos los casos de uso; la penalizaci\u00f3n por rendimiento al encontrarse con datos no comprimibles es muy baja, y <i>aumento<\/i> de rendimiento para datos t\u00edpicos es considerable. La copia de una imagen de m\u00e1quina virtual para una nueva instalaci\u00f3n del sistema operativo Windows (sistema operativo reci\u00e9n instalado, sin datos dentro a\u00fan) con <code>compression=lz4<\/code> se realiz\u00f3 un 27% m\u00e1s r\u00e1pido que con <code>compression=none<\/code>, en <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">en esta prueba de 2015<\/a><\/noindex>.<\/p>\n<h1>ARC \u2014 cach\u00e9 de reemplazo adaptativo<\/h1>\n<p>\nZFS es el \u00fanico sistema de archivos moderno que conocemos que utiliza su propio mecanismo de cach\u00e9 de lectura, en lugar de depender de la cach\u00e9 de p\u00e1ginas del sistema operativo para almacenar copias de bloques recientemente le\u00eddos en la memoria RAM.<\/p>\n<p>Aunque la cach\u00e9 propia no est\u00e1 exenta de problemas: ZFS no puede responder a nuevas solicitudes de asignaci\u00f3n de memoria tan r\u00e1pido como el n\u00facleo, por lo que una nueva solicitud <code>malloc()<\/code> de asignaci\u00f3n de memoria puede fallar si necesita la memoria RAM actualmente ocupada en ARC. Pero hay razones de peso para usar una cach\u00e9 propia, al menos por ahora.<\/p>\n<p>Todos los sistemas operativos modernos conocidos, incluyendo MacOS, Windows, Linux y BSD, utilizan el algoritmo LRU (Least Recently Used) para implementar la cach\u00e9 de p\u00e1ginas. Este es un algoritmo primitivo que eleva el bloque en cach\u00e9 \"hacia arriba en la cola\" despu\u00e9s de cada lectura y desalojar bloques \"hacia abajo en la cola\" seg\u00fan sea necesario para agregar nuevos fallos de cach\u00e9 (bloques que deb\u00edan ser le\u00eddos desde el disco, no desde la cach\u00e9) hacia arriba.<\/p>\n<p>Por lo general, el algoritmo funciona bien, pero en sistemas con grandes conjuntos de datos de trabajo, LRU puede f\u00e1cilmente llevar a thrashing: desalojar bloques que se necesitan con frecuencia para liberar espacio para bloques que nunca se volver\u00e1n a leer desde la cach\u00e9.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0\u2014 un algoritmo mucho menos ingenuo que puede considerarse como un cach\u00e9 \"ponderado\". Despu\u00e9s de cada lectura de un bloque en cach\u00e9, se vuelve un poco m\u00e1s \"pesado\" y es m\u00e1s dif\u00edcil de desalojar; incluso despu\u00e9s de ser despejado, el bloque <i>es rastreado<\/i> durante un per\u00edodo de tiempo determinado. Un bloque que ha sido desalojado, pero que luego debe ser le\u00eddo de nuevo en la cach\u00e9, tambi\u00e9n se volver\u00e1 \"m\u00e1s pesado\".<\/p>\n<p>El resultado final de todo esto es una cach\u00e9 con una tasa de aciertos (hit ratio) mucho mayor, que es la relaci\u00f3n entre aciertos en cach\u00e9 (lecturas realizadas desde la cach\u00e9) y fallos (lecturas desde el disco). Esta es una estad\u00edstica extremadamente importante; no solo los hits en la cach\u00e9 se manejan \u00f3rdenes de magnitud m\u00e1s r\u00e1pido, sino que los fallos en la cach\u00e9 tambi\u00e9n pueden ser atendidos m\u00e1s r\u00e1pido, ya que cu\u00e1ntos m\u00e1s hits hay en la cach\u00e9, menos solicitudes paralelas hay al disco y menor es la latencia para aquellos fallos restantes que deben ser atendidos desde el disco.<\/p>\n<h1>Conclusi\u00f3n<\/h1>\n<p>\nDespu\u00e9s de estudiar la sem\u00e1ntica b\u00e1sica de ZFS \u2014 c\u00f3mo funciona la copia al escribir, as\u00ed como las relaciones entre pools de almacenamiento, dispositivos virtuales, bloques, sectores y archivos \u2014 estamos listos para discutir el rendimiento real con n\u00fameros reales.<\/p>\n<p>En la siguiente parte, examinaremos el rendimiento real de los pools con vdev en espejo y RAIDz, unos en comparaci\u00f3n con otros, as\u00ed como en comparaci\u00f3n con las topolog\u00edas RAID tradicionales del n\u00facleo de Linux que hemos explorado. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">anteriormente<\/a><\/noindex>.<\/p>\n<p>Al principio, solo quer\u00edamos considerar lo b\u00e1sico: las propias topolog\u00edas de ZFS; pero despu\u00e9s <i>de eso<\/i> estaremos listos para hablar sobre configuraci\u00f3n avanzada y ajuste de ZFS, incluyendo el uso de tipos auxiliares de vdev, como L2ARC, SLOG y Special Allocation.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Fundamentos de ZFS: almacenamiento y rendimiento | ProHoster","description":"Esta primavera ya hemos discutido algunos.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}