Trabajando con Btrfs – Conceptos Generales

Este artículo es parte de una serie de artículos que analizan más de cerca a Btrfs. Este es el sistema de archivos predeterminado para Fedora Estación de trabajo y Fedora Silverblue desde Fedora Linux 33.

Introducción

Los sistemas de archivos son una de las bases de las computadoras modernas. Son una parte esencial de todo sistema operativo y suelen pasar desapercibidos. Sin embargo, los sistemas de archivos modernos como Btrfs ofrecen muchas características excelentes que hacen que trabajar con computadoras sea más conveniente. Junto a otras cosas que pueden, por examplecomprima sus archivos de forma transparente o construya una base sólida para copias de seguridad incrementales.

Este artículo le brinda una descripción general de alto nivel de cómo funciona el sistema de archivos Btrfs y algunas de las características que tiene. No entrará en muchos detalles técnicos ni analizará la implementación. En artículos posteriores de esta serie, se incluyen explicaciones más detalladas de algunas características destacadas.

¿Qué es un sistema de archivos?

Si ha escuchado antes cómo funcionan los sistemas de archivos en el nivel más básico, entonces esto no es nuevo para usted y puede pasar a la siguiente sección. De lo contrario, siga leyendo para obtener una breve introducción sobre lo que hace un sistema de archivos en primer lugar.

En términos simples, un sistema de archivos le permite a su PC encontrar los datos que almacena en el disco. Esto suena como una tarea trivial, pero en esencia, cualquier tipo de dispositivo de almacenamiento no volátil actual (como HDD, SSD, tarjetas SD, etc.) sigue siendo en su mayor parte lo que era en 1970 cuando se inventaron las PC: A (enorme ) colección de bloques de almacenamiento.

Los bloques son la unidad de almacenamiento direccionable más granular. Cada archivo en su PC se almacena en uno o más bloques. Un bloque suele tener un tamaño de 4096 bytes. Esto depende del hardware que tenga y del software (es decir, el sistema de archivos) encima.

Los sistemas de archivos nos permiten encontrar el contenido de nuestros archivos entre la gran cantidad de bloques de almacenamiento disponibles. Esto se hace a través de los llamados inodos. Un inodo contiene información sobre un archivo en un bloque de almacenamiento con formato especial. Esto incluye el tamaño del archivo, dónde encontrar los bloques de almacenamiento que componen el contenido del archivo, sus reglas de acceso (es decir, quién puede leer, escribir o ejecutar el archivo) y mucho más.

A continuación se muestra un example de cómo se ve esto:

Un archivo de texto “myfile.txt” y un hipotético example de su representación en disco. Todos los cuadrados son bloques de almacenamiento individuales.

La estructura de un inodo tiene grandes implicaciones en las capacidades de un sistema de archivos, por lo que es una de las estructuras de datos centrales para cualquier sistema de archivos. Por esta razón, cada sistema de archivos tiene su propia estructura de inodos. Si desea saber más sobre esto, eche un vistazo a la estructura de inodo del sistema de archivos Btrfs vinculado a continuación [1] . Para obtener una explicación más detallada de lo que significan los campos individuales, puede consultar la estructura de inodos del sistema de archivos ext4 [2] .

Sistemas de archivos de copia en escritura

Una de las características sobresalientes de Btrfs, en comparación con ext4, para example, es que es un sistema de archivos CoW (Copy-on-Write). Cuando un archivo se cambia y se vuelve a escribir en el disco, intencionalmente no se vuelve a escribir donde estaba antes. En su lugar, se copia y almacena en una ubicación completamente nueva en el disco. En este sentido, puede ser más sencillo pensar en CoW como una especie de “redireccionamiento”, porque la escritura del archivo se redirige a diferentes bloques de almacenamiento.

Esto puede parecer un desperdicio, pero en la práctica no lo es. Esto se debe a que los datos modificados deben volver a escribirse en el disco en cualquier caso, independientemente de cómo funcione el sistema de archivos. Btrfs simplemente se asegura de que los datos se escriban en bloques previamente desocupados, por lo que los datos antiguos permanecen intactos. El único inconveniente real es que este comportamiento puede conducir a la fragmentación de archivos más rápido que en otros sistemas de archivos. En escenarios de uso de escritorio regulares, es poco probable que note una diferencia.

¿Cuál es la ventaja de CoW? En términos simples: se puede mantener un historial de los archivos modificados y editados. Btrfs mantendrá las referencias a las versiones de archivo anteriores (inodes) en algún lugar al que se pueda acceder fácilmente. Esta referencia es una instantánea: una imagen del estado del sistema de archivos en algún momento. Este será el tema de un artículo separado en esta serie, por lo que se dejará así por ahora.

Más allá de mantener historiales de archivos, los sistemas de archivos CoW siempre están en un estado consistente, incluso si una transacción anterior del sistema de archivos (como escribir en un archivo) no se completó debido, por ejemplo, a una pérdida de energía. Esto se debe a que las actualizaciones de metadatos del sistema de archivos también son CoW: el sistema de archivos en sí nunca se sobrescribe, por lo que una interrupción no puede dejarlo en un estado parcialmente escrito.

Copy-on-Write para archivos

Puede pensar en los nombres de archivo como punteros a los inodos del archivo al que pertenecen. Al escribir en un archivo, Btrfs crea una copia del contenido del archivo modificado (los datos), junto con un nuevo inodo (los metadatos), y luego hace que su nombre de archivo apunte a este nuevo inodo. El inodo antiguo permanece intacto. A continuación se ve otro hipotético example para ilustrar esto:

Continuación de la example arriba: se agregaron 3 bytes más de datos

Aquí “myfile.txt” tiene tres bytes añadidos. Un sistema de archivos tradicional habría actualizado el bloque “Datos” en el medio para contener los nuevos contenidos. Un sistema de archivos CoW mantiene intactos los bloques antiguos (atenuados) y escribe (copia) los datos y metadatos modificados en algún lugar nuevo. Es importante tener en cuenta que solo se copian los bloques de datos modificados y no el archivo completo.

Si no hay más bloques sin usar para escribir nuevos contenidos, Btrfs recuperará el espacio de los bloques de datos ocupados por versiones de archivos anteriores (a menos que sean parte de una instantánea, consulte el artículo posterior de esta serie).

Copy-on-Write para carpetas

Desde el punto de vista de un sistema de archivos, una carpeta es un tipo especial de archivo. A diferencia de los archivos normales, el sistema de archivos interpreta los contenidos subyacentes directamente. Una carpeta tiene algunos metadatos asociados (un inodo, como se ve en los archivos anteriores) que rigen los permisos de acceso o el tiempo de modificación. En el caso más simple, los datos almacenados en una carpeta (las llamadas “entradas de directorio”) son una lista de referencias a inodos, donde cada inodo es a su vez otro archivo o carpeta. Sin embargo, los sistemas de archivos modernos almacenan al menos un nombre de archivo, junto con una referencia a un inodo del archivo en cuestión, en una entrada de directorio.

Anteriormente se señaló que escribir en un archivo crea una copia del inodo anterior y modifica el contenido en consecuencia. En esencia, esto genera un nuevo inodo que no está relacionado con su predecesor. Para que el archivo modificado aparezca en el sistema de archivos, también se actualizan todas las entradas del directorio que contienen una referencia a él.

¡Este es un proceso recursivo! Dado que una carpeta es en sí misma un archivo con un inodo, la modificación de cualquiera de sus entradas de carpeta crea un nuevo inodo para el archivo de la carpeta. Esta recurrencia ocurre en todo el árbol del sistema de archivos, hasta que llega a la raíz del sistema de archivos.

Como consecuencia, siempre que se mantenga una referencia a cualquiera de los directorios antiguos y no se eliminen o sobrescriban, el árbol del sistema de archivos se puede recorrer en su estado anterior. Esto, de nuevo, es exactamente lo que hacen las instantáneas.

Qué esperar en futuros artículos

Btrfs es más que un sistema de archivos CoW. Su objetivo es implementar “características avanzadas mientras también se enfoca en la tolerancia a fallas, la reparación y la fácil administración” (Ver [3] ). Los artículos futuros de esta serie analizarán estas características en particular:

  • Subvolúmenes: árboles de archivos dentro de su árbol de archivos
  • Instantáneas – Retrocediendo en el tiempo
  • Compresión: ahorro de espacio de almacenamiento transparente
  • Qgroups: limitar el tamaño de su sistema de archivos
  • RAID: reemplace su configuración de mdadm

Esta no es una lista exhaustiva de las características de Btrfs. Si desea obtener una descripción general completa de las funciones disponibles, consulte la Wiki [4] y documentos [3] .

Conclusión

Espero haber logrado despertar su apetito por conocer el sistema de archivos de su PC. Si tiene preguntas hasta ahora, deje un comentario sobre lo que se le ocurrió para que puedan discutirse en futuros artículos. Mientras tanto, siéntase libre de estudiar los recursos vinculados en el texto. Si se tropieza con una característica de Btrfs que encuentra particularmente intrigante, agregue un comentario a continuación también. Si hay suficiente interés en un tema en particular, tal vez agregue un artículo a la serie. ¡Nos vemos en el próximo artículo!

Fuentes

[1]: https://btrfs.wiki.kernel.org/index.php/Data_Structures#btrfs_inode_item
[2]: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table
[3]: https://btrfs.readthedocs.io/en/latest/Introducción.html
[4]: https://btrfs.wiki.kernel.org/index.php/Main_Page

Related Posts