Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Ola a todos! Seguimos lanzando novas emisións para os cursos dos que xa te namoraches e agora temos présa en anunciar que comezamos un novo conxunto de cursos "Administrador Linux"que se lanzará a finais de abril. Datarase unha nova publicación para este evento. Co material orixinal, podes ler aquí.

Os sistemas de ficheiros virtuais serven como unha especie de abstracción máxica que permite que a filosofía de Linux diga que "todo é un ficheiro".

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Que é un sistema de ficheiros? Baseado nas palabras dun dos primeiros colaboradores e autores de Linux Roberta Lava, "Un sistema de ficheiros é un almacenamento xerárquico de datos reunidos segundo unha estrutura específica." Sexa como for, esta definición é igualmente adecuada para VFAT (Virtual File Allocation Table), Git e Cassandra (Base de datos NoSQL). Entón, que define exactamente un "sistema de ficheiros"?

Conceptos básicos do sistema de ficheiros

O núcleo de Linux ten certos requisitos para unha entidade que se pode considerar un sistema de ficheiros. Debe aplicar os métodos open(), read() и write() para obxectos persistentes que teñen nome. Desde un punto de vista orientado a obxectos programación, o núcleo define un sistema de ficheiros xenérico como unha interface abstracta, e estas tres grandes funcións considéranse "virtuais" e non teñen unha definición concreta. En consecuencia, a implementación predeterminada do sistema de ficheiros chámase sistema de ficheiros virtual (VFS).

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Se podemos abrir, ler e escribir nunha entidade, esa entidade considérase un ficheiro, como podemos ver no exemplo da consola anterior.
O fenómeno VFS só subliña a observación tipo Unix de que "todo é un ficheiro". Pensa o raro que ese pequeno exemplo de /dev/console anterior mostre como funciona realmente a consola. A imaxe mostra unha sesión interactiva de Bash. O envío dunha cadea á consola (dispositivo de consola virtual) móstraa nunha pantalla virtual. VFS ten outras propiedades aínda máis estrañas. Por exemplo, permítelle buscar por por el.

Os sistemas familiares como ext4, NFS e /proc teñen tres funcións importantes nunha estrutura de datos C chamada ficheiro_operacións. Ademais, certos sistemas de ficheiros estenden e redefinen a funcionalidade VFS dun xeito familiar orientado a obxectos. Como sinala Robert Love, a abstracción VFS permite aos usuarios de Linux copiar con indiferencia ficheiros a ou desde sistemas operativos de terceiros ou entidades abstractas como tuberías sen preocuparse polo formato de datos internos. No lado do usuario (espazo de usuario), mediante unha chamada ao sistema, un proceso pode copiar desde un ficheiro a estruturas de datos do núcleo usando o método read() un sistema de ficheiros e despois use o método write () outro sistema de ficheiros para a saída de datos.

As definicións de función que pertencen aos tipos base de VFS están nos ficheiros fs/*.c código fonte do núcleo, mentres que os subdirectorios fs/ contén determinados sistemas de ficheiros. O núcleo tamén contén entidades como cgroups, /dev и tmpfs, que son necesarios durante o proceso de arranque e, polo tanto, están definidos no subdirectorio do núcleo init/. Observe iso cgroups, /dev и tmpfs non chames as funcións "tres grandes". file_operations, pero directamente ler e escribir na memoria.
O diagrama de abaixo mostra como o espazo de usuario accede aos diferentes tipos de sistemas de ficheiros montados habitualmente en sistemas Linux. Estruturas non mostradas pipes, dmesg и POSIX clocks, que tamén implementan a estrutura file_operations, ao que se accede a través da capa VFS.

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

VFS é unha "capa de envoltura" entre chamadas ao sistema e implementacións de certas file_operationscomo ext4 и procfs. Funcións file_operations pode interactuar con controladores de dispositivos ou dispositivos de acceso á memoria. tmpfs, devtmpfs и cgroups non usar file_operations, pero accede directamente á memoria.
A existencia de VFS ofrece unha oportunidade para reutilizar código, xa que os métodos básicos asociados aos sistemas de ficheiros non teñen que ser reimplementados por cada tipo de sistema de ficheiros. A reutilización do código é unha práctica común entre os enxeñeiros de software. Non obstante, se o código reutilizable contén erros graves, todas as implementacións que herdan métodos comúns sofren delas.

/tmp: Suxestión sinxela

Un xeito sinxelo de detectar que os VFS están presentes nun sistema é escribir mount | grep -v sd | grep -v :/, que mostrará todos os montados (mounted) sistemas de ficheiros que non son residentes no disco e non son NFS, o que é certo na maioría dos ordenadores. Unha das monturas listadas (mounts) VFS sen dúbida /tmp, non?

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Todo o mundo coñece ese almacenamento / tmp nun medio físico - tolemia! Orixe.

Por que é indesexable almacenar /tmp en medios físicos? Porque os ficheiros en /tmp son temporais e os dispositivos de almacenamento son máis lentos que a memoria onde se crea tmpfs. Ademais, os medios físicos son máis susceptibles de desgaste cando se sobrescriben que a memoria. Finalmente, os ficheiros en /tmp poden conter información confidencial, polo que facelos desaparecer en cada reinicio é unha característica esencial.

Desafortunadamente, algúns scripts de instalación de distribución de Linux crean /tmp no dispositivo de almacenamento por defecto. Non desespere se isto ocorreu tamén co seu sistema. Siga algunhas instrucións sinxelas con Arch Wikipara solucionar isto, e teña en conta que a memoria asignada para tmpfs non estará dispoñible para outros fins. Noutras palabras, un sistema cun tmpfs xigante e ficheiros grandes pode quedar sen memoria e fallar. Outra suxestión: ao editar un ficheiro /etc/fstab, lembre que debe rematar cunha nova liña, se non, o seu sistema non arrancará.

/proc e /sys

Ademais de /tmp, VFS (sistemas de ficheiros virtuais) que son máis familiares para os usuarios de Linux son /proc и /sys. (/dev reside na memoria compartida e non ten file_operations). Por que estes dous compoñentes? Vexamos esta cuestión.

procfs crea unha instantánea do núcleo e dos procesos que supervisa userspace. En /proc o núcleo imprime información sobre o que ten dispoñible, como as interrupcións, a memoria virtual e o planificador. Ademais, /proc/sys é o lugar onde se configuran os parámetros co comando sysctl, dispoñible para userspace. O estado e as estatísticas dos procesos individuais móstranse en directorios /proc/.

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Aquí /proc/meminfo é un ficheiro baleiro que non obstante contén información valiosa.

Comportamento /proc ficheiros mostra como poden ser diferentes sistemas de ficheiros de disco VFS. Por un lado, /proc/meminfo conteñen información que se pode ver co comando free. Por outra banda, está baleiro! Como funciona? A situación lembra ao famoso artigo titulado Existe a lúa cando ninguén a mira? Realidade e Teoría Cuántica"escrito polo profesor de física da Universidade de Cornell David Mermin en 1985. O feito é que o núcleo recolle estatísticas de memoria cando se lle solicita /proc, e en realidade nos ficheiros /proc non hai nada cando ninguén mira. Como dixo Mermín, "A doutrina cuántica fundamental di que a medición xeralmente non revela un valor preexistente da propiedade que se está a medir". (E considera a pregunta sobre a lúa como tarefa!)
Aparente baleiro procfs ten sentido porque a información alí é dinámica. Unha situación lixeiramente diferente con sysfs. Imos comparar cantos ficheiros teñen polo menos un byte de tamaño /proc e /sys.

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Procfs ten un ficheiro, é dicir, a configuración do núcleo exportada, que é unha excepción porque só precisa ser xerada unha vez por arranque. Por outra banda, en /sys hai moitos ficheiros máis grandes, moitos dos cales ocupan unha páxina enteira de memoria. Normalmente arquivos sysfs conter exactamente un número ou liña, a diferenza das táboas de información obtida da lectura de ficheiros como /proc/meminfo.

Meta sysfs - proporcionar propiedades de lectura/escritura do que chama o núcleo «kobjects» no espazo de usuario. O único obxectivo kobjects é o reconto de ligazóns: cando se elimina a última ligazón a un kobject, o sistema restaurará os recursos asociados a el. Con todo, /sys compoñen a maioría dos famosos "ABI estable para espazo de usuario" núcleo, que ninguén pode nunca, baixo ningunha circunstancia "romper". Isto non significa que os ficheiros en sysfs sexan estáticos, o que sería inconsistente co reconto de referencias de obxectos inestables.
O ABI estable do núcleo limita o que pode aparecer /sys, non o que está realmente presente nese momento en particular. A lista de permisos de ficheiros en sysfs proporciona información sobre como se configuran os axustes para dispositivos, módulos, sistemas de ficheiros, etc. pódese configurar ou ler. A conclusión lóxica é que procfs tamén forma parte do ABI estable do núcleo, aínda que isto non se indica explícitamente en documentación.

Sistemas de ficheiros virtuais en Linux: por que son necesarios e como funcionan? Parte 1

Arquivos en sysfs describe unha propiedade particular para cada entidade e pode ser lexible, escribible ou ambas as dúas cousas. "0" no ficheiro significa que non se pode eliminar o SSD.

Comecemos a segunda parte da tradución con como supervisar VFS usando as ferramentas eBPF e bcc, e agora agardamos os teus comentarios e, tradicionalmente, invitámoste a seminario web aberto, que levará a cabo a nosa profesora o 9 de abril - Vladimir Drozdetsky.

Fonte: www.habr.com

Engadir un comentario