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 ...
随机推荐
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
- phpAdmin安装
phpAdmin是和Navicat重复的功能 负责管理MySql数据库 不过他是使用浏览器进行管理MySql数据库 PHP环境搭建的完整步骤 http://www.cnblogs.com/azhe-s ...
- SQL数据库修改默认备份和恢复路径
每次都做数据恢复和备份的时候,点Add文件,系统会自动指定到一个默认路径,是SQL的安装目录,但是我的数据库不是备份在这里,每次都要更改有点麻烦. 如上图,更改这个有三个方法. 方法一:找到注册表,手 ...
- native2ascii.exe 字符转码与反转码
本人最近在做OAF的二次开发,在看别人写的代码时,发现总有类似这样的语句:”\u65e0\u6548\u7684GP\u9879\u76ee\u7f16\u53f7“,这些语句其实是用Java_hom ...
- Kafka简介
Kafka简介 转载请注明出处:http://www.cnblogs.com/BYRans/ Apache Kafka发源于LinkedIn,于2011年成为Apache的孵化项目,随后于2012年成 ...
- ARMGNU伪指令
符号定义伪指令 .global,.local,.set,.equ .global 使得符号对连接器可见,变为对整个工程可用的全局变量 .global symbol .local 表示符号对外部不可见, ...
- 【推荐】CentOS安装vsftpd-3.0.2+安全配置
注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. FTP的登录一般有三种方式,分别是: 匿名用户形式:默认安装的情况下,系统只提供匿名用户访问,只需要输入用户anonymous/f ...
- hadoop2.2.0伪分布式搭建3--安装Hadoop
3.1上传hadoop安装包 3.2解压hadoop安装包 mkdir /cloud #解压到/cloud/目录下 tar -zxvf hadoop-2.2.0.tar.gz -C /cloud/ 3 ...
- CentOS RedHat YUM 源扩展补充(32位、64位均有)
一般情况下强烈建议在CentOS6下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make ...
- spring-test测试demo
如果是maven项目,pom中增加如下依赖: <dependency> <groupId>org.springframework</groupId& ...