Maison  >  Article  >  Tutoriel système  >  enregistrements d'inodes sous Linux

enregistrements d'inodes sous Linux

PHPz
PHPzavant
2024-02-11 09:51:29974parcourir

Les fichiers sont stockés sur le disque dur.

La plus petite unité de stockage sur un disque dur s'appelle un secteur.

Chaque secteur stocke 512 octets (équivalent à 0,5 Ko).

Lorsque le système d'exploitation lit le disque dur, il ne lit pas secteur par secteur, ce qui est inefficace.

Au lieu de cela, il lit plusieurs secteurs consécutivement, c'est-à-dire un bloc à la fois.

Ce "bloc" se compose de plusieurs secteurs et constitue la plus petite unité d'accès aux fichiers.

Taille du bloc, la plus courante est de 4 Ko, soit une rangée de huit secteurs formant un bloc.

enregistrements dinodes sous Linux

Les données du fichier sont stockées dans des "blocs", donc évidemment, il faut aussi trouver un endroit pour stocker les méta-informations du fichier, comme le créateur du fichier, la date de création du fichier, la taille du fichier , etc. Cette zone qui stocke les métainformations du fichier est appelée inode et sa traduction chinoise est « nœud d'index ».

contenu de l'inode

inode contient des méta-informations du fichier, en particulier le contenu suivant :

* Le nombre d'octets dans le fichier

* ID utilisateur du propriétaire du fichier

* ID de groupe du fichier

* Autorisations de lecture, d'écriture et d'exécution de fichiers

* Il existe trois horodatages pour les fichiers : ctime fait référence à l'heure à laquelle l'inode a été modifié pour la dernière fois, mtime fait référence à l'heure à laquelle le contenu du fichier a été modifié pour la dernière fois et atime fait référence à l'heure à laquelle le fichier a été ouvert pour la dernière fois.

* Nombre de liens, c'est-à-dire combien de noms de fichiers pointent vers cet inode

* L'emplacement du bloc de données du fichier

Vous pouvez utiliser la commande stat pour afficher les informations d'inode d'un certain fichier :

stat example.txt

En bref, toutes les informations sur le fichier, à l'exception du nom du fichier, sont stockées dans l'inode. Quant à la raison pour laquelle il n’y a pas de nom de fichier, vous trouverez une explication détaillée ci-dessous.
enregistrements dinodes sous Linux

Taille de l'inode

Inode consomme également de l'espace sur le disque dur, donc lorsque le disque dur est formaté, le système d'exploitation divise automatiquement le disque dur en deux zones. L'une est la zone de données, qui stocke les données du fichier ; l'autre est la zone d'inode (table d'inode), qui stocke les informations contenues dans l'inode.

La taille de chaque nœud inode est généralement de 128 octets ou 256 octets. Le nombre total de nœuds inodes est indiqué lors du formatage, généralement un inode est défini tous les 1 Ko ou tous les 2 Ko. Supposons que dans un disque dur de 1 Go, la taille de chaque nœud d'inode est de 128 octets et qu'un inode est défini pour chaque 1 Ko, la taille de la table d'inode atteindra 128 Mo, ce qui représente 12,8 % de l'ensemble du disque dur.

Pour afficher le nombre total d'inodes et le nombre utilisé de chaque partition du disque dur, vous pouvez utiliser la commande df.

df -i

Pour afficher la taille de chaque nœud inode, vous pouvez utiliser la commande suivante :

sudo dumpe2fs -h /dev/hda | grep "Inode size"

Comme chaque fichier doit avoir un inode, il peut arriver que les inodes soient épuisés mais que le disque dur ne soit pas plein. Pour le moment, aucun nouveau fichier ne peut être créé sur le disque dur.

numéro d'inode

enregistrements dinodes sous Linux

Chaque inode a un numéro et le système d'exploitation utilise le numéro d'inode pour identifier différents fichiers.

Il convient de répéter ici que les systèmes Unix/Linux n'utilisent pas de noms de fichiers en interne, mais utilisent des numéros d'inodes pour identifier les fichiers. Pour le système, le nom du fichier n'est qu'un alias ou un surnom pour le numéro d'inode pour une identification facile. En apparence, l'utilisateur ouvre le fichier par le nom du fichier. En fait, le processus au sein du système est divisé en trois étapes : premièrement, le système trouve le numéro d'inode correspondant au nom de fichier ; deuxièmement, obtient les informations d'inode via le numéro d'inode enfin, sur la base des informations d'inode, il trouve le numéro d'inode ; bloc où se trouvent les données du fichier et lit les données.

Utilisez la commande ls -i pour voir le numéro d'inode correspondant au nom du fichier :

ls -i example.txt

Fichiers de répertoire

Dans les systèmes Unix/Linux, un répertoire est aussi une sorte de fichier. Ouvrir un répertoire signifie en fait ouvrir le fichier répertoire.

La structure d'un fichier répertoire est très simple, c'est une liste d'une série d'entrées de répertoire (dirent). Chaque entrée de répertoire se compose de deux parties : le nom du fichier contenu et le numéro d'inode correspondant au nom du fichier.

La commande ls répertorie uniquement tous les noms de fichiers dans les fichiers du répertoire :

ls /etc
La commande

ls -i répertorie tous les fichiers du répertoire, c'est-à-dire les noms de fichiers et les numéros d'inodes :

ls -i /etc

Si vous souhaitez afficher les informations détaillées du fichier, vous devez accéder au nœud inode et lire les informations en fonction du numéro d'inode. La commande ls -l répertorie des informations détaillées sur un fichier.

ls -l /etc

Lien dur

Généralement, le nom du fichier et le numéro d'inode sont dans une relation de « correspondance biunivoque », et chaque numéro d'inode correspond à un nom de fichier. Cependant, les systèmes Unix/Linux permettent à plusieurs noms de fichiers de pointer vers le même numéro d'inode. Cela signifie que le même contenu est accessible avec des noms de fichiers différents ; la modification du contenu du fichier affectera tous les noms de fichiers ; cependant, la suppression d'un nom de fichier n'affectera pas l'accès à un autre nom de fichier ; Cette situation est appelée « lien dur ».

La commande ln peut créer des liens physiques :

ln 源文件 目标文件

运 行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文 件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系 统就会回收这个inode号码,以及其所对应block区域。

这里顺便说一下目录文件的”链接数”。创建目录时, 默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当 前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的 2是父目录对其的“硬链接”和当前目录下的”.硬链接“。

enregistrements dinodes sous Linux

软链接

除了硬链接以外,还有 一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打 开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。

这 意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此 发生变化。

ln -s命令可以创建软链接。

ln -s 源文文件或目录 目标文件或目录

inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

\1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

\2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

\3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时 候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode则被回收。

实际问题

在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

查找原因:

/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

解决方案:

1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。

2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:

ln -s /opt/newcache /data/cache

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer