Linux inod table是什么? 请描述其作用? 鸟哥的linux私房蔡里提到,提到inode table与i...

linux\u91ccrestoresymtable\u6709\u4ec0\u4e48\u4f5c\u7528\u5462

linux\u7684\u4f5c\u7528\u662f\u4ec0\u4e48\uff1f\u6709\u4ec0\u4e48\u5e94\u7528\u5b9e\u4f8b\uff1f

inode table\u76f8\u5f53\u4e8e\u6d3e\u51fa\u6240\u91cc\u6240\u6709\u6237\u53e3\u767b\u8bb0
inode\u76f8\u5f53\u4e8e\u6bcf\u5bb6\u95e8\u724c\u53f7 \u6d3e\u51fa\u6240\u5f53\u7136\u4e5f\u6709\u767b\u8bb0
data block \u8ddf\u7740\u7cfb\u7edf\u6765\u7684 \uff0c\u7cfb\u7edf\u53ef\u4ee5\u5b9a\u4e49\u8fd9\u4e2ablock\u7684\u5927\u5c0f\u3002\u5c31\u50cf\u4e00\u56e2\u9762\uff0c\u4f60\u5b9a\u505a\u591a\u5927\u7684\u5305\u5b50\uff0c\u540c\u65f6\u5c31\u7b49\u4e8e\u5b9a\u4e86\u505a\u591a\u5c11\u4e2a\u5305\u5b50\u3002
block\u662f\u5e7f\u4e49\u4e0a\u7684\uff0c\u6570\u636e\u5757\u3002

来自网络
-----

那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来记录文档属性的磁盘块的大小。
dumpe2fs -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的时候,才会被覆盖

扩展阅读:www.sony.com.cn ... matebook14 ... matebook macbook ... xbox series x ... 欧洲applestore ... beats studio wireless ... java windowbuilder ... kindle paperwhite 3 ... windows file recovery ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网