Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里
这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争。最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间。学习吧又不想学习,看电视娱乐吧也没有心情。在这种状态中,我度过了星期天,到了今天我才趴在窗扇看了一会linux。这一部分之前也看过,不过是走马观花式的看,并没有投入精力。今天看了下,发现其实windows的文件系统和linux还是有很多不同的。从设计的角度上,linux的文件系统似乎更加聪明,看完这部分,我也更喜欢linux了。
在看linux文件系统之前我建议我们还是了解下windows的文件系统。这样有助于我们理解linux的文件系统,也更能体会到linux文件系统领先于windows的原因。现在我们的电脑大部分都是NTFS的文件系统,这主要是解决FAT32单文件不能超过4G的弊端,当然还有其他的改进。现代一些软件特别庞大,网上下载一个LOL是6G多(已经分开为几个文件了)。所以为了适应快速发展的软件行业,现在windos系统主要是NFTS文件系统的。
我们的U盘大部分是FAT文件系统,那么FAT是如何进行文件存储的。通常情况下U盘分成很多数据块,一个数据块为为一个block。假设一个block为4k,一个文件为1M。则需要252个block来储存这个文件。那么读取的时候是如何将这256个block都读取到呢?从第一个block开始读起,每一个block最末端标注了第二个block的位置,依次类推直到读到最后一个block。假如我有一个文件有一个G,是不是要一个个的读下去等所有的块都读完了才能组成我所需要执行的文件吗?这样效率会不会很低?下面这张图描述了FAT32文件系统读取文件的过程。这个过程有点像成语中描述的顺藤摸瓜、按图索骥一样。没有图说个毛,还是画图说下。

电脑重装了win10 还没有装画图软件,所以只能献丑了,但是大致的意思已经说明清楚了。每一个文件块后面都标明了下一个文件块的位置,然后依次去寻找。
但是linux的EXT2文件系统不是这样找文件的,而是用了一种很聪明的方式。linux的文件系统有三部分构成,super block、inode,block。
super block 主要用来记录该文件系统的整体信息,相当于总管家,记录的信息包括inode block的总量,已经使用的量,剩余量,文件系统的格式等。
inode(我总是拼写成innodb)用来记录文件的属性,一个文件占用一个inode。同时记录该文件的block号码。
block 是实际上记录文件内容的容器。当文件很大的时候会使用很多block来装载。如下图显示:

上图描述的情况更加复杂。因为一个inode 固定大小为128byte。一个block的大小根据设置不同可能是1kb 2kb 或者4kb。
inode这128byte中记录了那些信息呢:
该文件的访问方式:read/write /excute
该文件的所有者所属组:owner/group
该文件的大小
该文件的三个时间:ctime atime mtime
定义该文件的标志:flag setUID。
该文件真正内容的指向:pointer
除此之外一个inode可以指定12个block的文件编号。
上面的图总结为一句话:12个直接、一个 间接、一个双间接、一个三间接记录区。
假若一个block是1kb。那么
12个直接指向:12 * 1 = 12k。
一个间接:一个block记录256条记录。256 * 1k = 256kb
双间接: 一个block存储存储256个block的位置。这256个block全都是存指向block数据的。
数据量为:256 * 256 * 1k
三间接: 256 * 256 * 256 * 1kb。
总额: 12k + 256kb + 256 * 256+ 256 * 256 * 256 = 16GB.
关于这个文件系统。大家了解到这个基本知识就行了,知道他是怎么运作的,了解设计的精妙。
这是个如何将蚂蚁和大象优雅装进冰箱里的方法,真是十分精妙。
Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里的更多相关文章
- 文件系统的特性,linux的EXT2文件系统【转】
本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281 先来提出三个概念: - superblock - inode - bloc ...
- 全面了解Linux下Proc文件系统
全面了解Linux下Proc文件系统 Proc是一个虚拟文件系统,在Linux系统中它被挂载于/proc目录之上.Proc有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非 ...
- linux下的文件系统
转http://www.cnblogs.com/yyyyy5101/articles/1901842.html 谈谈个人对于文件系统的认识,其实这也体现了计算机操作系统的抽象:你不用管计算机中的文件如 ...
- Linux中ext2文件系统的结构
1.ext2产生的历史 最早的Linux内核是从MINIX系统过渡发展而来的.Linux最早的文件系统就是MINIX文件系统.MINIX文件系统几乎到处都是bug,采用的是16bit偏移量,最大容量为 ...
- Linux下删除文件系统空间不释放的问题
删除了Linux下的一个文件,但是系统空间并没有被释放. 如下:/home/hadmin/data/hadoop 使用了1.3T的空间,但是实际只使用了600多G 原因是我删除了一个600多G的文件, ...
- <解说linux下proc文件系统>
proc文件系统的作用是访问系统内核信息 proc不是一个真实的文件系统,它不占系统的外存空间,只是以文件的形式为用户访问linux内核数据提供接口,因为系统内核总是动态的变化,所以我们所捕捉到的也只 ...
- Linux下的文件系统2
2017-03-13 上文针对VFS的基本信息做了介绍,并简单介绍了VFS涉及的几个数据机构,本节结合LInux源码,对各个结构之间的关系进行分析. 一.总体架构图 总体架构图如上图所示,结合进程访问 ...
- linux下查看文件系统类型
1. df -hT命令 -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) -T, --pr ...
- Linux下查看文件系统磁盘使用
[root@localhost ~]# df -h 可以查看所有文件系统的磁盘使用情况 du --max-depth=1 -h 可以查看当前目录下各子目录的磁盘使用情况 参考:http://www.2 ...
随机推荐
- MS SQL 2008 发布订阅配置错误总结
最近在配置SQL 2008的发布订阅功能时,遇到了几个小错误,顺便归纳总结一下(以后碰到各类关于发布订阅的错误都将收录.更新到这篇文章),方便自己在以后碰到这类问题时,能够迅速解决问题.毕 ...
- springMVC基础controller类
此文章是基于 搭建SpringMVC+Spring+Hibernate平台 功能:设置请求.响应对象:session.cookie操作:ajax访问返回json数据: 创建springMVC基础con ...
- log4j2 不使用配置文件,动态生成logger对象
大家平时使用Log4j一般都是在classpath下放置一个log4j的配置文件,比如log4j.xml,里面配置好Appenders和Loggers,但是前一阵想做某需求的时候,想要的效果是每一个任 ...
- 利用keepalived和haproxy配置mysql的高可用负载均衡
实验系统:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64) 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:k ...
- 报表软件JS开发引用HTML DOM的windows对象
HTML DOM是W3C标准(是HTML文档对象模型的英文缩写,Document Object Model for HTML). HTML DOM定义了用于HTML的一些列标准的对象,以及访问和处理H ...
- monkey之monkey简介
1.Monkey 是什么 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...
- CANopen学习——OSI模型复习
CanOpen协议实现了物理层和数据链路层,OSI模型是完整的7层. OSI模型网络七层包括物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 物理层:提供信息传输的物理连接通道,包括使用的 ...
- frakti && RunPodSandbox 源码分析
listen = flag.String("listen", "/var/run/frakti.sock", "...") hyperEnd ...
- Linux 之 GCC 和 GDB
1 GCC = GNU C Compiler 1) pre-processing (预处理) $ gcc -E -o hello.i hello.c // -E 预处理后停止 2) compil ...
- hdu-5977 Garden of Eden(树分治)
题目链接: Garden of Eden Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...