


Commencez avec lsof et acquérez une compréhension approfondie des systèmes de fichiers virtuels Linux
Contexte
<code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;"><span style="font-size: 15px;">df</span>
df commande pour vérifier l'utilisation du disque et a constaté que le disque est plein. -bash-4.2$ df -ThFilesystem Type Size Used Avail Use% Mounted on/dev/vda1 ext4 30G 30G 0 100% /devtmpfs devtmpfs 489M 0 489M 0% /devtmpfs tmpfs 497M 0 497M 0% /dev/shmtmpfs tmpfs 497M 50M 447M 11% /runtmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
2. Exécutez la commande du pour vérifier l'utilisation du disque de chaque répertoire, additionnez les tailles des fichiers dans chaque répertoire et constatez que le disque n'est pas occupé et plus de 10 Go d'espace. manque inexplicablement.
-bash-4.2$ du -h --max-depth=1 /home16M /home/logs11G /home/serverdog11G /home
🎜
<span style="font-size: 15px;">lsof</span>
命令显示打开已删除的文件。将有问题的进程重启(或,清空),磁盘空间就会得到释放。-bash-4.2# lsof | grep deletemysqld 2470 mysql 4u REG 253,1 0 523577 /var/tmp/ibfTeQFn (deleted)mysqld 2470 mysql 5u REG 253,1 0 523579 /var/tmp/ibaHcIdW (deleted)mysqld 2470 mysql 6u REG 253,1 0 523581 /var/tmp/ibLjiALu (deleted)mysqld 2470 mysql 7u REG 253,1 0 523585 /var/tmp/ibCFnzTB (deleted)mysqld 2470 mysql 11u REG 253,1 0 523587 /var/tmp/ibCjuqva (deleted)
什么是虚拟文件系统(VFS:virtual filesystem)?
什么是通用文件模型?
超级块对象(superblock object)
索引节点对象(inode object)
文件对象(file object)
目录项对象(dentry object)
文件的概念
文件的表达
内存表达
磁盘表达
目录树的构建
Lien logiciel vs lien physiqueOuvrir et supprimer
- Système de fichiers virtuel
- La figure suivante montre les composants de base responsables de la gestion des fichiers dans le système d'exploitation Linux. La moitié supérieure est le mode utilisateur et la moitié inférieure est le mode noyau. Les applications utilisent la bibliothèque standard libc pour accéder aux fichiers, et la bibliothèque mappe les requêtes aux appels système afin de passer en mode noyau.
Le point d'entrée pour toutes les opérations liées aux fichiers est le système de fichiers virtuel (VFS), et non un système de fichiers spécifique (tel que Ext3, ReiserFS et NFS). VFS fournit une interface entre les bibliothèques système et des systèmes de fichiers spécifiques. Par conséquent, VFS agit non seulement comme une couche d’abstraction, mais fournit en fait une implémentation de base d’un système de fichiers qui peut être utilisé et étendu par différentes implémentations. Par conséquent, pour comprendre le fonctionnement du système de fichiers, vous devez d’abord comprendre VFS. Modèle de fichier commun
L'idée principale de VFS est d'introduire un modèle de fichier commun. Le modèle de fichier général se compose des types d'objets suivants : objet superbloc
Mémoire : créée lors de l'installation du système de fichiers, stockant les informations pertinentes sur le système de fichiers
Disque : correspond aux informations stockées sur le disque Bloc de contrôle du système de fichiers (bloc de contrôle du système de fichiers)Objet Inode (objet inode)
Mémoire : Créée lors de l'accès, stocke des informations générales sur des fichiers spécifiques (
inode 结构
)
Disque : Correspond au stockage sur disque Contrôle de fichier block on
Chaque objet inode a un numéro d'inode qui identifie de manière unique le fichier dans le système de fichiersObjet fichier (objet fichier)
Mémoire : créée lors de l'ouverture d'un fichier, stockant des informations sur l'interaction entre le fichier ouvert et le processus (
structure du fichier< /code >) <code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;">file 结构
)
打开文件信息,仅当进程访问文件期间存在于内核内存中。目录项对象(dentry object)
内存:目录项一旦被读入内存,VFS就会将其转换成
dentry 结构
Les informations sur le fichier ouvert existent dans la mémoire du noyau uniquement pendant que le processus accède au fichier.Objet Dentry
Mémoire : Une fois l'entrée du répertoire lue en mémoire, VFS la convertira en
Stocke des informations sur le lien entre une entrée de répertoire (c'est-à-dire le nom de fichier) et le fichier correspondant 🎜🎜🎜🎜 Arborescence des répertoires 🎜🎜🎜🎜 En résumé, le système de fichiers racine de Linux (système de fichiers racine du système) est le premier système de fichiers que le noyau commence à monter. Le fichier image du code du noyau est stocké dans le système de fichiers racine et le programme de démarrage du système chargera certains scripts et services d'initialisation de base dans la mémoire pour s'exécuter une fois le système de fichiers racine monté (le système de fichiers et le noyau sont deux parties complètement indépendantes). ). D'autres systèmes de fichiers sont ensuite installés en tant que sous-systèmes de fichiers sur le répertoire dans lequel le système de fichiers est installé via des scripts ou des commandes, formant finalement l'arborescence de répertoires entière. 🎜🎜dentry structure
Objet d'entrée de répertoire Disque : Un système de fichiers spécifique est stocké sur le disque d'une manière spécifiquestart_kernel vfs_caches_init mnt_init init_rootfs // 注册rootfs文件系统 init_mount_tree // 挂载rootfs文件系统 … rest_init kernel_thread(kernel_init, NULL, CLONE_FS);
Copier après la connexion就单个文件系统而言,在文件系统安装时,创建超级块对象;沿树查找文件时,总是首先从初识目录的中查找匹配的目录项,以便获取相应的索引节点,然后读取索引节点的目录文件,转化为dentry对象,再检查匹配的目录项,反复执行以上过程,直至找到对应的文件的索引节点,并创建索引节点对象。 软链接 vs 硬链接
软链接是一个普通的文件,其中存放的是另外一个文件的路径名。硬链接则指向同一个索引节点,硬链接数记录在索引节点对象的 i_nlink 字段。当 <span style="font-size: 15px;color: rgb(68, 68, 68);">i_nlink</span>
字段为零时,说明没有硬链接指向该文件。文件 & 进程管理
下图是一个简单示例,说明进程是怎样与文件进行交互。三个不同进程打开同一个文件,每个进程都有自己的文件对象,其中两个进程使用同一个硬链接(每个硬链接对应一个目录对象),两个目录项对象都指向同一个 索引节点对象。 索引节点的数据又由两部分组成:内存数据和磁盘数据。Linux 使用 Write back 作为索引节点的数据一致性策略。对于索引节点的数据,当文件被打开时,才会加载索引节点到内存;当不再被进程使用,则从内存踢出;如果中间有更新,则需要把数据写回磁盘。 * "in_use" - valid inode, i_count > 0, i_nlink > 0* "dirty" - as "in_use" but also dirty* "unused" - valid inode, i_count = 0
Copier après la connexionLe fait que le nœud d'index soit toujours utilisé est déterminé par <code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;"><span style="font-size: 15px;">open()</span>
和<span style="font-size: 15px;">close()</span>
操作建立和销毁文件对象,文件对象通过索引节点提供的<span style="font-size: 15px;">iget</span>
和<span style="font-size: 15px;">iput</span>
更新索引节点的i_count字段,以完成使用计数。open 操作使得 i_count 加一, close 操作使得 i_count 减一。在 close 操作时判断索引节点是否释放,如果 i_count = 0,则意味着不再有进程引用,将会从内存释放。文件 & 磁盘管理
文件与磁盘管理联系最紧密的操作,莫过于
<span style="font-size: 15px;">touch</span>
和<span style="font-size: 15px;">rm</span>
close( ) L'opération crée et détruit l'objet fichier. L'objet fichier est fourni via le nœud d'index🎜iget🎜
🎜 et 🎜🎜iput🎜
🎜 Mettez à jour le champ i_count du nœud d'index pour compléter le décompte d'utilisation. L'opération d'ouverture augmente i_count de un et l'opération de fermeture diminue i_count de un. Déterminez si le nœud d'index est libéré lors de l'opération de fermeture. Si i_count = 0, cela signifie qu'il n'y a plus de référence de processus et il sera libéré de la mémoire. 🎜🎜Gestion des fichiers et des disques🎜
🎜Fichier L'opération la plus étroitement liée à la gestion des disques est 🎜
🎜touch🎜
🎜 et 🎜🎜rm🎜
🎜 opération, c'est surtout ce dernier qui est le plus critique. Utilisez strace (ou dtruss) pour afficher l'appel système réel de rm🎜🎜# dtruss rm tmp...geteuid(0x0, 0x0, 0x0) = 0 0ioctl(0x0, 0x4004667A, 0x7FFEE06F09C4) = 0 0lstat64("tmp\0", 0x7FFEE06F0968, 0x0) = 0 0access("tmp\0", 0x2, 0x0) = 0 0unlink("tmp\0", 0x0, 0x0) = 0 0
Copier après la connexion可以发现 rm 实际是通过 unlink 完成的。unlink代表删除目录项,以及减少其索引节点的计数。由通用文件模型可知,父目录本身同样是一个文件,也就意味着目录项是其文件数据的一部分。删除目录项等价于从父目录的文件中删除数据,也就意味着首先要打开父目录的文件。那么,删除操作即可理解为:
删除命令(一个进程)使用 open 操作获得父目录文件对象
通过
<span style="font-size: 15px;color: rgb(68, 68, 68);">iget</span>
增加 目录文件的索引节点对象计数读取目录文件数据
将目录文件数据转化为目录项对象
由于目录项包含文件的索引节点,类似的,需要通过 iget 增加文件的索引节点对象计数
删除目录的目录项
减少文件索引节点对象的硬链接计数i_nlink
通过
<span style="font-size: 15px;color: rgb(68, 68, 68);">iput</span>
结束对文件索引节点对象的操作,使用计数 i_count 减一判断i_count是否为零,如果为零,则释放内存
然后,判断i_nlink是否为零,如果为零,则释放磁盘空间
通过 iput 结束对目录索引节点对象的操作。
Résumé
En regardant les problèmes rencontrés, nous pouvons en fait les comprendre sous deux angles :
Index et données
Système de fichiers et fichiers, gestion des disques et fichiers, gestion des processus et fichiers, l'essentiel est l'index du fichier, pas les données du fichier. La séparation des données et des index est essentielle pour comprendre les systèmes de fichiers. Stratégie de mise en cache
Étant donné que le système d'exploitation utilise la stratégie Write back, cela signifie que le disque ne peut être libéré que si la mémoire est libérée en premier.
Pourquoi lsof ?
Cela peut être clairement compris à partir du modèle ci-dessus, car le répertoire n'est plus indexé sur le fichier, mais le fichier est toujours indexé lorsque le fichier est ouvert, donc l'espace disque ne peut pas être libéré immédiatement . Pourquoi lsof peut-il trouver des fichiers supprimés et non publiés ? lsof, comme son nom l'indique : list open files, le principe de cette commande est de retrouver la liste des fichiers ouverts, afin de pouvoir retrouver les fichiers supprimés mais non libérés.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

La solution à l'erreur d'installation de MySQL est: 1. Vérifiez soigneusement l'environnement système pour vous assurer que les exigences de la bibliothèque de dépendance MySQL sont satisfaites. Différents systèmes d'exploitation et exigences de version sont différents; 2. Lisez soigneusement le message d'erreur et prenez des mesures correspondantes en fonction des invites (telles que les fichiers de bibliothèque manquants ou les autorisations insuffisantes), telles que l'installation de dépendances ou l'utilisation de commandes sudo; 3. Si nécessaire, essayez d'installer le code source et vérifiez soigneusement le journal de compilation, mais cela nécessite une certaine quantité de connaissances et d'expérience Linux. La clé pour finalement résoudre le problème est de vérifier soigneusement l'environnement du système et les informations d'erreur et de se référer aux documents officiels.

Il existe de nombreuses raisons pour lesquelles la startup MySQL échoue, et elle peut être diagnostiquée en vérifiant le journal des erreurs. Les causes courantes incluent les conflits de port (vérifier l'occupation du port et la configuration de modification), les problèmes d'autorisation (vérifier le service exécutant les autorisations des utilisateurs), les erreurs de fichier de configuration (vérifier les paramètres des paramètres), la corruption du répertoire de données (restaurer les données ou reconstruire l'espace de la table), les problèmes d'espace de la table InNODB (vérifier les fichiers IBDATA1), la défaillance du chargement du plug-in (vérification du journal des erreurs). Lors de la résolution de problèmes, vous devez les analyser en fonction du journal d'erreur, trouver la cause profonde du problème et développer l'habitude de sauvegarder régulièrement les données pour prévenir et résoudre des problèmes.

MySQL ne peut pas fonctionner directement sur Android, mais il peut être implémenté indirectement en utilisant les méthodes suivantes: à l'aide de la base de données légère SQLite, qui est construite sur le système Android, ne nécessite pas de serveur distinct et a une petite utilisation des ressources, qui est très adaptée aux applications de périphériques mobiles. Connectez-vous à distance au serveur MySQL et connectez-vous à la base de données MySQL sur le serveur distant via le réseau pour la lecture et l'écriture de données, mais il existe des inconvénients tels que des dépendances de réseau solides, des problèmes de sécurité et des coûts de serveur.

Les principales raisons de la défaillance de l'installation de MySQL sont les suivantes: 1. Problèmes d'autorisation, vous devez s'exécuter en tant qu'administrateur ou utiliser la commande sudo; 2. Des dépendances sont manquantes et vous devez installer des packages de développement pertinents; 3. Conflits du port, vous devez fermer le programme qui occupe le port 3306 ou modifier le fichier de configuration; 4. Le package d'installation est corrompu, vous devez télécharger et vérifier l'intégrité; 5. La variable d'environnement est mal configurée et les variables d'environnement doivent être correctement configurées en fonction du système d'exploitation. Résolvez ces problèmes et vérifiez soigneusement chaque étape pour installer avec succès MySQL.

Impossible d'accéder à MySQL à partir du terminal peut être dû à: le service MySQL n'est pas en cours d'exécution; Erreur de commande de connexion; autorisations insuffisantes; Connexion de blocs de pare-feu; Erreur de fichier de configuration MySQL.

Une surveillance efficace des bases de données MySQL et MARIADB est essentielle pour maintenir des performances optimales, identifier les goulots d'étranglement potentiels et assurer la fiabilité globale du système. Prometheus Mysql Exportateur est un outil puissant qui fournit des informations détaillées sur les mesures de base de données qui sont essentielles pour la gestion et le dépannage proactifs.

Linux est largement utilisé dans les serveurs, les systèmes intégrés et les environnements de bureau. 1) Dans le domaine du serveur, Linux est devenu un choix idéal pour héberger des sites Web, des bases de données et des applications en raison de sa stabilité et de sa sécurité. 2) Dans les systèmes intégrés, Linux est populaire pour sa personnalisation et son efficacité élevées. 3) Dans l'environnement de bureau, Linux fournit une variété d'environnements de bureau pour répondre aux besoins des différents utilisateurs.
