Análisis del sistema de archivos de Linux

  
 

En términos de sistema de archivos, Linux ® puede considerarse como la "Swiss Army Knife" en el sistema operativo
. Linux es compatible con una amplia variedad de sistemas de archivos, desde sistemas de archivos registrados por diario hasta sistemas de archivos agrupados y sistemas de archivos cifrados. Linux es una excelente plataforma para usar sistemas de archivos estándar y exóticos y desarrollar sistemas de archivos. Este artículo analiza el sistema de archivos virtual (VFS, a veces llamado el interruptor del sistema de archivos virtual) en el kernel de Linux, y luego presenta la estructura principal que conecta el sistema de archivos de

.


Arquitectura básica del sistema de archivos

La arquitectura del sistema de archivos de Linux es un ejemplo interesante de abstracción de sistemas complejos. Al usar un conjunto común de funciones API, Linux puede admitir muchos sistemas de archivos en una amplia variedad de dispositivos de almacenamiento. Por ejemplo, una llamada a la función de lectura puede leer un cierto número de bytes de un descriptor de archivo específico. La función de lectura no conoce el tipo de sistema de archivos, como ext3 o NFS. Tampoco conoce el medio de almacenamiento en el que reside el sistema de archivos, como un disco de Interfaz de Paquetes de Adjuntos AT (ATAPI), un disco SCSI de Conexión en Serie (SAS) o un disco de Conexión de Tecnología Avanzada en Serie (SATA). Sin embargo, cuando se lee un archivo llamando a la función de lectura, los datos volverán normalmente. Este artículo explica la implementación de este mecanismo e introduce la estructura principal de la capa del sistema de archivos de Linux.


¿Qué es un sistema de archivos?

Primero responda las preguntas más comunes, " ¿Qué es el sistema de archivos ". Un sistema de archivos es un mecanismo para organizar datos y metadatos en un dispositivo de almacenamiento. Dado que la definición es tan amplia, el código que la soporta será muy interesante. Como se mencionó anteriormente, hay muchos tipos de sistemas de archivos y medios. Debido a estos muchos tipos, se espera que la interfaz del sistema de archivos de Linux se implemente como una arquitectura en capas que separa la capa de la interfaz de usuario, la implementación del sistema de archivos y los controladores que operan el dispositivo de almacenamiento.


Sistema de archivos como protocolo

Otra forma de ver un sistema de archivos es considerarlo como un protocolo. Los protocolos de red (como IP) dictan el significado del flujo de datos transmitido a través de Internet. De manera similar, el sistema de archivos proporciona el significado de los datos en un medio de almacenamiento particular.


Relleno

El proceso de asociar un sistema de archivos con un dispositivo de almacenamiento en Linux se denomina montaje. Adjunte un sistema de archivos a la jerarquía actual del sistema de archivos (raíz) usando el comando mount. Al realizar un montaje, proporcione el tipo de sistema de archivos, el sistema de archivos y un punto de montaje. Para ilustrar la funcionalidad de la capa del sistema de archivos de Linux (y cómo montarla), creamos un sistema de archivos en un archivo en el sistema de archivos actual. La forma de hacerlo es crear primero un archivo del tamaño especificado con el comando dd (copiar archivos con /dev /cero como fuente) — — en otras palabras, un archivo inicializado con ceros, como se muestra en el Listado 1. Listado 1. Cree un archivo inicializado $ dd if = /dev /zero of = file.img bs = 1k count = 1000010000 + 0 registros in10000 + 0 registros $ Ahora tiene un archivo file.img de 10MB. Utilice el comando losetup para asociar un dispositivo de bucle con este archivo, para que se vea como un dispositivo de bloque, en lugar de un archivo normal en el sistema de archivos: $ losetup /dev /loop0 file.img $ Este archivo ahora aparece como un dispositivo de bloque ( Representado por /dev /loop0). Luego use mke2fs para crear un sistema de archivos en este dispositivo. Este comando crea un nuevo sistema de archivos ext2 del tamaño especificado, como se muestra en el Listado 2. Listado 2. Creación de un sistema de archivos ext2 con un dispositivo de bucle $ mke2fs -c /dev /loop0 10000mke2fs 1.35 (28-Feb-2004) max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39Filesystem label = SO type: LinuxBlock size = 1024 (log = 0 ) Tamaño del fragmento = 1024 (log = 0) 2512 inodes, 10000 bloques 500 bloques (5.00%) reservados para el superusuario ... $ monte el archivo file.img representado por el dispositivo de bucle (/dev /loop0) usando el comando mount Para el punto de montaje /mnt /point1. Tenga en cuenta que el tipo de sistema de archivos se especifica como ext2. Una vez montado, puede usar este punto de montaje como un nuevo sistema de archivos, como usar el comando ls, como se muestra en el Listado 3. Listado 3. Creando un punto de montaje y montando el sistema de archivos a través de un dispositivo de bucle $ mkdir /mnt /point1 $ mount -t ext2 /dev /loop0 /mnt /point1 $ ls /mnt /point1lost + found $ Como se muestra en el Listado 4, Continúe con este proceso: cree un nuevo archivo en el sistema de archivos que acaba de montar, asócielo a un dispositivo de bucle y cree otro sistema de archivos en él. Listado 4. Creando un nuevo sistema de archivos de bucle en el sistema de archivos de bucle $ dd if = /dev /zero of = /mnt /point1 /file.img bs = 1k count = 10001000 + 0 registros in1000 + 0 registros $ losetup /Dev /loop1 /mnt/point1/file.img$ mke2fs -c /dev /loop1 1000mke2fs 1.35 (28-Feb-2004) max_blocks 1024000, rsv_groups = 125, rsv_gdb = 3Filesystem label = ... $ mkdir /mnt /point2 $ Mount -t ext2 /dev /loop1 /mnt /point2 $ ls /mnt /point2lost + found $ ls /mnt/point1file.img lost + found $ Esta simple demostración hace que sea fácil entender que el sistema de archivos de Linux (y el dispositivo de bucle) es Qué poderoso. Puede crear un sistema de archivos encriptado con un dispositivo de bucle en un archivo de la misma manera. Puede usar un dispositivo de bucle para montar temporalmente los archivos cuando sea necesario, lo que ayuda a proteger sus datos.


Arquitectura del sistema de archivos

Ahora que ha visto el constructor del sistema de archivos, veamos la arquitectura de la capa del sistema de archivos de Linux. Este artículo examina el sistema de archivos de Linux desde dos perspectivas. Primero adoptar la perspectiva de una arquitectura de alto nivel. Luego se presentará una discusión más profunda para presentar la estructura principal de la capa del sistema de archivos.


Arquitectura de alto nivel

Aunque la mayoría del código del sistema de archivos se encuentra en el kernel (a excepción del sistema de archivos de espacio de usuario que se explica más adelante), la arquitectura que se muestra en la Figura 1 muestra La relación entre el espacio de usuario y los componentes principales del kernel que están relacionados con el sistema de archivos.


Figura 1. Arquitectura de los componentes del sistema de archivos de Linux

El espacio de usuario contiene algunas aplicaciones (por ejemplo, usuarios de sistemas de archivos) y bibliotecas GNU C (glibc) Proporcionan interfaces de usuario para las llamadas del sistema de archivos (abrir, leer, escribir y cerrar). La interfaz de llamadas del sistema actúa como un conmutador, enviando llamadas del sistema desde el espacio del usuario a los puntos finales apropiados en el espacio del kernel. VFS es la interfaz principal del sistema de archivos subyacente. Este componente exporta un conjunto de interfaces y luego las abstrae en sistemas de archivos individuales, y el comportamiento de los sistemas de archivos individuales puede variar ampliamente. Hay dos cachés (inodo y dentry) para los objetos del sistema de archivos. Se almacenan en caché los objetos del sistema de archivos utilizados recientemente. Cada implementación del sistema de archivos (como ext2, JFS, etc.) exporta un conjunto común de interfaces para su uso por VFS. El caché del búfer almacena en caché las solicitudes entre el sistema de archivos y los dispositivos de bloque relacionados. Por ejemplo, las solicitudes de lectura y escritura al controlador de dispositivo subyacente se pasan a través del caché del búfer. Esto permite el almacenamiento en caché de solicitudes, reduciendo la cantidad de accesos a dispositivos físicos y acelerando el acceso. El caché del búfer se administra en forma de una lista de uso reciente (LRU). Tenga en cuenta que puede usar el comando de sincronización para enviar solicitudes desde el caché del búfer al medio de almacenamiento (forzando que todos los datos no escritos se envíen al controlador del dispositivo y se envíen al dispositivo de almacenamiento).


¿Qué es un dispositivo de bloque?

Los dispositivos de bloque son dispositivos que envían y reciben datos en bloques (como sectores de disco). Admiten almacenamiento en búfer y acceso aleatorio (no es necesario que lea bloques en secuencia, pero puede acceder a cualquier bloque en cualquier momento). Los dispositivos de bloque incluyen discos duros, CD-ROM y discos RAM. Al contrario de los dispositivos de bloqueo están los dispositivos de caracteres, que no tienen medios que puedan ser direccionados físicamente. Los dispositivos de caracteres incluyen puertos seriales y dispositivos de cinta que solo pueden leer datos de estos dispositivos carácter por carácter. Este es el alto nivel de VFS y los componentes del sistema de archivos. Ahora, discuta la estructura principal que implementa este subsistema.

Copyright © Conocimiento de Windows All Rights Reserved