Linux inod table是什么? 请描述其作用?
发布网友
发布时间:2022-04-22 17:16
我来回答
共1个回答
热心网友
时间:2023-11-13 13:15
来自网络
-----
那inode是做什么用的呢?inode 记录档案(文件或目录)的属性、及该档案放置在哪一个 Block 之内的信息。
每个档案都会占用到至少一个 inode 。而当我们 Linux 系统要找到这个档案时,他会先去搜寻 inode table 找到这个档案的属性及数据放置的地区,然后再到数据库去找到数据存放的 Block 进而将数据取出。
一个 partition 格式化为一个 filesystem 之后,他一定会有 inode table 与 data area 两个区块,一个用来记录档案的信息与该档案放置的 block 区块,一个用来记录档案的内容。
Linux 在读取数据的时候,是先查询 inode table 以得到数据是放在那个 Block 里面,然后再去该 Block 里面读取真正的数据内容。block 是我们在格式化硬盘的时候规定出来的一个值,这个 block 是由 2 的 n 次方个sector(扇区,大小为512byte) 所集结而成的,假设 block 规划为 4KBytes,则由于一个 inode 与一个block 最多均只纪录一个档案,所以如果一个档案有 0.1 K bytes 。但是,由于你的 block为 4K bytes 。你就会有 3.9 Kbytes 的空间“浪费掉”!所以,当你在格式化硬盘的时候,请千万注意到您的系统的使用范围。
1、 当 block 越小 ( 最小为 0.5K ) 、inodes 越多,可利用空间越多,但是大档案写入效率较差:适合档案数量多但是
档案容量小的系统,例如 BBS 或者新闻群组 news 这方面的服务之系统;
2、 当 block 越大 ( 最大可到 16 * 0.5K 以上 ) 、 inodes 数越少,大档案写入效率较佳,但浪费的空间较多:适合档案容量大的系统。
inode table是data area的索引表。
Data Area中存放真正的数据。
inode table上有许多的inode, 每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。inode两个功能:记录档案属性和指针
1. linux FS 可以简单分成 inode table与data area两部份。inode table上有许多的inode, 每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。inode两个功能:记录档案属性和指针
2. inode table中红色区域即inode size,是128Byte,在liunx系统上通过命令我们可以看到,系统就是这么定义的。Inode size是指分配给一个inode来记录文档属性的磁盘块的大小。
mpe2fs -h /dev/hda6 | grep node Inode size:128
3. data ares中紫色的区域block size,就是我们一般概念上的磁盘块。这块区域是我们用来存放数据的地方。
4. 还有一个逻辑上的概念:FS中每分配2048 byte给data area, 就分配一个inode。但一个inode就并不一定就用掉2048 byte, 也不是说files allocation的最小单位是2048 byte, 它仅仅是代表filesystem中inode table/data area分配空间的比例是128/2048,也就是1/16。
mkfs.ext3 -i 2048 这条命令中的-i参数就是我们所说的逻辑概念,它的大小决定inode count的大小,redhat5默认-i最小为可设置为1024.
网上很多介绍关于inode的文章,把inode size的定义搞错了,他们把-i参数这个值或block size解读为inode size 所以很多文章令人费解。
5. inode参数是可以通过mkfs.ext3命令改变的:
mkfs.ext3 -i 2048 -b 8192 -f 1024 /dev/sdb2
-i 2048更改inode为每2KB创建一个
-b 8192设置block size的大小为8kB
-f 1024设置fragments的大小为1KB
mkfs.ext3 –N 2939495 /dev/sdb2
–N 2939495更改inode count。
因为每个partition有inode数目*。所以inode可能会用完而导致不能创建新的文件。
#df -h
可以显示block空间用了多少,还剩余多少。
#df -i则显示inode用了多少,还剩余多少等。
所以,如果有非常多小文件,将inode占用光了。则可能也无法创建新文件。
接下来,我们再来分析一下复制文件、移动文件和删除文件对inode的影响
[root@yufei ~]# watch -n 1 "df -i;df"Every 1.0s: df -i;df Tue Apr 5 21:57:38 2011
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 960992 105415 855577 11% /
tmpfs 63946 1 63945 1% /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2747612 11603116 20% /
tmpfs 255784 0 255784 0% /dev/shm
[root@yufei test]# ls -li
total 4
977 drwxr-xr-x. 2 root root 4096 Apr 5 16:48 testdir
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile.hard
976 -rw-r--r--. 3 root root 0 Apr 5 18:54 testfile.hard1
978 lrwxrwxrwx. 1 root root 8 Apr 5 17:03 testfile.soft -> testfile
我们先记录以上的信息
先看复制文件的情况
[root@yufei test]# cp testfile testfile.cp
[root@yufei test]# ls -li
976 -rw-r--r--. 3 root root 0 Apr 5 21:50 testfile
979 -rw-r--r--. 1 root root 0 Apr 5 21:58 testfile.cp
我们只对比这两个文件,发现Inode number不一样,我们再来看看inodes和blocks的剩余情况
Every 1.0s: df -i;df Tue Apr 5 22:02:49 2011
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 960992 105416 855576 11% /
tmpfs 63946 1 63945 1% /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2747620 11603108 20% /
tmpfs 255784 0 255784 0% /dev/shm
发现inodes减少了一个,而blocks也少了,这就说明,复制文件是创建文件,并占Inode和Block的。
文件创建过程是:先查找一个空的Inode,写入新的Inode table,创建Directory,对应文件名,向block中写入文件内容
关于移动文件和删除文件的实验,大家可以自己动手来实践吧。我直接给出相应的说明。
移动文件,他分两种情况:
在同一个文件系统中移动文件时
创建一个新的文件名和Inode的对应关系(也就是在Directory中写入信息),然后在Directory中删除旧的信息,更新CTIME,其他的信息如Inode等等均无任何影响
在不同文件系统移动文件时先查找一个空的Inode,写入新的Inode table,创建Directory中的对应关系,向block中写入文件内容,同时还会更改CTIME。
删除文件他实质上就是减少link count,当link count为0时,就表示这个Inode可以使用,并把Block标记为可以写,但并没有清除Block里面数据,除非是有新的数据需要用到这个block。
最后我们来做个总结:
1、一个Inode对应一个文件,而一个文件根据其大小,会占用多块blocks。
2、更为准确的来说,一个文件只对应一个Inode。因为硬链接其实不是创建新文件,只是在Directory中写入了新的对应关系而已。3、当我们删除文件的时候,只是把Inode标记为可用,文件在block中的内容是没有被清除的,只有在有新的文件需要占用block的时候,才会被覆盖