看了鸟哥的linux第8章,有关磁盘及文件系统的章节之后,觉得有必要记录一下。

鸟哥linux第三版基础篇,使用的是centos5.x,文件系统为Ext2。这个文件系统还是很有必要学习一下的,作为linux家族一种古老和通用的文件系统,个人觉得挺不错。

首先最基本的,要了解一下磁盘的构成。

磁盘的物理组成在鸟哥linux第零章里面就介绍过, 同时第三章谈过分区的概念, 详细的内容可以查阅那两章自行复习哦!

对于Ext2文件系统来说,文件系统通常会将权限属性放置到 inode 中,而实际数据则放置到 data block 区块中。还有一个超级块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

  • superblock:记录文件系统的整体信息,包括inode和block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block 号码;
  • block:实际记录档案的内容,若档案太大时,会占用多个 block 。

每个文件都会占用一个inode和多个block,inode可以理解为索引节点,同时inode中也包含文件的相关属性。所以学过操作系统原理的同学也该就明白了,对于Ext2文件系统来讲,其实就不存在所谓碎片整理一说了。这里可以将Ext2和FAT进行一个比较:

Ext2文件系统

FAT 文件系统

通过以上比较可以看出,Ext2和FAT存取方式的巨大差别。FAT 这种格式的文件系统没有 inode 存在,所以 FAT 没有办法将这个文件的所有 block 在一开始就读出来。它需要知道一个文件的一个物理块地址,而每个物理块中又包含后一个物理块的地址,就如第二张图所示。如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容!而Ext2就不存在这个问题了。

我们说在Ext2中,每个文件都有一个inode,这个inode作为索引节点指向每一个文件存放的物理块block,而文件系统一开始就将 inode 与 block 的大小规划好了,想要更改,就要重新格式化。

此外Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。


这样分group更加便于管理

至于每一个区块群组(block group)的几个内容说明如后:

  • data block(数据区块)
    进行文件的存放,Ext2文件系统中,block的大小可以是1KB,2KB,4KB。每个block都有自己的编号,这个编号就是inode用以进行寻找物理块的最重要的一个信息。不同block大小所影响的单个文件大小是不同的。不过若文件大小小于block大小的时候,也是会占用一个block,这就会带来空间的浪费,所以也就是平时看到的,一个文件实际大小与所需空间大小不同的原因了。

  • inode table (inode 表格)
    存放着inode。可以这么理解,inode有多少,就能存放多少个文件(因为一个文件要占用一个inode)。基本上,inode 记录的档案数据至少有底下这些:

  • 该档案的存取模式(read/write/excute);
  • 该档案的拥有者的群组(owner/group);
  • 该档案的容量;
  • 该档案建立或状态改变的时间(ctime);
  • 最近一次的读取时间(atime);
  • 最近修改的时间(mtime);
  • 定义档案特性的旗标(flag),如 SetUID…;
  • 该档案真正内容的指向 (pointer);

inode的数量和大小也是在格式化时就已经固定了,就Ext2来说,每一个inode大小为128B,而每个inode当中的信息的确特别多,每记录一个block编号又要占据4B,假设一个文件有 400MB ,每个 block 为 4K 时, 那至少也要十万个 block 号码的记彔!感觉明显不够用啊。这里就要提到Ext2当中比较高明的一点了,也就是操作系统概念当中的混合索引概念。


inode当中进行索引的部分,包含两种,一种直接,也就是直接记录了存储文件的block的编号,另一个是间接,以一级间接为例,也就是inode当中先指向一个block,将这个block不作为直接存储文件的块,而是通过将这个block进行延伸,用它存储文件当中其他block的编号,那么二级间接和三级间接也就是同一个原理,间接的越多,寻址的范围越广。inode当中,包含12个直接寻址单元,一个一级间接寻找单元,一个二级,一个三级。

举一个例子来说,以4KB大小的block为例,每个block编号需要4B,那每个block当中又可以寻址4KB / 4B = 1K个block,那么:

  • 12个直接寻址——> 12*4KB = 48KB
  • 一级间接——>1K * 4KB = 4MB
  • 二级间接——>1K * 1K * 4KB = 4GB
  • 三级间接——>1K * 1K * 1K * 4KB = 4TB

这样,一个inode就可以寻址一个48KB+4MB+4GB+4TB的文件了,这么大的单个文件容量应该足够用了吧~

由此,Ext2文件系统的基本原理就是这样,的确很高明的文件系统。更多的内容,大家可以去查阅《鸟哥的linux私房菜 基础篇》,附上共享的连接吧,http://pan.baidu.com/s/1mgsqMpE

鸟哥linux——Ext2文件系统基本原理相关推荐

  1. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  2. 鸟哥linux摘要-Linux复习必备(Linux命令)

    以下内容可能比较少,如要深入了解,可查阅相关书籍,敬请谅解 鸟哥Linux私房菜摘要 文章目录 鸟哥Linux私房菜摘要 1.Linux是什么 1.1 Linux是什么 1.1.1 Linux是什么 ...

  3. 鸟哥linux私房菜第6章笔记

    鸟哥linux私房菜第6章笔记 文件权限 修改 chgrp [-R] groupname filename //修改文件所属组chown [-R] ownername[:groupname] file ...

  4. linux目录表及功能n鸟哥,鸟哥linux学习之-资料与目录管理

    鸟哥linux学习之--文件与目录管理 目录与路径 相对路径:由当前目录算起 绝对路径:由根目录算起,linux的根目录为"/" 几个目录符号: . 表示当前目录 .. 表示上一层 ...

  5. linux目录表及功能n鸟哥,鸟哥linux学习之-文件属性跟系统目录

    鸟哥linux学习之--文件属性和系统目录 linux文件属性 执行ls -l命令后,出现如下的结果 属性         链接数 所有者  所在群组        文件大小     日期       ...

  6. 新版鸟哥Linux私房菜资料

    新版鸟哥Linux私房菜 新版鸟哥该教程内容丰富全面,基本概念的讲解非常细致,深入浅出.各种功能和命令的介绍,都配以大量的实例操作和详尽的解析.是初学者学习Linux不可多得的一本入门教程. 如何获取 ...

  7. 【Linux系统】Linux EXT2文件系统

    Linux EXT2文件系统 0 引言 1 基本结构 1.1 Block group 1.2 Boot group 2 Block group 的组成 2.1 Superblock(超级块) 2.2G ...

  8. 鸟哥linux学习途中感言-误删除/bin目录

    linux 对大家而言也许还是有点神秘的东西!想把它弄明白到底跟windows及其他OS有多大区别,这也许是许多刚刚进入linux学习的初心!我也和大家一样开始了鸟哥linux学习之路.     li ...

  9. 精读鸟哥linux私房菜-笔记介绍

    本专栏的设立,是为了详细记载本人阅读<鸟哥linux私房菜>的思考与感悟. 在大二学了一整年的CS:APP之后,本人被linux操作系统的强大功能所吸引,因此希望从一个全新的角度,即跟随国 ...

  10. 鸟哥Linux私房菜

    Linux相关知识: 鸟哥Linux私房菜   真是人间美味啊! 『Linux 基础篇』: 引言: 这部份包括了早期的Red Hat 6.x以及 鸟哥写的一.二版的基础篇各章节文章汇整! 第一部份:L ...

最新文章

  1. linux shell 算术运算{expr、bc、dc、(( ))和[ ]}
  2. 【响应式Web前端设计】:link、:hover、:active和:visited的区别
  3. 设计模式之单例模式实践
  4. php获取服务器名称,PHP 获取服务器详细信息
  5. P8215-[THUPC2022 初赛]分组作业【网络流】
  6. long转string mybatis_Spring+Mybatis类型转换的问题,oracle数据库中有一个clob类型,怎样在查询以后转换为String类型?...
  7. Linux中expect命令实现交互,修改VNCPASSWD
  8. 域渗透——Pass The Hash Pass The Key
  9. 《神经网络与深度学习》邱锡鹏编程练习_第一章numpy_tutorial答案分享
  10. 27、想安装网络摄像机看看 PoE交换机和摄像机如何连接
  11. 云硬盘(Elastic Volume Service,EVS)
  12. ipad使用计算机的图片大全,三种方式备份 iPad 照片
  13. linux启用dcb步骤,DCB文件擴展名: 它是什麼以及如何打開它?
  14. Egret性能优化之优化渲染
  15. unity触发时播放音效
  16. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
  17. JVM内存模型以及JVM内存模型图
  18. 为什么你看书记不住,记住不会用?-我的技术学习方法论
  19. EasyX学习笔记(二、黑客帝国数据流)
  20. 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (“@xx“): 对于类型特定的元数据,数据类型 0x62 (sql_variant)的类型无效。

热门文章

  1. java -pth_javah 详解
  2. 在微型计算机汉字系统中一个汉字机内码,一个汉字的机内码在计算机中用2个字节表示。...
  3. 宋浩老师线性代数知识卡片
  4. RxJava+Retrofit+MVP+Dagger2 谷歌四件套
  5. es6学习推荐网址(阮一峰)
  6. java html转word!
  7. 极化码理论及算法研究后续(代码讲解)
  8. IAR Embedded WorkBench FOR 8051破解
  9. linux内核make menuconfig配置
  10. 酷狗音乐api接口php,【教程分享】酷狗音乐API接口大全(40+个)