linu索引inode详解

1、inode简介

文件系统是数据在硬盘上的一种排列组织方式,linux每个分区都可以格式化为不同的文件系统,所以可以说每个分区都是一个文件系统,都有自己的目录层次结构。而在目录之下,linux已经将所有的资源处理成为文件,不论是目录还是命令,之后linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构,实现对不同分区的数据进行访问。但是通过目录层次访问磁盘上的文件,只是表面现象。要知道数据在磁盘上以块(block)存储(一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位)数据的大小不一,造成了块的数量也不尽相同,增删改查都会影响数据块的排列方式,那么如何在众多的可能不连续的数据块中,如何精准的找到数据对应的那些块,必须依附在一张索引列表之上,这就是inode。

所以操作系统读取磁盘文件的流程是这样的

<1>根据某个inode号,找到目录的block,其存储的各种文件和文件的inode

<2>查询inode表,找到文件的inode节点

<3>根据文件的inode,找到对应的block

<4>读取文件

大致流程图如下

2、inode内容

当然,inode中不仅仅存储着指针,还存储着对应资源的权限、属主、属组和大小,见图一

3、inode查看

inode也是存储在block上的一段数据,所以其也是占用磁盘空间的,每个分区都有自己的inode上限,所以有时候如果显示磁盘空间已满,inode上限也需要作为一个原因,可使用df -i查看

[[email protected] testdir]# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda2      6406144 145786 6260358    3% /
tmpfs           125517      5  125512    1% /dev/shm
/dev/sda1        51200     38   51162    1% /boot
/dev/sda3      1281120     25 1281095    1% /testdir
/dev/sr0             0      0       0     - /media/CentOS_6.8_Final
/dev/sr0             0      0       0     - /media/cdrom

查看文件的inode,使用ls -i

[[email protected] testdir]# ls -i
11 FILE1  12 FILE2  13 FILE3
[[email protected] testdir]#

查看文件的inode,也可以使用命令stat

[[email protected] testdir]# stat FILE1
  File: `FILE1‘
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 11          Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-28 20:55:59.110959913 +0800
Modify: 2016-07-28 20:55:59.110959913 +0800
Change: 2016-07-28 21:22:03.395959013 +0800

4、从软链接、硬链接理解inode

在linux系统上,不同的分区下,都有自己的inode序列,所以A分区和B分区的inode是会相同的。但是在同一个分区之内,inode于文件一般是一一对应的,但是有时可以通过多个文件指向同一个inode,实现借助不同的方式访问到同一个文件内容,这就是硬链接

创建硬链接

ln SRC_FILE DES_FILE

在硬链接之外,还存在一种情况,那就是虽然创建了a文件,但是通过b路径也可以访问到a的内容,尽管a和b的inode不同,但是此时b借助a的路径访问到了a的内容,b就叫做a的软链接

创建软链接

ln -s SRC_FILE DES_FILE

[[email protected] ~]# touch new
[[email protected] ~]# ln -s new /testdir/new1
[[email protected] ~]# ll /testdir/new1 
lrwxrwxrwx. 1 root root 3 Jul 28 21:33 /testdir/new1 -> new

上面这种情况为什么会报错?因为虽然软链接new1是创建在/testdir之下的,但是其访问数据时,是相对与当前目录,也就是说是在/testdir之下寻找new文件的,而非原文件的路径,所以通过/testdir/new1是无法访问到new的。正确的做法如下。

[[email protected] ~]# ln -s ../root/new /testdir/new3
[[email protected] ~]# ll /testdir/new3
lrwxrwxrwx. 1 root root 11 Jul 28 21:40 /testdir/new3 -> ../root/new

5、inode的应用

在实际生活中,我们删除数据的时候,只不过是删除掉了指向文件的inode路径,文件依然存在于磁盘之上,这时我们是可以通过一些手段恢复数据的,其本质也不过只是添加了指向文件数据的inode。如果未及时恢复,在原来的磁盘空间上重新写入了数据后,那么数据就很难恢复了。

时间: 2024-08-27 13:35:33

linu索引inode详解的相关文章

【转】Inode详解

Inode详解 转自: Inode详解 一.inode是什么 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的大小,最常见的是4KB,即连续八个s

Linux中inode详解,硬链接和软链接介绍

inode 详解   在Linux中,我们经常会做一些关于数据的操作(备份.传输.压缩等)或是要在后台持续的运行一些程序.由于,工作的数据量很大或者工作要持续很长的时间,我们就必须保证这个终端的启动,一旦终端关闭了,它所运行的进程也会关闭,我们所做的工作就可能前功尽弃.但是,即使我们不主动的关闭终端,终端有的时候也会应为一些原因(网络.锁屏等)而中断,导致我们的工作进度清零. 1.inode 定义 inode是用来存储文件元信息的区域.中文译名叫做"索引节点".   简单来说,inod

Inode详解

一.inode是什么 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的大小,最常见的是4KB,即连续八个sector组成一个block. 文件数据

(转)Inode详解

原文:http://www.cnblogs.com/adforce//p/3522433.html 一.inode是什么 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位.&q

(转)Linux硬链接、软链接及inode详解

inode 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的大小,最常见的是4KB,即连续八个 sector组成一个 block. 文件数据都储存在"块"中,那么

MySQL的InnoDB索引原理详解

摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比. 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出. 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大

MySQL索引操作命令详解

创建索引: MySql创建索引的语法如下: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_name (index_col_name,...) 其中对应的语法变量信息如下: [UNIQUE|FULLTEXT|SPATIAL]:中括号中的三个关键字表示创建的索引类型,他们分别表示唯一索引.全文索引.空间索引三种不同的索引类型.如果我们不指定任何关键字,则默认为普通索引. index_name

MySQL的InnoDB索引原理详解 (转)

摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比. 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出. 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很

MySQL--InnoDB索引原理详解

1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分. 先看看几种树形结构: 1 搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构. 2 B树:一棵m阶B树是一棵平衡的m路搜索树.最重要的性质是每个非根节点所包含的关键字个数 j 满足:┌m/2┐ – 1 <= j <= m – 1:一个节点的子节点数量会比关键字个数多1,这样关