1、inode是什么

            inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是BlockBlock是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。

df  -h   /dev/sda

    可以查看磁盘的使用情况及inode数

wKiom1PwJUaCJbMwAACxFY300ew662.jpg

2、linux文件存储的特点及工作原理

         Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。

ll -i 查看inode 号

wKiom1PwJf7T_RfmAACxgOXQ-G8216.jpg

         创建目录时,默认会生成两个目录项:"."".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"

    实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

    文件是由inode加block两部分组成

3、inode是由元数据组成

元数据的结构

stat命令:元数据

文件名,大小,时间戳,权限,属主、属组,对应的数据存储在哪些磁盘块上;

wKiom1PwJ-PAebtwAAEXK2LslDg614.jpg

4、inode的大小

        inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%

5、硬链接

硬链接就是inode相同,源文件和链接文件大小相同,相当于一个备份存储在另外一个地方

创建硬链接的方法

ln  源文件     目标文件

wKioL1PwMT-xE-MUAALiHeEqw9w053.jpg

         文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"hard link)。

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

   硬链接创建的规则

不能对目录文件创建硬链接;

硬链接不能跨分区

创建硬链接会增加inode引用计数

6、软链接

软链接就是有点像windos中的快捷图标,它创建后文件大小很小,只是文件名的字节数,而原文才保留数据,才是文件的真正大小。

创建方法

ln -sv 源文件  目标文件

wKiom1PwMoXAsjIbAAJExgCdKNo071.jpg

符号链接:

可以对目录创建

不受分区限制

对文件创建符号链接不会增加引用计数

7、文件的删除、复制、移动

文件被删除:inode被标记为空闲,此inode指向的磁盘块被标记为空闲;
如果inode被引用了多次,且此次删除未使得其引用计数降低为的话,这意味着文件被删除仅删除了一个访问路径;
文件复制:创建一个新文件,并原文件中数据在新文件指向的磁盘块中再写一次的过程;
文件移动:
在同一个分区移到:移动文件仅是改变了文件访问路径;
跨分区移到:在新分区创建文件,把数据复制过去,删除原分区数据;