Le système de fichiers Linux est un composant essentiel du système d'exploitation, et son mécanisme d'exploitation est ce que nous, les programmeurs, devons comprendre et maîtriser. Le disque fournit le stockage persistant le plus élémentaire pour le système, et le système de fichiers fournit tous les fichiers du système. La base du disque. Sous Linux, tout est un fichier. Non seulement les fichiers et répertoires ordinaires, mais également les périphériques de bloc, les sockets, les canaux, etc., doivent être gérés via un système de fichiers unifié. Aujourd'hui, nous allons parler ensemble : Comment fonctionnent les disques et les systèmes de fichiers ?
Nœuds d'indexation et entrées de répertoire
Dans le système de fichiers Linux, les métadonnées d'un fichier comprennent : les entrées de répertoire, les nœuds d'index et les blocs de données.
- Entrée de répertoire : appelée dentry, utilisée pour enregistrer le nom du fichier, le pointeur du nœud d'index et l'association avec d'autres entrées de répertoire. Plusieurs entrées de répertoire associées constituent la structure de répertoires du système de fichiers. Une entrée de répertoire est une structure de données en mémoire maintenue par le noyau, c'est pourquoi elle est souvent appelée cache d'entrées de répertoire (Cache).
- Nœud d'index : appelé inode, utilisé pour enregistrer les métadonnées du fichier, y compris le numéro d'inode, la taille du fichier, les autorisations d'accès, la date de modification, l'emplacement des données, le nombre de liens, etc. Les informations du nœud d'index seront conservées sur le disque pour le stockage, occupant l'espace disque.
- Bloc de données : appelé bloc, où les données du fichier sont stockées. La plus petite unité de stockage d'un disque s'appelle un secteur. Chaque secteur stocke 512 octets, ce qui équivaut à 0,5 Ko. Lorsque le système d'exploitation lit le disque dur, il ne le lit pas secteur par secteur, ce qui est trop inefficace, mais. lit plusieurs secteurs en continu à la fois, c'est-à-dire lit un « bloc » à la fois. Ce « bloc » composé de plusieurs secteurs est la plus petite unité d'accès aux fichiers. Taille du "bloc", la plus courante est de 4 Ko (huit secteurs).
Afin d'accélérer l'accès aux fichiers, les nœuds d'index sont généralement chargés en mémoire et le disque dur est divisé en trois zones de stockage : super bloc, zone de nœud d'index et zone de bloc de données une fois formaté.
- Le super bloc est utilisé pour stocker des informations détaillées sur le système de fichiers, telles que le nombre de blocs, la taille des blocs, les blocs libres, etc.
- Zone de nœud d'index, utilisée pour stocker les nœuds d'index.
- Zone de bloc de données, utilisée pour stocker les données d'un fichier ou d'un répertoire.
Système de fichiers virtuel
Le système de fichiers virtuel (VFS, Virtual File System) du système Linux est une couche d'abstraction clé qui fournit aux utilisateurs et aux applications une interface de système de fichiers cohérente, leur permettant d'accéder à différents types de systèmes de fichiers de manière unifiée. devez vous soucier des détails d’implémentation du système de fichiers sous-jacent.
Le programme utilisateur et la bibliothèque glibc appartiennent à l'espace utilisateur, et les opérations sur les fichiers sont effectuées en appelant des fonctions de la couche d'appel système (SCI). Ces fonctions sont des interfaces fournies par le noyau Linux permettant aux utilisateurs de demander des opérations au système. Par exemple, la commande cat du système appellera la fonction open() pour ouvrir le fichier, puis appellera la fonction read() pour lire le contenu du fichier, et enfin appellera la fonction write() pour afficher le contenu du fichier sur la console. . Les types de systèmes de fichiers courants peuvent être divisés en plusieurs grandes catégories.
- Basé sur le disque local : EXT3, EXT4, XFS, OverlayFS, etc. La caractéristique de ce type de système de fichiers est que les données sont directement stockées sur le disque monté localement sur l'ordinateur, avec de bonnes performances et aucune consommation d'accès aux E/S réseau.
- Basé sur les systèmes de fichiers réseau : NFS, CIFS/SMB, CephFS, GlusterFS, etc. La caractéristique de ce type de fichiers est qu'ils permettent aux utilisateurs d'accéder et de gérer des fichiers via le réseau. La distribution, la multiplateforme, la flexibilité et l'évolutivité sont leurs plus grands avantages.
- Systèmes de fichiers basés sur la mémoire : tmpfs, ramfs, /proc, etc. Ces systèmes de fichiers basés sur la mémoire sont généralement utilisés à des fins spécifiques, telles que le stockage de fichiers temporaires, la mise en cache, l'accès rapide aux données, etc. Ils fournissent une solution hautes performances pour lire et écrire des fichiers en mémoire, mais ils doivent également être conscients des limitations de la mémoire et de la volatilité des données.
E/S de fichier
Nous partitionnons et formatons le disque afin de créer différents types de systèmes de fichiers, qui doivent être montés dans des répertoires spécifiques sur le VFS de Linux avant de pouvoir être utilisés par le système. Il existe différents types d'E/S pour les opérations de lecture et d'écriture de fichiers, et le programme d'application choisit la méthode appropriée en fonction des besoins.
E/S tamponnées ou non tamponnées
- Ce qu'on appelle l'absence de mise en mémoire tampon ne signifie pas que le noyau ne fournit pas de mise en mémoire tampon, mais uniquement de simples appels système, pas des appels de bibliothèque de fonctions. Le noyau système fournit un tampon de bloc pour la lecture et l'écriture sur le disque. Lorsque vous utilisez la fonction d'écriture pour y écrire des données, l'appel système est directement appelé pour écrire les données dans le tampon de bloc et les mettre en file d'attente lorsque le tampon de bloc atteint un. certaine quantité, le tampon de bloc sera mis en file d'attente. Les données sont écrites sur le disque. Par conséquent, les E/S dites non tamponnées signifient que le processus ne fournit pas de fonction de mise en mémoire tampon. Chaque fois que la fonction d'écriture ou de lecture est appelée, elle est appelée directement par le système. (Tamponné par le noyau).
- E/S tamponnées signifie que le processus améliore les flux d'entrée et de sortie et fournit un tampon de flux. Lorsque vous utilisez la fonction d'écriture pour écrire des données, les données sont d'abord écrites dans le tampon de flux. Lorsque certaines conditions sont atteintes, telles que le tampon de flux étant plein, les données seront immédiatement envoyées au tampon de bloc fourni par le noyau, et. puis écrit via le tampon de bloc sur le disque. (double mise en mémoire tampon)
- Par conséquent, les E/S tamponnées nécessiteront moins d’appels système que les E/S non tamponnées lors de l’écriture de la même quantité de données sur le disque.
E/S directes et E/S indirectes
- E/S directes : le programme d'application accède directement aux données du disque sans passer par le tampon du noyau. Le but est de réduire la copie des données du tampon du noyau vers le cache du programme utilisateur.
- E/S indirectes : lorsque des fichiers sont lus ou écrits, ils doivent d'abord passer par le cache de pages du système, puis être écrits sur le disque par le noyau ou des appels système supplémentaires.
- Pour les E/S directes, si les données accédées ne sont pas dans le cache de l'application, alors les données seront chargées directement depuis le disque à chaque fois, et l'efficacité de ce chargement direct sera plus lente. Cependant, pour les applications telles que les systèmes de gestion de bases de données, ils sont plus susceptibles de choisir leur propre mécanisme de mise en cache, car les systèmes de gestion de bases de données connaissent souvent mieux les données stockées dans la base de données que le système d'exploitation et les E/S directes sont plus appropriées.
E/S bloquantes et E/S non bloquantes
- Blocage des E/S : le processus d'application se bloque lors de l'appel d'une opération d'E/S. Il ne revient qu'après avoir attendu que les données à opérer soient préparées et copiées dans le tampon du processus d'application. Les caractéristiques sont les suivantes : une faible difficulté de mise en œuvre, un développement d'applications facile et adapté au développement d'applications réseau avec une faible concurrence.
- E/S non bloquantes : signifie qu'une fois que l'application a effectué une opération d'E/S, elle ne bloquera pas le thread actuel et pourra continuer à effectuer d'autres tâches, puis obtenir le résultat de l'appel via une interrogation ou une notification d'événement. Les caractéristiques sont : relativement complexes. Convient au développement d'applications réseau qui ont une faible concurrence et ne nécessitent pas de réponse rapide
E/S synchrones et asynchrones
- E/S synchrones : signifie qu'une fois que l'application a effectué une opération d'E/S, elle doit attendre que l'intégralité de l'E/S soit terminée avant de pouvoir obtenir la réponse d'E/S.
- E/S asynchrones : signifie qu'une fois que l'application a effectué l'opération d'E/S, elle n'a pas besoin d'attendre la fin ni la réponse une fois terminée, mais peut continuer à s'exécuter. Une fois cette E/S terminée, la réponse sera notifiée à l'application sous la forme d'une notification d'événement.
Quelques connaissances générales sur les fichiers
Il reste encore beaucoup d'espace restant sur le disque et l'espace est insuffisant pour les nouveaux fichiers et répertoires.
- Idées de dépannage : il y a une forte probabilité qu'il y ait trop de petits fichiers et que les inodes soient épuisés. Vous pouvez utiliser df -i.
Les statistiques d'utilisation du disque dur entre du et df sont incohérentes.
- du compte la taille de chaque fichier enregistré par le système de fichiers, puis accumule la taille totale, obtenue via le système de fichiers. df lit principalement les informations sur l'utilisation du disque dur à partir du superbloc (superbloc). Ce que df obtient, c'est l'utilisation des blocs de disque. Cette situation est susceptible de se produire car un fichier a été supprimé, mais un autre processus l'utilise (possédant le handle), qui peut être trouvé via lsof | grep delete. Lorsque le processus s'arrête ou est interrompu, ces espaces seront libérés.
Lorsque nous interrogeons la capacité du disque, pourquoi la taille de Used+Avail est-elle toujours inférieure à la capacité totale (SIze).
- Afin d'éviter les situations d'urgence, le système de fichiers ext Linux réservera une partie de l'espace disque. La valeur réservée spécifique peut être consultée via tune2fs -l [dev_name] | grep "Reserved block count (dev_name)" est le nom du périphérique. , qui est réservé ici, l'espace sera calculé par df dans l'espace utilisé, ce qui entraînera des statistiques incohérentes entre df et du. Si vous devez ajuster la taille de l'espace réservé, nous pouvons utiliser tune2fs -m [size] [dev_name] pour effectuer des ajustements.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!