Linux inode
inode简介
inodes将系统上的每个文件存储元数据,如图所在的结构中通常位于分区开头附近的结构中。
它们存储除文件名和数据之外的所有信息。
给定目录中的每个文件都是包含文件名和inode号码的条目。
通过引用inode号码从inode表中检索有关该文件的所有其他信息。
inodes数字在分区级别是唯一的。
每个分区都作为自己的inode表。
如果inode耗尽,即使我们在给定分区上剩余空间,我们也无法创建新文件。
什么是Linux中的inode?
inode代表索引节点。
虽然历史并不肯定,但它是他们提出的最合乎逻辑和最佳的猜测。
它曾经写的i-node,但连字符随着时间的推移丢失了。
如Linfo.org描述:
An inode is a data structure … … that stores all the information about a file except its name and its actual data.
inodes存储关于它引用的文件的元数据。
此元数据包含有关所述文件的所有信息。
- 大小。
- 权限。
- 所有者/小组。
- 硬盘的位置。
- 日期时间。
- 所需的任何其他信息。
每个使用的inode都指的是1个文件。
每个文件都有1个inode。
目录,字符文件,块设备,它们都是所有文件。
它们每个都有1个inode。
对于目录中的每个文件,存在包含文件名和与之关联的inode号码的条目。
inodes在分区级别是唯一的。
我们可以拥有两个具有相同inode号码的文件,给出它们在不同的分区上。
Inodes信息在每个分区的战略部分中的表中存储在桌子中。
经常在开始附近找到。
如何在Linux中检查inode吗?
我们可以使用以下命令轻松列出inode编号:
ls -i
以下图片显示具有相应inode号码的根目录。
在创建文件系统时,可以决定每个文件系统的inodes的量。
对于大多数用户而言,默认的inodes数量越多。
创建文件系统时大多数默认设置将创建每个2k字节的空间1个inode。
这为大多数系统提供了大量的inodes。
在我们耗尽inode之前,我们将更多地耗尽空间。
如果需要,我们可以在创建文件系统时指定要创建的inode有数量。
如果我们耗尽inode,则无法创建任何新文件。
系统也将无法这样做。
这不是大多数用户遇到的情况,但它是可能的。
例如,邮件服务器将存储大量非常小的文件。
许多文件将低于2k字节。
还有期望不断增长。
因此,在空间耗尽空间之前,邮件服务器面临in inodes的风险。
一些文件系统如BTRF,JFS,XFS已经实现了动态inode。
如果需要,它们可以增加可用的含量。
inode如何工作?
创建新文件时,它会分配inode号码和文件名。
inode号码是该文件系统中的唯一数字。
名称和inode号码都存储为目录中的条目。
当我ran命令"ls -li /"文件名和inode编号时是存储在目录中的/。
使用inode号码从inode表中检索信息用户,组,文件权限,大小等的剩余信息。
我们可以使用Linux中的DF命令列出每个文件系统的inode信息:
df -hi
inode和软/硬链接
软链接或者符号链接是Linux的众所周知的功能。
但是在Linux中创建符号链接时,inode会发生什么?
在下一个图片中,我有一个名为"dir1"的目录,一个名为"file1"的文件,内部"dir1"我有一个名为"slink1"的软链接,指向"../file1"。
现在我可以递归列表并显示inode信息。
正如预期的那样,DIR1和FILE1具有不同的inode号码。
但软链接也是如此。
创建软链接时,我们会创建一个新文件。
在其元数据中,它指向目标。
对于我们创建的每个软链接,我们使用一个inode。
使用ln命令在dir1中创建硬链接后:
ln ../file1 hlink1
列表inode号码为我提供以下信息:
我们可以看到"file1"和"hlink1"具有相同的inode号码。
如实,因为inode,可能是可能的。
硬链接不会创建一个新文件。
它只为相同数据提供新名称。
在旧版本的Linux中,可以硬链接目录。
甚至可能有一个给定的目录是自己的父母。
这是因为inode实现而实现的。
现在这仅限于防止用户创建非常令人困惑的目录结构。
inode的其他含义
inodes工作的方式也是为什么不可能在不同文件系统上创建硬链接。
允许这样的任务将打开具有冲突的inode数字的可能性。
另一方面,可以在不同的文件系统中创建软链接。
因为硬链接与原始文件相同的inode号码,所以我们可以删除原始文件,并且数据仍可通过硬链接可用。
在这种情况下,我们所做的就是删除指向此inode号码的名称之一。
链接到此inode号码的数据将保持可用,直到删除与其关联的所有名称。
inodes也是为什么Linux系统可以在没有重新启动的情况下更新的一个重要原因。
这是因为一个进程可以使用库文件,而另一个进程将替换具有新版本的文件。
因此,为新文件创建新的inode。
已经运行的进程将继续使用旧文件,同时每次新调用都会导致使用新版本。
in Inodes附带的另一个有趣功能是将数据存储在inode本身中的能力。
这被称为内联。
此存储方法具有节省空间的优点,因为不需要数据块。
它还通过避免更多磁盘访问来获取数据来增加查找时间。
像ext4这样的文件系统有一个名为Inline_Data的选项。
启用后,它允许操作系统以这种方式存储数据。
由于大小限制,不同时为非常小的文件工作。
ext2和稍后将通过这种方式存储软链接信息。
那是大小不再有60字节。