¡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.
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".
¿Qué es un sistema de archivos? Basado en las palabras de uno de los primeros colaboradores y autores de Linux
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
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
Los sistemas familiares como ext4, NFS y /proc tienen tres funciones importantes en una estructura de datos C llamada 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/
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.
VFS es una "capa contenedora" entre las llamadas al sistema y las implementaciones de ciertos file_operations
Tal 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
/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 /tmp
cierto?
Todo el mundo sabe que el almacenamiento / tmp
en un medio físico - ¡locura!
¿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 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/
.
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 /proc
, y en realidad en archivos /proc
no hay nada cuando nadie está mirando. Como dijo
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
.
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
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
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
Fuente: habr.com