A medida que todos ingresamos al tercer mes de la pandemia de COVID-19 y buscamos nuevos proyectos para mantenernos comprometidos (leer: sane), ¿podemos interesarte en aprender los fundamentos del almacenamiento informático? En silencio esta primavera, ya hemos repasado algunos conceptos básicos necesarios, como cómo probar la velocidad de sus discos y qué diablos es RAID. En la segunda de esas historias, incluso prometimos un seguimiento que explora el rendimiento de varias topologías de discos múltiples en ZFS, el sistema de archivos de próxima generación del que ha oído hablar debido a sus apariciones en todas partes, desde Apple hasta Ubuntu.
Bueno, hoy es el día para explorar, lectores curiosos de ZFS. Solo sepa de antemano que, en palabras discretas del desarrollador de OpenZFS, Matt Ahrens, «es realmente complicado».
Pero antes de que lleguemos a los números (¡y están llegando, lo prometo!) de todas las formas en que puede dar forma a ocho discos de ZFS, debemos hablar sobre cómo ZFS almacena sus datos en disco en primer lugar.
Zpools, vdevs y dispositivos
Para comprender realmente ZFS, debe prestar mucha atención a su estructura real. ZFS fusiona las capas tradicionales de administración de volúmenes y sistema de archivos, y utiliza un mecanismo transaccional de copia en escritura; ambos significan que el sistema es estructuralmente muy diferente a los sistemas de archivos convencionales y las matrices RAID. El primer conjunto de bloques de construcción principales para comprender son zpools
, vdevs
y devices
.
zpool
los zpool
es la estructura ZFS superior. Un zpool contiene uno o más vdevs
cada uno de los cuales contiene a su vez uno o más devices
. Los Zpools son unidades autónomas: una computadora física puede tener dos o más zpools separados, pero cada uno es completamente independiente de los demás. Los zpools no pueden compartir vdevs
uno con el otro.
La redundancia de ZFS está en el vdev
nivel, no el zpool
nivel. hay absolutamente no redundancia en el nivel de zpool, si hay almacenamiento vdev
o SPECIAL
vdev se pierde, todo zpool
se pierde con ella.
Los zpools modernos pueden sobrevivir a la pérdida de un CACHE
o LOG
vdev, aunque pueden perder una pequeña cantidad de datos sucios, si pierden un LOG
vdev durante un corte de energía o un bloqueo del sistema.
Es un error común pensar que las «franjas» de ZFS escriben en el grupo, pero esto no es correcto. Un zpool no es un RAID0 de aspecto extraño, es un JBOD de aspecto extraño, con un mecanismo de distribución complejo sujeto a cambios.
En su mayor parte, las escrituras se distribuyen entre los vdev disponibles de acuerdo con su espacio libre disponible, por lo que teóricamente todos los vdev se llenarán al mismo tiempo. En versiones más recientes de ZFS, la utilización de vdev también se puede tener en cuenta: si un vdev está significativamente más ocupado que otro (por ejemplo, debido a la carga de lectura), se puede omitir temporalmente para escritura a pesar de tener la proporción más alta de espacio libre disponible.
El mecanismo de reconocimiento de uso integrado en los métodos modernos de distribución de escritura de ZFS puede reducir la latencia y aumentar el rendimiento durante períodos de carga inusualmente alta, pero no debe confundirse con carta blanca para mezclar discos oxidados lentos y SSD rápidos de cualquier manera en el mismo grupo. Tal grupo no coincidente seguirá funcionando generalmente como si estuviera completamente compuesto por el dispositivo más lento presente.
vdev
Cada zpool
consta de uno o más vdevs
(abreviatura de dispositivo virtual). Cada vdev, a su vez, consta de uno o más devices
. La mayoría de los vdev se utilizan para el almacenamiento simple, pero también existen varias clases de soporte especial de vdev, que incluyen CACHE
, LOG
y SPECIAL.
Cada uno de estos tipos de vdev puede ofrecer una de cinco topologías: dispositivo único, RAIDz1, RAIDz2, RAIDz3 o espejo.
RAIDz1, RAIDz2 y RAIDz3 son variedades especiales de lo que los expertos en almacenamiento llaman «RAID de paridad diagonal». El 1, 2 y 3 se refieren a cuántos bloques de paridad se asignan a cada banda de datos. En lugar de tener discos completos dedicados a la paridad, RAIDz vdevs distribuye esa paridad de manera semi uniforme en los discos. Una matriz RAIDz puede perder tantos discos como bloques de paridad tenga; si pierde a otro, fracasa y toma el zpool
abajo con eso
Los vdev espejo son precisamente lo que parecen: en un vdev espejo, cada bloque se almacena en todos los dispositivos del vdev. Aunque los espejos de dos anchos son los más comunes, un vdev espejo puede contener cualquier cantidad arbitraria de dispositivos; los tres vías son comunes en configuraciones más grandes para un mayor rendimiento de lectura y resistencia a fallas. Un vdev reflejado puede sobrevivir a cualquier falla, siempre que al menos un dispositivo en el vdev permanezca en buen estado.
Los vdevs de un solo dispositivo también son exactamente lo que parecen, y son intrínsecamente peligrosos. Un vdev de un solo dispositivo no puede sobrevivir a una falla, y si se usa como almacenamiento o SPECIAL
vdev, su falla tomará todo el zpool
abajo con eso Ten mucho, mucho cuidado aquí.
CACHE
, LOG
y SPECIAL
vdevs se pueden crear utilizando cualquiera de las topologías anteriores, pero recuerde, la pérdida de un SPECIAL
vdev significa pérdida del grupo, por lo que se recomienda encarecidamente la topología redundante.