图解linux中Inode-分析Linux如何通过Inode读取磁盘

1、什么是inode?

首先要明白,linux中所有的东西都是文件,不管是目录还是命令

操作系统读硬盘的时候,为了提高效率,一次性读取一个block(常见大小4KB),一个block由8个扇区组成,每个扇区0.5K,扇区是硬盘存储数据的最小单位

而Inode就是帮助linux系统快速定位到指定文件而创建的额特殊的文件

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

  1. 根据dictionary的对应关系找到该文件的inode(dictionary简单理解就是一张表,存储文件到inode号的映射)
  2. 根据inode,找到inodeTable
  3. 根据inodeTable中的对应关系,找到对应的block
  4. 读取文件

大致过程如图:

查看inode大小

[[email protected] ~]# dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.39 (29-May-2006)
Inode size:               128

通常,一个inode128Byte对应硬盘1K的信息量,也就是说,存储空间有很大一部分分给了INode文件

查看系统的Inode

[[email protected] ~]# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2            4905600   95401 4810199    2% /
/dev/sda1              76304      35   76269    1% /boot
tmpfs                  64413       1   64412    1% /dev/shm

可以看到,Inode的数目是有限的,所以如果系统中的inode使用完了,那么即使磁盘还有空间,也无法再向磁盘存储新的文件,因为,新文件要创建Inode

2、从软硬链接说起,理解inode

创建方式

ln file.txt file.hardlink
ln -s file.txt file.softlink

然后查看他们的inode

[[email protected] testForCsdn]# ls -il
total 20
2256709 -rw-r--r-- 2 root root 222 Oct 24 19:17 file.hardlink
2256719 lrwxrwxrwx 1 root root   8 Oct 24 20:32 file.softlink -> file.txt
2256709 -rw-r--r-- 2 root root 222 Oct 24 19:17 file.txt

可以看到,创建一个硬链接并没有创建新的Inode,只不过是在file.txt上加上了一个新的dictionary的对应关系。当我修改file.txt的时候,也就是修改了inode是2256709的那块磁盘,而硬链接读一样的磁盘,这样就不难理解为什么硬链接会同步更新。

那么添加一个硬链接,显示出来的那个file.hardlink是从哪来的呢?添加一个硬链接,会在目录文件里,添加一条信息,文件名-inode号,所以就是相当于新添加了一个dictionary的对应关系

而软连接只是创建了一个新的文件,这个新的文件内容是指向file.txt,也就是说,每次操作软链接,实际上都是操作file.txt,所以软连接不能脱离源文件而存在,因为如果源文件被删除了那么这个软链接就找不到自己应该指向的那个对象了

这里要说明的是,目录本身也是个文件,每个目录下都会存储.和..两个目录,所以即使我们创建一个空的文件夹,它的link也是2

. 表示当前目录

.. 表示上层目录

[[email protected] testForCsdn]# ls -ial
total 36
2256587 drwxr-xr-x  2 root root 4096 Oct 24 20:44 .
2256577 drwxr-x--- 17 root root 4096 Oct 24 20:31 ..
2256709 -rw-r--r--  2 root root  222 Oct 24 19:17 file.hardlink
2256719 lrwxrwxrwx  1 root root    8 Oct 24 20:32 file.softlink -> file.txt
2256709 -rw-r--r--  2 root root  222 Oct 24 19:17 file.txt

我们通过stat 来查看当前目录的inode信息

[[email protected] testForCsdn]# stat .
  File: `.'
  Size: 4096            Blocks: 16         IO Block: 4096   directory
Device: 802h/2050d      Inode: 2256587     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-10-24 20:45:35.000000000 -0700
Modify: 2014-10-24 20:44:26.000000000 -0700
Change: 2014-10-24 20:44:26.000000000 -0700

其中

blocks:表示占用的块数目

Access:后的时间表示最后一次访问的时间

Modify:后的时间表示最后一次修改的时间

Change:表示最后文件状态更改的时间

通过STAT命名可以看到,Inode中包含的一些信息

(1)文件大小

(2)占用block数目

(3)拥有者和所属组的ID

(4)文件的权限

(5)时间戳

(6)链接数,即多少个文件指向这个inode

(7)数据block的位置

3、inode的诸多优点

(1)对于有些无法删除的文件可以通过删除inode节点来删除

(2)移动或者重命名文件,只是改变了dictionary的映射,并不需要实际对硬盘操作

(3)删除文件的时候,只需要删除inode节点,不需要实际清空那块硬盘,只需要在下次写入的时候覆盖即可(这也是为什么删除了数据可以进行数据恢复的原因之一)

(4)打开一个文件后,只需要通过inode来识别文件

时间: 2024-07-29 14:14:50

图解linux中Inode-分析Linux如何通过Inode读取磁盘的相关文章

Linux中LoadAverage分析

判断系统负荷 1.uptime 命令,load average的三个数分别表示了1分钟.5分钟.15分钟的平均进程数. 如果你继续看手册,它还会告诉你,当CPU完全空闲的时候,平均负荷为0:当CPU工作量饱和的时候,平均负荷为1. 那么很显然,"load average"的值越低,比如等于0.2或0.3,就说明电脑的工作量越小,系统负荷比较轻. load average/核数=1,则存在性能问题. 2.也可查看文件/proc/loadavg,如 详情,可参考:http://songxj

Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offsetof 1.1 offsetof介绍 定义:offsetof在linux内核的include/linux/stddef.h中定义.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 说明:获得结构体(TYPE)的变量成员(

Linux系统启动流程分析与关机流程

Linux 系统启动流程分析 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立终端. 用户登录系统. init程序的类型: SysV: init, CentOS 5之前, 配置文件: /etc/inittab. Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf. Systemd: systemd, CentOS 7,配置文件: /usr/lib/

转 Linux中常用操作命令

http://blog.csdn.net/ljianhui/article/details/11100625 初窥Linux 之 我最常用的20条命令 玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下man,他会帮你解决不少的问题.然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shel

深入理解Linux中的文件权限

Linux中文件权限 Linux中每个文件都有一个特定的拥有者(一般是创建它的用户)和所属用户组,这是它的固有属性.文件可以利用这两个固有属性来规定它的拥有者或者是所属用户组内的用户是否拥有对它的访问权利,即读.写和执行的权利.此外为了提高适应性,文件还规定了其他不相关的人等的访问权限,也就是第三个固有属性.这三个固有属性和三个权利合起来,就构成了文件针对系统中所有用户的访问控制,也就构成了Linux中的文件权限体系. 1.1 使用ls命令的-l选项查看root家目录,结果如下 [[email 

Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

Linux 线程实现机制分析 Linux 线程实现机制分析  Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是

Linux中find用法

Linux中find用法 linux常用命令 find -name april* 在当前目录下查找以april开始的文件 find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中 find -name ap* -o -name may* 查找以ap或may开头的文件 find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件 find /mnt -n

linux中几种安装软件 方法

http://blog.csdn.net/u010509774/article/details/50593231 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在的目录: 4.输入rpm -ivh soft.version.rpm 详细介绍: 1. 安装: 我只需简单的一句话,就可以说完.执行: rpm –ivh rpm的软件包名 更高级的,请见

Linux中的 inode以及 软硬链接分析

    一. inode 是什么?(索引节点)              理解inode 需要知道文件存储,文件是存储在硬盘上的,操作系统读取硬盘的时候会连续读取多个扇区(硬盘的最小存储单元),即一次性读取一个块(文件存取的最小单位).所以文件数据都存储在块中,便需要一个地方储存文件的管理信息.例如文件的创建者.文件的创建日期.文件的大小等等.这种储存文件管理信息的区域就叫做inode(索引节点).            二.  inode的内容            1.文件的字节数: