zfs

  • Este artículo explica cómo actualizar un pool ZFS luego de migrar a una nueva versión de ZFS.

  • ¿Qué pasa si hemos clonado un servidor FreeBSD y necesitamos hacer una limpieza de pools ZFS? Simple, recurrir al comando zpool destroy.

  • Los recientes artículos dedicados a FreeBSD publicados en este blog, fueron una suerte de preámbulo para llegar al objetivo final: implementar una nube personal utilizando ownCloud sobre un servidor FreeBSD con las siguientes características: Nginx como servidor HTTP; PHP-FPM como servidor de aplicación (PHP en modo FastCGI); Postgres como motor de bases de datos; y ZFS como sistema de archivos. Una combinación muy ambiciosa que, a pesar de no estar soportada oficialmente por ownCloud, pretende utilizar la mejor alternativa disponible para implementar cada componente, con el fin de alcanzar la máxima eficiencia y rendimiento posible. En términos futboleros sería una especie de "selección", poner el mejor jugador disponible para cada posición: ownCloud+FreeBSD+Nginx+PHP-FPM+Postgres+ZFS.

  • En sistemas FreeBSD, el servicio NFS está conformado por cuatro demonios: el servidor NFS (nfsd), el cual sirve peticiones de clientes NFS; el demonio mountd, el cual lleva a cabo peticiones recibidas desde nfsd; el demonio nfsuserd, el cual gestiona la información de usuarios y grupos; y rpcbind, quien permite que los clientes NFS descubran qué puerto está utilizando el servidor NFS.

  • En el artículo Introducción a ZFS en FreeBSD enumeré las grandes ventajas de ZFS y expliqué paso a paso como definir pooles y crear datasets. En esta oportunidad voy a demostrar cómo configurar el servicio NFS (Network File System) para definir un espacio de almacenamiento en la nube (o sistema de archivos en red), y así poder aprovechar todas las ventajas que posee ZFS en FreeBSD desde clientes GNU/Linux.

  • En este breve artículo voy a demostrar cómo conocer, de forma exacta, cuál fue la fecha de instalación de un sistema operativo basado en Unix (GNU/Linux, FreeBSD).

  • ZFS, The Z File System, es un sistema de archivos avanzado diseñado para superar las limitaciones de los sistemas de archivos más comunes. Originalmente fue diseñado por Sun, y actualmente es un proyecto open source desarrollado por OpenZFS Project.

    ZFS es significativamente diferente del resto de los sistemas de archivos, debido a que es más que sólo un sistema de archivos. Combina los roles tradicionalmente separados de gestor de volúmenes lógicos y sistema de archivos para obtener ventajas únicas. De esta forma, el sistema de archivos es consciente de la estructura de discos subyacente. Los sistemas de archivos tradicionales pueden ser creados sólo en un único disco (si se poseen dos discos, se necesitarán dos sistemas de archivos separados e independientes).

    En las configuraciones de RAID por hardware tradicionales, este problema se resuelve presentando al sistema operativo un disco local simple construido con el espacio provisto por un número de discos físicos, sobre el cual el sistema operativo inicializa un filesystem. Incluso utilizando soluciones de RAID por software, como GEOM, el sistema de archivos cree que está trabajando sobre un dispositivo simple.

    La combinación de gestor de volúmenes y sistema de archivos que posee ZFS permite crear múltiples sistemas de archivos compartiendo un mismo pool de almacenamiento disponible. Una de las grandes ventajas de conocer y gestionar la estructura de discos, es que los sistemas de archivos existentes pueden expandirse automáticamente cuando nuevos dispositivos de disco se agregan al pool. Utilizando otras tecnologías esto no es posible. Por ejemplo si gestionamos el espacio de almacenamiento con LVM en Linux y aumentamos el tamaño de un volúmen, luego será necesario redimensionar el filesystem (o incluso tabla de particiones) que usa tal volumen. Esto en ZFS no es necesario ya que es transparente: si se agrega espacio de almacenamiento al pool, los filesystems lo ven automátcamente. Además ZFS posee otras características adicionales interesantes que pueden ser aplicadas a cada sistema de archivos de forma individual, como compresión, deduplicación y snapshots.

  • Este artículo presenta la configuración y uso de jails, la tecnología de virtualización a nivel sistema operativo (comúnmente conocida como contenedores, containers) provista por FreeBSD.

    Esta tecnología permite particionar a un sistema FreeBSD en varios mini-sistemas independientes (instancias de espacios de usuario aisladas unas de otras) llamados "jails". En el mundo Linux existen tecnologías similares como LXC y Docker.

    Los jails se implementan sobre el concepto de chroot, creando un entorno seguro y aislado del resto del sistema. Así, los procesos creados en este entorno, no pueden acceder a archivos o recursos fuera del mismo. De esta forma, si se compromete un servicio corriendo en un entorno chroot, el atacante no tiene acceso al resto del sistema.

    En un entorno chroot tradicional, los procesos sólo están limitados a la parte del sistema de archivos que pueden acceder. Los jails expanden este modelo virtualizando el acceso al sistema de archivos, al conjunto de usuarios, y al subsistema de red.

    Cada jail está caracterizado por cuatro elementos: un subárbol de directorio (directorio raíz donde se hace chroot), una vez dentro del jail, un proceso no puede salir de este subárbol; un nombre de host (que será utilizado para identificar al jail); una dirección IP (asignada al jail y correspondiente con el nombre de host; y un comando (ruta, relativa al subárbol, a un ejecutable a lanzar dentro del jail).

    Los jails cuentan con su propio conjunto de usuarios y usuario root (limitado al entorno del jail, no puede realizar operaciones fuera del mismo).

    Típicamente existen jails "completos" (que contienen un sistema FreeBSD completo) y de servicio (dedicados a un único servicio o aplicación).

    Este artículo explica cómo crear y utilizar jails en FreeBSD 10, pero va un paso más allá con el objetivo de optimizar el uso de disco y simplificar la administración de los mismos, a partir de la configuración que se encuentra en el artículo Updating Multiple Jails incluido en el Handbook.

  • En el artículo Jails en FreeBSD presenté un esquema de jails a partir del cual sería posible actualizar el sistema base de todos los Jails en una única operación. Este se basaba en separar el filesystem de los jails en dos partes: una compartida de sólo lectura (sistema base) y otra privada de lectura/escritura (configuraciones, paquetes y directorios de trabajo). En este artículo voy a detallar el proceso de upgrade de un host con múltiples jails.

  • Esta semana me tocó implementar un espacio de almacenamiento (Datastore en jerga VMware) utilizando un servidor FreeBSD con sistema de archivos ZFS sobre NFS. Una combinación muy interesante para hosts ESXi, especialmente para almacenar backups y snapshots de máquinas virtuales, ya que al hacer uso de las ventajas de ZFS (compresión y deduplicación) se logra un mejor aprovechamiento de los discos.

    El proceso de instalación y configuración de NFS en FreeBSD es bastante simple, tal como lo he explicado anteriormente, y montar un Datastore NFS en un host ESXi es una tarea trivial utilizando el cliente vSphere. Pero, al momento de verificar el funcionamiento del nuevo Datastore implementado con ZFS sobre NFS, los resultados fueron poco más que terribles: una tasa de transferencia entre el host ESXi y el servidor FreeBSD de algo más de 1 Mb/seg. Muy diferente a los resultados que había tenido con clientes GNU/Linux.

  • PostgreSQL es un sistema de bases de datos relacional orientado a objetos, transaccional y ACID-compliant (sus transacciones cumplen con las propiedades de atomicidad, consistencia, aislación y durabilidad). Dentro de mi organización surgió la necesidad de montar una instancia de PostgreSQL sobre un dataset ZFS, para soportar bases de datos de gran tamaño y aprovechar todos los beneficios de ZFS (compresión, eficiencia, flexibilidad y confiabilidad, entre otras). Por supuesto sobre FreeBSD.

    En el artículo Introducción a ZFS en FreeBSD expliqué detalladamente cómo trabajar con sistemas de archivos ZFS, pero mencioné poco sobre su configuración avanzada. Sólo expliqué cómo utilizar compresión y deduplicación. En este artículo voy a explicar cómo optimizar un dataset ZFS para PostgreSQL, con el objetivo de mejorar la performance, lo cual sirve de ejemplo para entender cómo se modifican y cuáles son algunas de las variables de configuración avanzadas de un pool o dataset ZFS.

  • SmartOS combina cuatro tecnologías extraordinarias en un mismo sistema operativo para proveer un entorno de virtualización multiplataforma que promete revolucionar los centros de cómputo: ZFS+DTrace+Zones+KVM.

    Se trata de un hipervisor especializado lo suficientemente liviano para correr completamente en memoria (se puede iniciar mediante PXE, archivos ISO o dispositivos USB), y la su vez completo para soportar cualquier tipo de aplicación, y al mismo tiempo eficiente gracias a la tecnología de zonas y el sistema de archivos ZFS, de Solaris. Gracias a que corre desde una imagen "live", permite olvidarse por completo de cualquier error de actualización o similar. En caso de fallo, simplemente volver a una imagen previa. El uso de sistemas de archivos ZFS garantiza integridad, con particular énfasis en prevenir la corrupción de datos no detectada o silenciosa. Cuenta con para-virtualización mediante zonas altamente seguras (ya que la mayor parte del software de sistema es de sólo lectura), y también virtualización con KVM. Tal vez el único sistema operativo que ofrece y soporta al mismo tiempo ambos paradigmas de virtualización en un mismo paquete.