Bonjour à tous! Nous continuons à lancer de nouveaux threads dans les cours que vous aimez déjà et sommes pressés de vous informer que nous commençons un nouvel ensemble au cours
Administrateur Linux , qui débutera fin avril. Une nouvelle publication sera programmée pour coïncider avec cet événement. Le matériel original peut être
trouvé ici .
Les systèmes de fichiers virtuels agissent comme une sorte d'abstraction magique qui permet à la philosophie 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,
Robert Love , "Un système de fichiers est un entrepôt de données hiérarchique, assemblé selon une structure spécifique." Quoi qu'il en soit, cette définition est tout aussi bien adaptée pour VFAT (Virtual File Allocation Table), Git et
Cassandra (
NoSQL Database ). Alors, qu'est-ce qui définit exactement un concept comme «système de fichiers»?
Principes de base du système de fichiersLe noyau Linux a des exigences spécifiques pour une entité qui peut être considérée comme un système de fichiers. Il doit implémenter les méthodes
open()
,
read()
et
write()
pour les objets persistants qui ont des noms. Du point de vue de la
programmation orientée
objet , le noyau définit un système de fichiers générique (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 spécifique. Par conséquent, l'implémentation par défaut du système de fichiers est appelée système de fichiers virtuel (VFS).

Si nous pouvons ouvrir, lire et écrire dans une entité, cette entité est considérée comme un fichier, comme nous le voyons dans l'exemple de la console ci-dessus.
Le phénomène VFS ne fait que souligner la caractéristique d'observation des systèmes de type Unix, qui déclare que «tout est un fichier». Pensez à quel point il est étrange que le petit exemple ci-dessus avec / dev / console montre comment la console fonctionne réellement. L'image montre une session Bash interactive. L'envoi d'une chaîne à la console (périphérique de console virtuelle) l'affiche sur un écran virtuel. VFS a d'autres propriétés encore plus étranges. Par exemple, il permet de les parcourir.
Les systèmes familiers comme ext4, NFS et / proc ont trois fonctions importantes dans la structure de données C appelées
file_operations . De plus, certains systèmes de fichiers étendent et redéfinissent les fonctions VFS de manière familière et orientée objet. Comme le note Robert Love, l'abstraction VFS permet aux utilisateurs Linux de copier légèrement des fichiers vers ou depuis des systèmes d'exploitation tiers ou des entités abstraites telles que des tuyaux sans se soucier de leur format de données interne. Côté utilisateur (espace utilisateur), à l'aide d'un appel système, un processus peut copier d'un fichier vers les structures de données du noyau à l'aide de la méthode
read()
d'un système de fichiers, puis utiliser la méthode
write()
d'un autre système de fichiers pour générer des données.
Les définitions de fonctions qui appartiennent aux types VFS de base se trouvent dans les fichiers
fs / *. C de la source du noyau, tandis que les sous
fs/
répertoires
fs/
contiennent des systèmes de fichiers spécifiques. Le noyau contient également des entités, telles que
cgroups
,
/dev
et
tmpfs
, qui sont requises pendant le processus de démarrage et sont donc définies dans le sous-répertoire
init/
kernel. Notez que
cgroups
,
/dev
et
tmpfs
n'appellent pas les trois grandes fonctions de
file_operations
, mais lisent et écrivent directement en mémoire.
Le diagramme ci-dessous montre comment l'espace utilisateur accède aux différents types de systèmes de fichiers généralement montés sur les systèmes Linux. Les constructions telles que les
pipes
,
POSIX clocks
dmesg
et
POSIX clocks
, qui implémentent également la structure
file_operations
, dont l'accès passe par la couche VFS, ne sont pas représentées.

VFS est la «couche shell» entre les appels système et les implémentations de certaines opérations de
file_operations
, telles que
ext4
et
procfs
. Les fonctions
file_operations
peuvent interagir avec les pilotes de périphérique ou les périphériques d'accès à la mémoire.
tmpfs
,
devtmpfs
et
cgroups
n'utilisent pas les opérations de
file_operations
, mais accèdent 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 besoin d'être réimplémentées par chaque type de système de fichiers. La réutilisation du code est une pratique largement acceptée pour les ingénieurs logiciels! Cependant, si le code réutilisable contient de
graves erreurs , toutes les implémentations qui héritent des méthodes courantes en souffrent.
/ tmp: indice simpleUn moyen simple de détecter la présence de VFS sur le système consiste à saisir
mount | grep -v sd | grep -v :/
mount | grep -v sd | grep -v :/
mount | grep -v sd | grep -v :/
, qui affichera tous les systèmes de fichiers montés qui ne résident pas sur le disque et non NFS, ce qui est vrai sur la plupart des ordinateurs. L'un des supports VFS répertoriés ci-dessus sera sans aucun doute
/tmp
, non?

Tout le monde sait que stocker
/tmp
sur un support physique est fou!
SourcePourquoi est-il indésirable de stocker
/tmp
sur un support physique? Parce que les fichiers dans
/tmp
sont temporaires et que les périphériques de stockage sont plus lents que la mémoire dans laquelle tmpfs est créé. De plus, les supports physiques sont plus sensibles à l'écrasement que la mémoire. Enfin, les fichiers dans / tmp peuvent contenir des informations sensibles, donc leur disparition à chaque redémarrage est une fonction intégrale.
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 arrive à votre système. Suivez quelques instructions simples du
Wiki Arch pour résoudre ce problème, et rappelez-vous que la mémoire allouée aux
tmpfs
devient inaccessible à d'autres fins. En d'autres termes, un système contenant des tmpfs géants et de gros fichiers peut manquer de mémoire et se bloquer. Autre conseil: lors de l'édition du
/etc/fstab
, n'oubliez pas qu'il doit se terminer par une nouvelle ligne, sinon votre système ne démarrera pas.
/ proc et / sysEn plus de
/tmp
, les VFS (systèmes de fichiers virtuels) que les utilisateurs Linux connaissent le mieux sont
/proc
et
/sys
. (
/dev
se trouve dans la mémoire partagée et n'a pas d'opérations sur les
file_operations
). Pourquoi exactement ces deux composants? Examinons cette question.
procfs
prend un instantané du noyau et des processus qu'il surveille pour l'
userspace
. Dans
/proc
noyau affiche des informations sur les outils dont il dispose, par exemple les interruptions, la mémoire virtuelle et le planificateur. De plus,
/proc/sys
est l'endroit où les options configurées avec la commande
sysctl
sont disponibles pour l'
userspace
. L'état et les statistiques des processus individuels sont affichés dans les
/proc/
.

Ici
/proc/meminfo
est un fichier vide qui contient néanmoins des informations précieuses.
Le comportement des fichiers
/proc
montre à quel point les systèmes de fichiers sur disque VFS peuvent être différents. D'une part,
/proc/meminfo
contient des informations qui peuvent être consultées avec la commande
free
. Par contre, c'est vide là-bas! Comment est-ce? La situation ressemble à un célèbre article intitulé
«La lune existe-t-elle lorsque personne ne la regarde?» Reality and Quantum Theory », écrit par le professeur de physique de l'Université Cornell, David Mermin, en 1985. Le fait est que le noyau collecte des statistiques de mémoire lorsqu'une demande est faite à
/proc
, et en fait il n'y a rien dans les fichiers
/proc
quand personne n'y regarde. Comme l'a dit
Mermin , "La doctrine quantique fondamentale stipule que la mesure, en règle générale, ne révèle pas la valeur préexistante de la propriété mesurée." (Pensez à la question de la lune comme devoirs!)
Le vide apparent des
procfs
est logique, car les informations y sont dynamiques. Une situation légèrement différente avec
sysfs
. Comparons le nombre de fichiers d'au moins un octet dans
/proc
et
/sys
.

Procfs
a un fichier, à savoir la configuration du noyau exporté, ce qui est une exception car il ne doit être généré qu'une seule fois par démarrage.
/sys
d'autre part, contient beaucoup plus de fichiers volumineux, dont beaucoup occupent une page entière de mémoire. En règle générale, les fichiers
sysfs
contiennent exactement un numéro ou une ligne, contrairement aux tableaux d'informations obtenus en lisant des fichiers tels que
/proc/meminfo
.
Le but de
sysfs
est de fournir des propriétés lisibles et
«kobjects»
de ce que le noyau appelle
«kobjects»
dans l'espace utilisateur. Le seul but des
kobjects
est de compter les liens: lorsque le dernier lien vers kobject est supprimé, le système restaure les ressources qui lui sont associées. Cependant,
/sys
constitue l'essentiel du fameux noyau
"ABI stable pour l'espace utilisateur" , que personne ne peut, en aucun cas
, casser . Cela ne signifie pas que les fichiers dans sysfs sont statiques, ce qui contredirait le comptage des liens vers des objets instables.
L'interface d'application du noyau stable d'un noyau (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 permet de comprendre comment les paramètres configurables pour les périphériques, modules, systèmes de fichiers, etc. peut être personnalisé ou lu. Nous concluons que procfs fait également partie du noyau ABI stable, bien que cela ne soit pas explicitement indiqué dans la
documentation .

Les fichiers dans
sysfs
décrivent une propriété spécifique pour chaque entité et peuvent être lisibles, réinscriptibles ou les deux à la fois. Un «0» dans le fichier indique que le SSD ne peut pas être supprimé.
Nous commençons la
deuxième partie de la traduction par la façon d'observer VFS à l'aide des outils eBPF et bcc, et maintenant nous attendons vos commentaires et vous invitons traditionnellement au
webinaire ouvert , qui sera organisé par notre professeur
Vladimir Drozdetsky le 9 avril.
La deuxième partie.