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
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".
Qu'est-ce qu'un système de fichiers ? Basé sur les mots de l'un des premiers contributeurs et auteurs de Linux
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
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
Les systèmes familiers tels que ext4, NFS et /proc ont trois fonctions importantes dans une structure de données C appelée 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/
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.
VFS est une "couche wrapper" entre les appels système et les implémentations de certains file_operations
Comme 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
/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 /tmp
c'est ça?
Tout le monde sait que le stockage / tmp
sur un support physique - folie !
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 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/
.
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é /proc
, et en fait dans des fichiers /proc
il n'y a rien quand personne ne regarde. Comme dit
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
.
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
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
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 à
Source: habr.com