martes, 30 de marzo de 2010

ZFS

ZFS es un sistema de ficheros desarrollado por Sun Microsystems para su sistema operativo Solaris.

ZFS destaca por su gran capacidad, integración de los conceptos anteriormente separados de sistemas de ficheros y administrador de vólumenes en un solo producto, nueva estructura sobre el disco, sistemas de archivos ligeros, y una administración de espacios de almacenamiento sencilla.

Capacidad

248 — Número de snapshots en cualquier sistema de ficheros (2 × 1014)
248 — Número de ficheros en un sistema de ficheros (2 × 1014)
16 exabytes — Tamaño máximo de un sistema de ficheros
16 exabytes — Tamaño máximo de un fichero
16 exabytes — Tamaño máximo de cualquier atributo
3 × 1023 petabytes — Tamaño máximo de un zpool
256 — Número de atributos de un fichero (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS)
256 — Número de ficheros en un directorio (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS)
264 — Número de dispositivos en cualquier zpool
264 — Número de zpools en un sistema
264 — Número de sistemas de ficheros en un zpool


Plataformas

El complejo formato de punteros de bloque proporciona que los metadatos del sistema de ficheros se almacenen de manera adaptada al Endianness de la máquina, permitiendo en un almacenamiento que contiene un pool ZFS se mueva entre sistemas que utilizan diferente orden para los bytes. Los bloques individuales de metadatos se escriben con el orden de bytes nativo del sistema que escribe el bloque. Cuando se lee, si el endianness no coincide, los bytes del metadato se intercambian en memoria.

Autoreparación (Self-Healing)

En pools de estructura mirror o raidz1 y raidz2, todos los datos son hasheados previamente a su escritura en el bloque lógico del pool, una vez escritos los datos, el CRC es comprobado para verificar la correcta inscripción de los mismos, luego es asociado a través de un sistema de metadatos al bloque lógico, de tal modo que cuando se accede a los datos del bloque lógico, se hace un chequeo de su integridad.
Si hay discordancia entre los datos, siendo sistemas con redundancia, procede a buscar en el bloque espejo (mirror) o a calcular los datos a través del sistema de paridad empleado (raidz1 y raidz2), si los datos obtenidos con dicha fuente son correctos (equivalencia en los crc calculado y archivado), se procede a la corrección de los datos del bloque dañado, así como al envio de los datos solicitados a la aplicación.



Esta característica permite la detección de fallos tanto en discos como memorias, fuentes de alimentación, placas base etc....



Modelo transaccional (Copy-on-write)

FS utiliza un modelo transaccional copy-on-write. Todos los punteros a bloques de un sistema de ficheros contienen un checksum de 256 bits sobre el bloque apuntado, que se comprueba al leer el bloque. Los bloques que contienen datos activos no se sobrescriben nunca; en su lugar, se reserva un nuevo bloque, y los datos modificados se escriben en él, y entonces cualquier bloque de metadatos que lo referencie es, de modo similar, reubicado y escrito. Para reducir la sobrecarga de este proceso, se agregan varias actualizaciones en grupos de transacciones, y se utiliza un log de intentos cuando se necesitan escrituras síncronas.


Instantáneas (Snapshots)


Como ZFS no sobrescribe datos, tomar una instantánea simplemente significa no liberar los bloques utilizados por versiones antiguas de los datos. La ventaja es que las instantáneas se toman rápidamente y también son eficientes desde el punto de vista del espacio, pues comparten los datos sin modificar con el sistema de ficheros.

Se pueden crear instantáneas modificables (llamadas clones), lo que resulta en dos sistemas de ficheros independientes que se crean compartiendo un conjunto común de bloques. A medida que se realizan cambios los bloques del sistema de ficheros divergen, pero los bloques comunes se mantendrán independientemente de cuantos clones existan.

No hay comentarios:

Publicar un comentario