Introducción a la terminología y los conceptos de almacenamiento en Linux

Introducción

Linux cuenta con sistemas y herramientas robustas para administrar dispositivos de hardware, incluyendo unidades de almacenamiento. En este artículo, analizaremos a grandes rasgos cómo Linux representa estos dispositivos y cómo el almacenamiento bruto se convierte en espacio utilizable en el servidor.

¿Qué es el almacenamiento en bloques?

El almacenamiento en bloque es otro nombre para lo que el kernel de Linux denomina dispositivo de bloque. Un dispositivo de bloque es un componente de hardware que se puede usar para almacenar datos, como un disco duro giratorio tradicional (HDD), una unidad de estado sólido (SSD), una memoria flash, etc. Se denomina dispositivo de bloque porque el kernel interactúa con el hardware haciendo referencia a bloques de tamaño fijo, o porciones de espacio.

En otras palabras, el almacenamiento en bloques es lo que se conoce como almacenamiento en disco normal en una computadora. Una vez configurado, actúa como una extensión del árbol de archivos actual, y debería ser posible escribir o leer información de cada unidad indistintamente.

¿Qué son las particiones de disco?

Las particiones de disco son una forma de dividir una unidad de almacenamiento en unidades utilizables más pequeñas. Una partición es una sección de una unidad de almacenamiento que se puede tratar de forma muy similar a la unidad misma.

El particionamiento permite segmentar el espacio disponible y usar cada partición para un propósito diferente. Esto ofrece al usuario mayor flexibilidad, permitiéndole segmentar potencialmente un mismo disco para múltiples sistemas operativos, espacio de intercambio o sistemas de archivos especializados.

Aunque los discos se pueden formatear y usar sin particionar, los sistemas operativos suelen esperar encontrar una tabla de particiones, incluso si solo hay una partición escrita en el disco. Generalmente, se recomienda particionar las unidades nuevas para mayor flexibilidad.

MBR frente a GPT

Al particionar un disco, es importante saber qué formato se utilizará. Generalmente, se trata de elegir entre MBR (Registro de Arranque Maestro) y GPT (Tabla de Particiones GUID).

El MBR tiene más de 30 años. Debido a su antigüedad, presenta importantes limitaciones. Por ejemplo, no se puede usar con discos de más de 2 TB y solo admite un máximo de cuatro particiones primarias.

GPT es un esquema de particionamiento más moderno que resuelve algunos de los problemas inherentes al MBR. Los sistemas que ejecutan GPT pueden tener muchas más particiones por disco. Esto suele estar limitado únicamente por las restricciones impuestas por el propio sistema operativo. Además, con GPT no existe la limitación de tamaño de disco y la información de la tabla de particiones está disponible en varias ubicaciones para protegerla contra la corrupción. GPT también puede crear un “MBR protector” para compatibilidad con herramientas que solo utilizan MBR.

En la mayoría de los casos, GPT es la mejor opción a menos que su sistema operativo le impida usarlo.

Formato y sistemas de archivos

Aunque el kernel de Linux reconoce un disco sin formato, este debe formatearse para poder usarse. El formateo consiste en escribir un sistema de archivos en el disco y prepararlo para las operaciones con archivos. Un sistema de archivos es el sistema que estructura los datos y controla cómo se escribe y se recupera la información del disco subyacente. Sin un sistema de archivos, no se podría usar el dispositivo de almacenamiento para ninguna operación estándar.

Existen muchos formatos de sistemas de archivos diferentes, cada uno con sus propias desventajas, incluida la compatibilidad con sistemas operativos. Todos ofrecen al usuario una representación similar del disco, pero las características y las plataformas compatibles pueden ser muy diferentes.

Algunos de los sistemas de archivos más populares para Linux son:

  • Ext4 : El sistema de archivos predeterminado más popular es Ext4, sucesor de Ext2 y Ext3. El sistema de archivos Ext4 tiene registro, es retrocompatible con sistemas heredados, es estable y cuenta con soporte y herramientas consolidadas. Es una buena opción si no tiene necesidades específicas.
  • XFS : XFS se especializa en el rendimiento y en archivos de datos de gran tamaño. Formatea rápidamente y ofrece un buen rendimiento al gestionar archivos grandes y trabajar con discos de gran tamaño. También cuenta con funciones de captura de instantáneas en tiempo real. XFS utiliza el registro de metadatos en lugar de registrar tanto los metadatos como los datos. Esto se traduce en un rendimiento rápido, pero puede provocar la corrupción de datos en caso de un corte de energía repentino.
  • Btrfs : Btrfs es un sistema de archivos moderno, con copia al escribir y numerosas funciones. Esta arquitectura permite integrar funciones de gestión de volúmenes en la capa del sistema de archivos, como instantáneas y clonación. Se utiliza por defecto en algunos dispositivos NAS (almacenamiento conectado en red) comerciales y de consumo, y es popular para matrices dedicadas multidisco.
  • ZFS : ZFS es otro sistema de archivos y gestor de volúmenes de copia al escribir con un conjunto de características robusto y consolidado. Compite de forma bastante directa con Btrfs, cuenta con funciones de integridad de datos, puede gestionar sistemas de archivos de gran tamaño, incluye funciones típicas de volumen como la creación de instantáneas y la clonación, y puede organizar volúmenes en matrices RAID y similares para mejorar la redundancia y el rendimiento. ZFS tiene un historial controvertido debido a problemas de licencia, pero no es ni mucho más ni menos popular que Btrfs si tenemos en cuenta el soporte comercial.

Además, Windows utiliza principalmente * NTFS y ExFAT , mientras que macOS utiliza principalmente HFS+ y APFS . Normalmente es posible leer y, en ocasiones, escribir estos formatos de sistema de archivos en diferentes plataformas, pero podría requerir herramientas de compatibilidad adicionales.

Cómo administra Linux los dispositivos de almacenamiento

Archivos del dispositivo en /dev

En Linux, casi todo se representa mediante un archivo en algún lugar de la jerarquía del sistema de archivos. Esto incluye hardware como las unidades de almacenamiento, que se representan en el sistema como archivos en el /devdirectorio. Normalmente, los archivos que representan dispositivos de almacenamiento empiezan con una letra sdo hdvan seguidos de ella. Por ejemplo, la primera unidad de un servidor suele ser algo como /dev/sda.

Las particiones de estas unidades también contienen archivos dentro de [nombre de la unidad] /dev, que se representan añadiendo el número de partición al final del nombre de la unidad. Por ejemplo, la primera partición de la unidad del ejemplo anterior sería [nombre de la unidad] /dev/sda1.

Si bien los archivos de dispositivo /dev/sd*y /dev/hd*representan la forma tradicional de referirse a unidades y particiones, existe una desventaja significativa al usar solo estos valores. El kernel de Linux decide qué dispositivo recibe cada nombre en cada arranque, lo que puede generar situaciones confusas cuando los dispositivos cambian de nodo.

Para solucionar este problema, el /dev/diskdirectorio contiene subdirectorios que corresponden a métodos diferentes y más persistentes para identificar discos y particiones en el sistema. Estos contienen enlaces simbólicos que se crean al reiniciar el sistema y dirigen a los /dev/[sh]da*archivos correctos. Los enlaces se nombran según la característica que identifica al directorio (por ejemplo, por la etiqueta de partición /dev/disk/by-partlabel). Estos enlaces siempre apuntarán a los dispositivos correctos, por lo que pueden usarse como identificadores estáticos para espacios de almacenamiento.

Es posible que existan algunos o todos los siguientes subdirectorios en /dev/disk:

  • by-labelLa mayoría de los sistemas de archivos cuentan con un mecanismo de etiquetado que permite asignar nombres arbitrarios, especificados por el usuario, a un disco o partición. Este directorio consta de enlaces que reciben el nombre de estas etiquetas proporcionadas por el usuario.
  • by-uuidLos UUID, o identificadores únicos universales, son una cadena larga y única de letras y números que se puede usar como identificador de un recurso de almacenamiento. Generalmente, no son muy legibles, pero casi siempre son únicos, incluso entre sistemas. Por lo tanto, es recomendable usar UUID para referenciar el almacenamiento que pueda migrar entre sistemas, ya que las colisiones de nombres son menos probables.
  • by-partlabely by-partuuid: Las tablas GPT ofrecen su propio conjunto de etiquetas y UUID, que también pueden usarse para identificación. Funcionan de forma muy similar a los dos directorios anteriores, pero utilizan identificadores específicos de GPT.
  • by-idEste directorio contiene enlaces generados por los números de serie del hardware y el hardware al que están conectados. No es completamente persistente, ya que la forma en que el dispositivo está conectado al sistema puede cambiar su by-idnombre.
  • by-pathAl igual que by-id, este directorio depende de la conexión de un dispositivo de almacenamiento al sistema. Los enlaces aquí se construyen utilizando la interpretación que el sistema hace del hardware utilizado para acceder al dispositivo. Esto presenta las mismas desventajas, ya que by-idconectar un dispositivo a un puerto diferente puede alterar este valor.

Por lo general, by-labelo by-uuidson las mejores opciones para la identificación persistente de dispositivos específicos.

Nota: Los volúmenes de almacenamiento en bloque de DigitalOcean controlan los números de serie de los dispositivos que se informan al sistema operativo. Esto permite que la by-idcategorización sea persistente y fiable en esta plataforma. Este es el método preferido para referirse a los volúmenes de DigitalOcean, ya que es persistente y predecible en el primer arranque.

Dispositivos de bloque de montaje

En Linux y otros sistemas operativos similares a Unix, todo el sistema, independientemente de la cantidad de dispositivos físicos involucrados, se representa mediante un único árbol de archivos unificado. Al utilizar un sistema de archivos en una unidad o partición, este debe conectarse al árbol existente. El montaje consiste en conectar una partición o unidad formateada a un directorio dentro del sistema de archivos de Linux. Desde ese directorio se puede acceder al contenido de la unidad.

Las unidades casi siempre se montan en directorios vacíos dedicados; montarlas en un directorio que no esté vacío significa que su contenido habitual será inaccesible hasta que se desmonte la unidad. Existen diversas opciones de montaje que pueden configurarse para modificar el comportamiento de un dispositivo montado. Por ejemplo, la unidad puede montarse en modo de solo lectura para garantizar que su contenido no se altere.

El Estándar de Jerarquía de Sistemas de Archivos recomienda usar /mnto un subdirectorio debajo para sistemas de archivos montados temporalmente. No recomienda dónde montar almacenamiento más permanente, así que puede elegir el esquema que prefiera. En muchos casos, también se usan /mnto subdirectorios para almacenamiento más permanente./mnt

Hacer que los montajes sean permanentes con /etc/fstab

Los sistemas Linux utilizan un archivo llamado /etc/fstabtabla de sistemas de archivos para determinar qué sistemas de archivos se montarán durante el arranque. Los sistemas de archivos que no tengan una entrada en este archivo no se montarán automáticamente a menos que otro software lo programe.

Cada línea del /etc/fstabarchivo representa un sistema de archivos diferente que debe montarse. Esta línea especifica el dispositivo de bloque, el punto de montaje al que se asocia, el formato de la unidad y las opciones de montaje, además de otra información.

Gestión de almacenamiento más compleja

Si bien estas características principales permiten dar cabida a muchos casos de uso, hay paradigmas de gestión más complejos disponibles para unir varios discos, especialmente RAID .

¿Qué es RAID?

RAID significa matriz redundante de discos independientes . RAID es una tecnología de virtualización y gestión de almacenamiento que permite agrupar unidades y administrarlas como una sola unidad con capacidades adicionales .

Las características de una matriz RAID dependen de su nivel RAID, que define cómo se relacionan los discos de la matriz entre sí. Algunos de los niveles más comunes son:

  • RAID 0 : Este nivel indica la segmentación de unidades . Esto significa que, a medida que se escriben datos en la matriz, estos se dividen y distribuyen linealmente entre los discos del conjunto. Esto ofrece una mejora del rendimiento, ya que se puede escribir o leer en varios discos simultáneamente. La desventaja es que un fallo en una sola unidad puede perder todos los datos de la matriz, ya que ningún disco contiene suficiente información sobre el contenido para reconstruir. RAID 0 no suele utilizarse en producción por este motivo, aunque puede ser útil como punto de comparación.
  • RAID 1 : RAID 1 significa duplicación de unidades . Todo lo que se escribe en una matriz RAID 1 se escribe en varios discos. Su principal ventaja es la redundancia de datos, que permite que los datos sobrevivan a la pérdida del disco duro en ambos lados de la duplicación. Dado que varias unidades contendrán exactamente los mismos datos, la capacidad útil se reduce al menos a la mitad.
  • RAID 5 : RAID 5 distribuye los datos entre varias unidades, de forma similar a RAID 0. Sin embargo, este nivel también implementa una paridad distribuida entre las unidades. Esto significa que, si una unidad falla, las unidades restantes pueden reconstruir la matriz utilizando la información de paridad compartida. Normalmente, esto es suficiente para reconstruir un disco, lo que significa que la matriz puede sobrevivir a cualquier pérdida de disco. RAID 5 reduce el espacio disponible en una matriz a la capacidad de un disco.
  • RAID 6 : RAID 6 tiene las mismas propiedades que RAID 5, pero ofrece doble paridad. Esto significa que las matrices RAID 6 pueden soportar la pérdida de dos unidades cualesquiera. La capacidad de la matriz se ve afectada por la paridad, lo que significa que la capacidad utilizable se reduce en dos discos.
  • RAID 10 : RAID 10 es una combinación de los niveles 1 y 0. Primero, se crean dos conjuntos de matrices reflejadas. A continuación, se distribuyen los datos entre ellas. Esto crea una matriz con características de redundancia y un buen rendimiento. Sin embargo, requiere un gran número de unidades, y la capacidad total sigue siendo inferior a la mitad del espacio de disco combinado.

¿A dónde ir después?

Si tiene un nuevo dispositivo de almacenamiento que desea usar en su sistema Linux, este artículo le guiará en el proceso de particionar, formatear y montar su nuevo sistema de archivos. Esto debería ser suficiente para la mayoría de los casos donde su principal objetivo es añadir capacidad. Para aprender a administrar el almacenamiento, consulte ” Cómo realizar tareas básicas de administración de dispositivos de almacenamiento en Linux” .

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post