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

Bonjour à tous ! Nous continuons le lancement de nouveaux flux pour les cours que vous aimez déjà et nous sommes ravis de vous annoncer qu'un nouveau semestre pour le cours « Administrateur Linux », qui débutera à la fin avril. Cet événement sera accompagné d'une nouvelle publication. Vous pouvez consulter l'original du matériel ici.

Les systèmes de fichiers virtuels jouent le rôle d'une sorte d'abstraction magique, permettant à la philosophie 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 ? En se basant sur les mots de l'un des premiers contributeurs et auteurs de Linux, Robert Love, « Un système de fichiers est un stockage hiérarchique de données organisé selon une certaine structure ». Quoi qu'il en soit, cette définition convient également pour VFAT (Virtual File Allocation Table), Git et Cassandra (base de données NoSQL). Alors qu'est-ce qui définit un concept comme « système de fichiers » ?

Les bases du système de fichiers

Le noyau Linux a des exigences spécifiques pour une entité pouvant être considérée comme un système de fichiers. Elle doit implémenter les méthodes open(), read() et write() pour des objets permanents ayant des noms. Du point de vue de la programmation orientée objet, le noyau définit un système de fichiers générique (generic filesystem) comme une interface abstraite, et ces trois grandes fonctions sont considérées comme « virtuelles » et sans définition précise. En conséquence, l'implémentation par défaut d'un système de fichiers est appelée système de fichiers virtuel (VFS).Si nous pouvons ouvrir, lire et écrire dans une entité, alors cette entité est considérée comme un fichier, comme nous le voyons dans l'exemple ci-dessus.

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

Le phénomène VFS souligne seulement l'observation caractéristique des systèmes de type Unix qui stipule que « tout est un fichier ». Pensez à quel point il est étrange que ce petit exemple ci-dessus avec /dev/console montre comment la console fonctionne réellement. L'image présente une session interactive Bash. L'envoi d'une ligne à la console (virtual console device) l'affiche sur l'écran virtuel. VFS a d'autres propriétés encore plus étranges. Par exemple, il permet d'effectuer des recherches dans
eux Les systèmes que nous connaissons, tels que ext4, NFS et /proc ont trois fonctions importantes dans la structure de données C qui s'appelle.

Les systèmes que nous connaissons, tels que ext4, NFS et /proc, ont trois fonctions importantes dans la structure de données C, appelée file_operations. De plus, certains systèmes de fichiers étendent et redéfinissent les fonctionnalités de VFS de manière orientée objet. Comme l'indique Robert Love, l'abstraction VFS permet aux utilisateurs de Linux de copier sans souci des fichiers vers ou depuis des systèmes d'exploitation tiers ou des entités abstraites, comme des pipes, sans se soucier de leur format de données interne. Du côté utilisateur (userspace), le processus peut transférer des données du fichier vers les structures de données du noyau via l'appel système read() d'un système de fichiers, puis utiliser la méthode write () d'un autre système de fichiers pour sortir les données.

Les définitions des fonctions rattachées aux types de base VFS se trouvent dans les fichiers fs/*.c du code source du noyau, tandis que les sous-répertoires fs/ contiennent des systèmes de fichiers spécifiques. Le noyau contient également des entités telles que cgroups, /dev et tmpfs, requises pendant le processus de chargement et donc définies dans le sous-répertoire du noyau init/. Notez que cgroups, /dev et tmpfs ils n'appellent pas les « grandes trois » fonctions file_operations, mais lisent et écrivent directement en mémoire.
Le diagramme ci-dessous montre comment le userspace accède aux différents types de systèmes de fichiers généralement montés dans les systèmes Linux. Des structures comme pipes, dmesg et horloges POSIX, qui mettent également en œuvre la structure file_operations, dont l'accès se fait à travers 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 intermédiaire » entre les appels système et les mises en œuvre de systèmes de fichiers spécifiques file_operations, tels que ext4. et de l'hôte dans le conteneur sous forme de chemins dans sonLes fonctions file_operations peuvent interagir soit avec des pilotes de périphériques, soit avec des dispositifs d'accès à la mémoire. tmpfs, devtmpfs et cgroups n'utilisent pas file_operations, mais accèdent directement à la mémoire.
L'existence de VFS permet la réutilisation du code, car les méthodes de base liées aux systèmes de fichiers n'ont pas besoin d'être réimplanté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éutilisé contient des erreurs graves, toutes les mises en œuvre qui héritent des méthodes communes en souffriront.

/tmp: Простая подсказка

Une façon simple de vérifier si VFS est présent dans le système est de saisir mount | grep -v sd | grep -v :/, ce qui affichera tous les systèmes de fichiers montés (mounted) qui ne résident pas sur le disque et ne sont pas NFS, ce qui est vrai pour la plupart des ordinateurs. L'un des montages énumérés (mounts) VFS sera sans aucun doute /tmp, n'est-ce pas ?

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 est de la folie ! Source.

Pourquoi est-il déconseillé de stocker /tmp sur un support physique ? Parce que les fichiers dans /tmp sont temporaires, et les dispositifs de stockage sont plus lents que la mémoire où est créé tmpfs. De plus, les supports physiques s'usent plus rapidement lors de réécritures que la mémoire. Enfin, les fichiers dans /tmp peuvent contenir des informations sensibles, donc leur disparition à chaque redémarrage est une fonction essentielle.

Malheureusement, certains scripts d'installation de distributions Linux créent /tmp sur le périphérique de stockage par défaut. Ne désespérez pas si cela est arrivé à votre système. Suivez quelques instructions simples sur Arch Wiki, pour corriger cela, et rappelez-vous que la mémoire allouée à tmpfs deviendra indisponible pour d'autres fins. En d'autres termes, un système avec un énorme tmpfs et de gros fichiers peut épuiser toute la mémoire et planter. Un autre conseil : lors de l'édition du fichier /etc/fstab, gardez à l'esprit qu'il doit se terminer par une nouvelle ligne, sinon votre système ne démarrera pas.

/proc и /sys

En plus de /tmp, VFS (systèmes de fichiers virtuels), qui sont les plus familiers aux utilisateurs de Linux, se trouve /proc et /sys. (/dev dans la mémoire partagée et n'a pas file_operations). Pourquoi ces deux composants en particulier ? Examinons cette question de plus près.

de l'hôte dans le conteneur sous forme de chemins dans son crée un instantané de l'état du noyau et des processus qu'il contrôle pour userspace. Il y a /proc le noyau fournit des informations sur les ressources dont il dispose, comme les interruptions, la mémoire virtuelle et le planificateur. En outre, /proc/sys est l'endroit où les paramètres configurés via la commande sysctl, sont accessibles à userspace. L'état et les statistiques des processus individuels sont affichés dans les répertoires /proc/.

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

Ici /proc/meminfo — est un fichier vide, mais qui contient néanmoins des informations précieuses.

Le comportement /proc des fichiers montre à quel point les systèmes de fichiers VFS peuvent être différents. D'une part, /proc/meminfo contiennent des informations qui peuvent être consultées par la commande free. D'autre part, il n'y a rien ! Comment est-ce possible ? 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 le professeur de physique de l'université Cornell, David Mermin, en 1985. En fait, le noyau collecte des statistiques de mémoire lorsqu'il y a une demande. /proc, et en réalité, il n'y a rien dans les fichiers /proc quand personne ne regarde. Comme l'a dit Mermin, « La doctrine quantique fondamentale indique que la mesure ne révèle généralement pas une valeur préexistante de la propriété mesurée. » (Et pensez à la question sur la lune comme devoir à la maison !)
Le vide apparent de l'hôte dans le conteneur sous forme de chemins dans son a du sens car les informations qui s'y trouvent sont dynamiques. La situation est un peu différente avec sysfs. Comparons combien de fichiers de taille d'au moins un octet se trouvent dans /proc et dans /sys.

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

Procfs qui a un fichier, à savoir la configuration exportée du noyau, qui est une exception car elle n'a besoin d'être générée qu'une seule fois par démarrage. En revanche, dans /sys se trouvent de nombreux fichiers plus volumineux, dont beaucoup occupent une page entière de mémoire. En général, les fichiers sysfs contiennent exactement un nombre ou une chaîne, contrairement aux tableaux d'informations obtenues lors de la lecture de fichiers tels que /proc/meminfo.

L'objectif sysfs est de fournir des propriétés lisibles et modifiables de ce que le noyau appelle «kobjects» dans l'espace utilisateur. L'unique objectif des kobjects est le comptage de références : lorsque la dernière référence à un kobject est supprimée, le système récupérera les ressources qui y sont liées. Cependant, /sys constitue la majeure partie du célèbre «stable ABI pour l'espace utilisateur» du noyau, que personne ne peut jamais «casser». Cela ne signifie pas que les fichiers dans sysfs sont statiques, ce qui contredirait le comptage de références sur des objets instables.
L'interface binaire stable des applications du noyau (stable ABI du noyau) limite ce qui peut apparaître dans /sys, et non ce qui est réellement présent à un moment donné. La liste des autorisations des fichiers dans sysfs permet de comprendre comment les paramètres configurables des dispositifs, des modules, des systèmes de fichiers, etc., peuvent être configurés ou lus. On peut en déduire que procfs est également une partie de l'ABI stable du noyau, bien que cela ne soit pas explicitement mentionné dans documentation.

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

Les fichiers dans sysfs décrivent une propriété spécifique pour chaque entité et peuvent être lisibles, réécrits ou les deux à la fois. « 0 » dans un fichier indique que le SSD ne peut pas être supprimé.

Nous commencerons la deuxième partie de la traduction par la manière d'observer le VFS à l'aide des outils eBPF et bcc, et nous attendons maintenant vos commentaires et vous invitons traditionnellement à un webinaire ouvert, qui sera animé par notre enseignant le 9 avril — Vladimir Drozdetski.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster