索引式文件系统

什么是inode?

Inode其实就是索引号,便于我们寻找我们文件所存储的数据块block,索引式文件系统在查找信息,读写操作上都比原来的文件系统要快,我们可以通过inode中记录的block信息一次性将数据读取出来,但是采用fat文件系统我们需要先找出第一个block,在通过第一个找第二个数据块,再通过第三个找第四个,这样如果数据不是在一个磁道上,我们可能需要将磁盘读取好几遍才能读出整个文件。

inode记录的信息:

         文件的权限(rwx)

    所有者,所属组

    链接数

    时间信息(atime,mtime,ctime)

   文件大小

        文件指向数据块的指针

什么是block?

block是用来存放数据内容的,一般块的大小有1k,2k,4k,8k等

存放规则:

  一个block只能存放一个文件的数据

  如果一个block放不下一个文件的数据就会找到另一个block继续存放

  即使一个文件数据小于block,这个block也不能在存储其他文件数据

inode与block的关系?

文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用resize2fs等指令变更文件系统大小),否则 inode 与 block 固定后就不再变动。

  一个文件只有一个inode,但一个文件可以有很多block。在inode中,存在着指向数据块的指针,我们新创建一个文件,默认没有数据,当我们开始存储数据时,inode中的指针开始指向一个block,如果一个block装不下,就会指向另一个block存储数据,然后还又二级指针,即inode中的指针指向一个block后,这个block充当指针来分别指向不同的block,这样就可以存储大量的数据。

  我们以ext2文件系统为例对inode和block进行说明:在ext2中一个inode只有128byte,而记录一个block需要4byte,其中我ext2的inode中有11个直接指向,1个间接指向,一个二级指向,一个三级指向,假设一个block大小是1byte,那我们就可以存储:

    11x1K+(1K/4)x1K+256x256x1K+256x256x256x1K=16G

    单个文件我们就可以存储16G大小

目录与inode

我们发现在linux系统下,目录的大小一般都不会很大,这是为什么呢。在linux下,一切皆文件,包括目录,他就像是一个文件接口,里面除了存放本身的权限,时间,大小等信息外,其他存储的是这个目录下一级文件或目录的inode和与其对应的文件或目录名。举例来说,现在我们要找到/tmp/test.txt的内容,如何做的?

首先,我们的系统会先找到/目录的inode号,然后在inode中找tmp和其对应的inode,然后通过tmp对应的inode中的信息,在里面找到test.txt对应的inode号,此时,我们通过inode号所指向的block把我们所需要的信息显示出来

cp与inode的关系

cp 就说重新使用一个空闲的inode,通过参数的不同,复制原inode中的相关信息,并让新inode指向空闲的block,让原inode指向的block内容重新复制到新的inode指向的block中去,完成复制(无论是否跨分区,都可以实现)

mv与inode的关系

mv 就说重新使用一个空闲的inode,通过参数的不同,复制原inode中的相关信息,并让新inode指向空闲的block,让原inode指向的block内容重新复制到新的inode指向的block中去,完成复制,释放原inode(无论是否跨分区,都可以实现)但是我们如果实在同一个分区下的话,它仅仅是将inode换了一个与之对对应名字,并没有新的inode产生。

rm与inode的关系

rm 是直接释放掉相对应的inode,但是,原block中依然存放着信息,可是由于没有inode的指向,所以依旧会重新记录在block bitmap的空闲block中(被释放掉的inode会被记录在inode bitmap空闲区域中)

硬链接与软连接

硬链接:

硬链接有一个特点就是不能跨分区,这是为什么呢?这个硬链接的特点有关:我们知道,在一个分区内有很多的inode,并且一个分区中每一个inode都是唯一的,硬链接的做法就是将一个inode赋予很多个名字,每一个名字都对应一个inode,这样,我们即使删除一个有相同inode的文件,只要硬链接数不为0 ,文件就依然能够通过不同的名字对应的相同的inode被找到。我们很容易发现,在我们ls -l的时候,权限后面跟的有数字,这就是链接说,有人会说,“没有呀,就这一个目录了呀”,但是当我们打开一个目录 ls -ai的时候,我们惊奇的发现,里面居然还有一个 . 对应的相同的inode。

软链接:

软链接,我们可以简单的认为就是快捷方式,它里面记录的是源文件的路径(一定要注意相对路径和绝对路径),这就意味着,软链接是可以跨分区的,软链接删除后,源文件依然存在,但是源文件发生移动或被删除,链接文件就发出红色闪烁错误。

最新文章

  1. [大数据之Yarn]——资源调度浅学
  2. Android UI系列-----ScrollView和HorizontalScrollView
  3. [转]Rapid Reporter——轻量级ET测试记录工具
  4. java中从Spring、Hibernate和Struts框架的action、service和dao三层结构异常处理体系设计
  5. iOS 异常汇总
  6. Android EditText setOnClickListener事件 只有获取焦点才能响应 采用setOnTouchListener解决
  7. 关于httpservletrequest的获取真实的ip
  8. Android 设备管理器 阻止用户取消激活
  9. 尺取法 poj3061 poj3320
  10. scala优点以及eclipse上安装scala插件
  11. 操作系统学习笔记----进程/线程模型----Coursera课程笔记
  12. JMeter学习笔记01-安装环境
  13. SQLServer 2008R2主从部署实战
  14. Java 基础 - 对象池
  15. OG数据预处理
  16. (算法)Trapping Rain Water II
  17. hdoj2571 命运
  18. “全栈2019”Java异常第十八章:Exception详解
  19. 使用jq实现打印机的效果
  20. ManagementClass("Win32_Share")之共享目录

热门文章

  1. 一篇深入剖析PCA的好文
  2. 在配置wem.xml后,Tomcat遇到问题,启动失败的解决方法
  3. Entity Framework - 基于外键关联的单向一对一关系
  4. shell 多进程
  5. 你所不知道的 CSS 动画技巧与细节
  6. centos下搭建多项目svn服务器
  7. Linux 命令大全之Red Hat 7常用命令总结二
  8. .net到Java那些事儿--structs做了那些事(二)
  9. 迈向angularjs2系列(1):typescript指南
  10. CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法