Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

¡Hola a todos! Seguimos lanzando nuevas transmisiones para los cursos que ya te han enamorado y ahora tenemos prisa por anunciar que estamos comenzando un nuevo conjunto de cursos. "Administrador de Linux"que se lanzará a finales de abril. Se fechará una nueva publicación para este evento. Con el material original, puede leer aquí.

Los sistemas de archivos virtuales sirven como una especie de abstracción mágica que permite que la filosofía de Linux diga que "todo es un archivo".

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

¿Qué es un sistema de archivos? Basado en las palabras de uno de los primeros colaboradores y autores de Linux roberta lava, "Un sistema de archivos es un almacenamiento jerárquico de datos ensamblados de acuerdo con una estructura específica". Sea como fuere, esta definición es igualmente adecuada para VFAT (Tabla de asignación de archivos virtuales), Git y Cassandra (Base de datos NoSQL). Entonces, ¿qué define exactamente algo como un "sistema de archivos"?

Conceptos básicos del sistema de archivos

El kernel de Linux tiene ciertos requisitos para una entidad que pueda considerarse un sistema de archivos. Debe implementar los métodos open(), read() и write() para objetos persistentes que tienen nombres. Desde un punto de vista orientado a objetos programacion, el núcleo define un sistema de archivos genérico como una interfaz abstracta, y estas tres grandes funciones se consideran "virtuales" y no tienen una definición concreta. En consecuencia, la implementación del sistema de archivos predeterminado se denomina sistema de archivos virtual (VFS).

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

Si podemos abrir, leer y escribir en una entidad, entonces esa entidad se considera un archivo, como podemos ver en el ejemplo de la consola anterior.
El fenómeno VFS solo subraya la observación similar a Unix de que "todo es un archivo". Piense en lo extraño que ese pequeño ejemplo de /dev/console anterior muestra cómo funciona realmente la consola. La imagen muestra una sesión de Bash interactiva. Enviar una cadena a la consola (dispositivo de consola virtual) la muestra en una pantalla virtual. VFS tiene otras propiedades, incluso más extrañas. Por ejemplo, le permite buscar por lo.

Los sistemas familiares como ext4, NFS y /proc tienen tres funciones importantes en una estructura de datos C llamada operaciones_archivo. Además, ciertos sistemas de archivos amplían y redefinen las funciones de VFS de una manera familiar orientada a objetos. Como señala Robert Love, la abstracción de VFS permite a los usuarios de Linux copiar archivos desde o hacia sistemas operativos de terceros o entidades abstractas como tuberías sin preocuparse por su formato de datos interno. En el lado del usuario (espacio de usuario), usando una llamada al sistema, un proceso puede copiar desde un archivo a las estructuras de datos del kernel usando el método read() un sistema de archivos y luego use el método write () otro sistema de archivos para la salida de datos.

Las definiciones de funciones que pertenecen a los tipos base de VFS están en los archivos fs/*.c código fuente del núcleo, mientras que los subdirectorios fs/ contienen ciertos sistemas de archivos. El núcleo también contiene entidades como cgroups, /dev и tmpfs, que se requieren durante el proceso de arranque y, por lo tanto, se definen en el subdirectorio del kernel init/. Darse cuenta de cgroups, /dev и tmpfs no llamar a las funciones de los "tres grandes" file_operations, pero lee y escribe directamente en la memoria.
El siguiente diagrama muestra cómo el espacio de usuario accede a los diferentes tipos de sistemas de archivos comúnmente montados en los sistemas Linux. Estructuras no mostradas pipes, dmesg и POSIX clocks, que también implementan la estructura file_operations, al que se accede a través de la capa VFS.

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

VFS es una "capa contenedora" entre las llamadas al sistema y las implementaciones de ciertos file_operationsTal como ext4 и procfs. Funciones file_operations puede interactuar con controladores de dispositivos o dispositivos de acceso a la memoria. tmpfs, devtmpfs и cgroups no utilice file_operations, pero accede directamente a la memoria.
La existencia de VFS brinda la oportunidad de reutilizar el código, ya que los métodos básicos asociados con los sistemas de archivos no tienen que ser reimplementados por cada tipo de sistema de archivos. ¡La reutilización de código es una práctica común entre los ingenieros de software! Sin embargo, si el código reutilizable contiene errores graves, todas las implementaciones que heredan métodos comunes los sufren.

/tmp: pista simple

Una manera fácil de detectar que VFS está presente en un sistema es escribir mount | grep -v sd | grep -v :/, que mostrará todo montado (mounted) sistemas de archivos que no residen en el disco ni son NFS, lo cual es cierto en la mayoría de las computadoras. Uno de los montajes enumerados (mounts) VFS indudablemente /tmpcierto?

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

Todo el mundo sabe que el almacenamiento / tmp en un medio físico - ¡locura! fuente.

¿Por qué no es deseable almacenar /tmp en medios fisicos? Porque los archivos en /tmp son temporales y los dispositivos de almacenamiento son más lentos que la memoria donde se crea tmpfs. Además, los medios físicos son más susceptibles de desgastarse cuando se sobrescriben que la memoria. Finalmente, los archivos en /tmp pueden contener información confidencial, por lo que hacer que desaparezcan en cada reinicio es una característica esencial.

Desafortunadamente, algunos scripts de instalación de distribución de Linux crean /tmp en el dispositivo de almacenamiento de forma predeterminada. No se desespere si esto también le sucede a su sistema. Siga unas sencillas instrucciones con Arch Wikipara arreglar esto, y tenga en cuenta que la memoria asignada para tmpfs deja de estar disponible para otros fines. En otras palabras, un sistema con un tmpfs gigante y archivos grandes puede quedarse sin memoria y fallar. Otra pista: al editar un archivo /etc/fstab, recuerda que debe terminar con una nueva línea, de lo contrario tu sistema no arrancará.

/proc y /sys

además /tmp, VFS (sistemas de archivos virtuales) que son más familiares para los usuarios de Linux son /proc и /sys (/dev reside en la memoria compartida y no tiene file_operations). ¿Por qué estos dos componentes? Echemos un vistazo a este problema.

procfs crea una instantánea del kernel y los procesos que supervisa userspace. En /proc el núcleo imprime información sobre lo que tiene disponible, como interrupciones, memoria virtual y el programador. Además, /proc/sys es el lugar donde se configuran los parámetros con el comando sysctl, disponible para userspace. El estado y las estadísticas de los procesos individuales se muestran en directorios /proc/.

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

es /proc/meminfo es un archivo vacío que, sin embargo, contiene información valiosa.

Comportamiento /proc files muestra cuán diferentes pueden ser los sistemas de archivos de disco VFS. Por un lado, /proc/meminfo contienen información que se puede ver con el comando free. Por otro lado, ¡está vacío! ¿Como funciona? La situación recuerda el famoso artículo titulado ¿Existe la luna cuando nadie la mira? Realidad y Teoría Cuántica"escrito por el profesor de física de la Universidad de Cornell, David Mermin, en 1985. El hecho es que el núcleo recopila estadísticas de memoria cuando se realiza una solicitud a /proc, y en realidad en archivos /proc no hay nada cuando nadie está mirando. Como dijo Mermín, "La doctrina cuántica fundamental dice que la medición generalmente no revela un valor preexistente de la propiedad que se mide". (¡Y considere la pregunta sobre la luna como tarea!)
vacío aparente procfs tiene sentido porque la información allí es dinámica. Una situación ligeramente diferente con sysfs. Comparemos cuántos archivos que tienen al menos un byte de tamaño están en /proc y /sys.

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

Procfs tiene un archivo, a saber, la configuración del kernel exportada, que es una excepción porque solo necesita generarse una vez por arranque. Por otro lado, en /sys hay muchos archivos más grandes, muchos de los cuales ocupan una página completa de memoria. Por lo general, los archivos sysfs contener exactamente un número o línea, a diferencia de las tablas de información obtenidas de la lectura de archivos como /proc/meminfo.

objetivo sysfs - proporcionar propiedades de lectura/escritura de lo que llama el núcleo «kobjects» en el espacio de usuario. el unico objetivo kobjects es el conteo de enlaces: cuando se elimina el último enlace a un kobject, el sistema restaurará los recursos asociados con él. Sin embargo, /sys constituye la mayor parte de los famosos "ABI estable para el espacio de usuario" núcleo, que nadie puede jamás, bajo ninguna circunstancia "romper". Esto no significa que los archivos en sysfs sean estáticos, lo que sería inconsistente con el recuento de referencias de objetos inestables.
La ABI estable del kernel limita lo que puede aparecer en /sys, no lo que está realmente presente en ese momento particular. La lista de permisos de archivos en sysfs proporciona información sobre cómo se configuran los ajustes para dispositivos, módulos, sistemas de archivos, etc. se puede configurar o leer. La conclusión lógica es que procfs también es parte de la ABI estable del núcleo, aunque esto no se establece explícitamente en documentación.

Sistemas de archivos virtuales en Linux: ¿por qué son necesarios y cómo funcionan? Parte 1

archivos en sysfs describe una propiedad particular para cada entidad y puede ser legible, escribible o ambos. "0" en el archivo significa que la SSD no se puede quitar.

Comencemos la segunda parte de la traducción con cómo monitorear VFS usando las herramientas eBPF y bcc, y ahora estamos esperando sus comentarios y tradicionalmente los invitamos a seminario web abierto, que será impartida por nuestro profesor el 9 de abril - Vladímir Drozdetsky.

Fuente: habr.com

Añadir un comentario