Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Salut tout le monde! Nous continuons à lancer de nouveaux flux pour les cours dont vous êtes déjà tombé amoureux et maintenant nous sommes pressés d'annoncer que nous commençons une nouvelle série de cours "Administrateur Linux"qui sera lancé fin avril. Une nouvelle publication sera datée pour cet événement. Avec le matériel d'origine, vous pouvez lire ici.

Les systèmes de fichiers virtuels sont une sorte d'abstraction magique qui permet à la philosophie de Linux de dire que "tout est un fichier".

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Qu'est-ce qu'un système de fichiers ? Basé sur les mots de l'un des premiers contributeurs et auteurs de Linux roberta lave, "Un système de fichiers est un stockage hiérarchique de données assemblées selon une structure spécifique." Quoi qu'il en soit, cette définition convient aussi bien à VFAT (Virtual File Allocation Table), Git et Cassandra (Base de données NoSQL). Alors, qu'est-ce qui définit exactement une chose telle qu'un "système de fichiers" ?

Bases du système de fichiers

Le noyau Linux a certaines exigences pour une entité qui peut être considérée comme un système de fichiers. Il doit mettre en œuvre les méthodes open(), read() и write() pour les objets persistants qui ont des noms. D'un point de vue orienté objet programmation, le noyau définit un système de fichiers générique comme une interface abstraite, et ces trois grandes fonctions sont considérées comme "virtuelles" et n'ont pas de définition concrète. Par conséquent, l'implémentation du système de fichiers par défaut est appelée système de fichiers virtuel (VFS).

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Si nous pouvons ouvrir, lire et écrire dans une entité, alors cette entité est considérée comme un fichier, comme nous pouvons le voir dans l'exemple de la console ci-dessus.
Le phénomène VFS ne fait que souligner l'observation de type Unix selon laquelle "tout est un fichier". Pensez à quel point ce petit exemple /dev/console ci-dessus montre de manière étrange comment la console fonctionne réellement. L'image montre une session Bash interactive. L'envoi d'une chaîne à la console (dispositif de console virtuelle) l'affiche sur un écran virtuel. VFS a d'autres propriétés encore plus étranges. Par exemple, il vous permet de rechercher par il.

Les systèmes familiers tels que ext4, NFS et /proc ont trois fonctions importantes dans une structure de données C appelée fichier_opérations. De plus, certains systèmes de fichiers étendent et redéfinissent la fonctionnalité VFS d'une manière familière orientée objet. Comme le souligne Robert Love, l'abstraction VFS permet aux utilisateurs de Linux de copier nonchalamment des fichiers vers ou depuis des systèmes d'exploitation tiers ou des entités abstraites comme des canaux sans se soucier de leur format de données interne. Du côté utilisateur (espace utilisateur), à l'aide d'un appel système, un processus peut copier d'un fichier vers des structures de données du noyau en utilisant la méthode read() un système de fichiers, puis utilisez la méthode write () un autre système de fichiers pour la sortie des données.

Les définitions de fonctions qui appartiennent aux types VFS de base se trouvent dans les fichiers fs/*.c code source du noyau, tandis que les sous-répertoires fs/ contiennent certains systèmes de fichiers. Le noyau contient également des entités telles que cgroups, /dev и tmpfs, qui sont nécessaires lors du processus de démarrage et sont donc définis dans le sous-répertoire du noyau init/. Remarquerez que cgroups, /dev и tmpfs ne pas appeler les "trois grandes" fonctions file_operations, mais lire et écrire directement dans la mémoire.
Le diagramme ci-dessous montre comment l'espace utilisateur accède aux différents types de systèmes de fichiers couramment montés sur les systèmes Linux. Ouvrages non représentés pipes, dmesg и POSIX clocks, qui implémentent également la structure file_operations, accessible via la couche VFS.

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

VFS est une "couche wrapper" entre les appels système et les implémentations de certains file_operationsComme ext4 и procfs. Les fonctions file_operations peut interagir avec les pilotes de périphériques ou les périphériques d'accès à la mémoire. tmpfs, devtmpfs и cgroups ne pas utiliser file_operations, mais accéder directement à la mémoire.
L'existence de VFS offre la possibilité de réutiliser le code, car les méthodes de base associées aux systèmes de fichiers n'ont pas à être réimplémentées par chaque type de système de fichiers. La réutilisation du code est une pratique courante chez les ingénieurs logiciels ! Cependant, si le code réutilisable contient erreurs graves, toutes les implémentations qui héritent des méthodes communes en souffrent.

/tmp : indice simple

Un moyen simple de détecter la présence de VFS sur un système consiste à taper mount | grep -v sd | grep -v :/, qui affichera tous les montés (mounted) des systèmes de fichiers qui ne résident pas sur le disque et qui ne sont pas NFS, ce qui est vrai sur la plupart des ordinateurs. L'un des supports répertoriés (mounts) VFS sera sans aucun doute /tmpc'est ça?

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Tout le monde sait que le stockage / tmp sur un support physique - folie ! Source.

Pourquoi n'est-il pas souhaitable de stocker /tmp sur support physique ? Parce que les fichiers dans /tmp sont temporaires et les périphériques de stockage sont plus lents que la mémoire où tmpfs est créé. De plus, les supports physiques sont plus susceptibles de s'user lorsqu'ils sont écrasés que la mémoire. Enfin, les fichiers dans /tmp peuvent contenir des informations sensibles, donc les faire disparaître à chaque redémarrage est une fonctionnalité essentielle.

Malheureusement, certains scripts d'installation de distribution Linux créent /tmp sur le périphérique de stockage par défaut. Ne désespérez pas si cela arrivait également à votre système. Suivez quelques instructions simples avec Arch Wikipour résoudre ce problème, et sachez que la mémoire allouée pour tmpfs devient indisponible à d'autres fins. En d'autres termes, un système avec un tmpfs géant et des fichiers volumineux dessus peut manquer de mémoire et planter. Autre indice : lors de l'édition d'un fichier /etc/fstab, rappelez-vous qu'il doit se terminer par une nouvelle ligne, sinon votre système ne démarrera pas.

/proc et /sys

en plus de /tmp, VFS (systèmes de fichiers virtuels) les plus familiers aux utilisateurs de Linux sont /proc и /sys. (/dev réside dans la mémoire partagée et n'a pas file_operations). Pourquoi ces deux composants ? Examinons ce problème.

procfs crée un instantané du noyau et des processus qu'il surveille userspace. la /proc le noyau imprime des informations sur ce dont il dispose, telles que les interruptions, la mémoire virtuelle et le planificateur. Outre, /proc/sys est l'endroit où se trouvent les paramètres configurés avec la commande sysctl, disponible pour userspace. L'état et les statistiques des processus individuels sont affichés dans des répertoires /proc/.

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

il est /proc/meminfo est un fichier vide qui contient pourtant des informations précieuses.

Comportement /proc files montre à quel point les systèmes de fichiers de disque VFS peuvent être différents. D'un côté, /proc/meminfo contiennent des informations qui peuvent être visualisées avec la commande free. Par contre, c'est vide ! Comment ça marche? La situation rappelle le célèbre article intitulé La lune existe-t-elle quand personne ne la regarde ? réalité et théorie quantique"écrit par David Mermin, professeur de physique à l'Université Cornell, en 1985. Le fait est que le noyau collecte des statistiques de mémoire lorsqu'une demande est faite à /proc, et en fait dans des fichiers /proc il n'y a rien quand personne ne regarde. Comme dit Mermin, "La doctrine quantique fondamentale dit que la mesure ne révèle généralement pas une valeur préexistante de la propriété mesurée." (Et considérez la question sur la lune comme un devoir !)
Vide apparent procfs logique parce que l'information y est dynamique. Une situation un peu différente avec sysfs. Comparons le nombre de fichiers d'au moins un octet dans /proc et /sys.

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Procfs a un seul fichier, à savoir la configuration du noyau exportée, qui est une exception car elle ne doit être générée qu'une seule fois par démarrage. D'autre part, dans /sys il existe de nombreux fichiers plus volumineux, dont beaucoup occupent une page entière de mémoire. Généralement des fichiers sysfs contiennent exactement un numéro ou une ligne, contrairement aux tableaux d'informations obtenus à partir de la lecture de fichiers tels que /proc/meminfo.

Objectif sysfs - fournit les propriétés de lecture/écriture de ce que le noyau appelle «kobjects» dans l'espace utilisateur. Le seul but kobjects est le comptage de références : lorsque la dernière référence à un kobject est supprimée, le système restaure les ressources qui lui sont associées. Néanmoins, /sys fait la plupart des célèbres "ABI stable pour l'espace utilisateur" noyau, que personne ne peut jamais, en aucune circonstance "casser". Cela ne signifie pas que les fichiers dans sysfs sont statiques, ce qui serait incompatible avec le comptage des références des objets instables.
L'ABI stable du noyau limite ce qui peut apparaître dans /sys, pas ce qui est réellement présent à ce moment particulier. La liste des autorisations de fichiers dans sysfs donne un aperçu de la façon dont les paramètres configurables pour les périphériques, les modules, les systèmes de fichiers, etc. peut être configuré ou lu. La conclusion logique est que procfs fait également partie de l'ABI stable du noyau, bien que cela ne soit pas explicitement indiqué dans documentation.

Systèmes de fichiers virtuels sous Linux : pourquoi sont-ils nécessaires et comment fonctionnent-ils ? Partie 1

Fichiers dans sysfs décrivent une propriété particulière pour chaque entité et peuvent être lisibles, inscriptibles ou les deux. "0" dans le fichier signifie que le SSD ne peut pas être retiré.

Commençons la deuxième partie de la traduction avec comment surveiller VFS à l'aide des outils eBPF et bcc, et maintenant nous attendons vos commentaires et vous invitons traditionnellement à webinaire ouvert, qui sera tenu par notre professeur le 9 avril - Vladimir Drozdetski.

Source: habr.com

Ajouter un commentaire