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.

关于这个文件系统。大家了解到这个基本知识就行了,知道他是怎么运作的,了解设计的精妙。

这是个如何将蚂蚁和大象优雅装进冰箱里的方法,真是十分精妙。

时间: 2024-10-06 06:33:33

Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里的相关文章

Linux的Ext2文件系统(Inode&Block)详解

前述:Linux系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不可以太小,太大会导致磁盘容量的浪费,太小会导致产生的文件无法存储的问题.在Linux里面文件是由两部分数据组成,一部分是metadata,另一部分是data.那么这些数据都存放在文件系统的什么地方呢?这就让我们必须得了解文件系统的Inode与Block的基本原理了,而Linux最传统的磁盘文件系统使用的是Ext2,所以我们了解下它的内部原理. 第一部分:磁盘的组成和分区(基础) 磁盘的机械部分: 1.圆形

linux 下跟文件系统详解

什么是根文件系统 根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行. 我们首先从主机上所安装的Linux操作系统中了解一些根文件系统的信息.比如在笔者工作的Linux桌面系统中可以得到下面的结果: # mount /dev/hda2 on / type ext3 (rw) none on /proc

linux下网络文件系统NFS服务的搭建

上节我们了解rsync工具的使用,在这里说下,当我们学习一个工具的时候,首先要想到的是这个工具是干嘛的,然后带着这个问题去完成这个实验,这样我们才能是事半功倍.我们前面说rsync是一个数据备份工具,他支持全网定时备份,增量和全量备份.工作中主要是以定时任务+rsync做定时备份,inotify+rsync做增量备份. 下面开始我们今天的内容NFS(网络文件系统).文件系统我们现在应该不陌生了吧!就是管理文件的系统.前面我们讲解磁盘管理的时候说道我们的操作系统也是通过文件系统来管理文件的,只不过

linux下的文件系统基本权限和高级权限的管理

文件系统基本权限和高级权限管理 一:实验要求 1:理解并运用文件基本权限 2:理解并运用文件高级权限 3:实战-创建一个让root都无法删除的黑客文件 二:实验验证步骤 1:文件基本权限 1):实验基本权限结构 2:文件权限结构 对于文件: r  ---  代表read 读的权限 w  - 代表write写的权限 x  -  代表执行的权限 对于目录: r  ---读(看到目录里面有什么) W  ---可以在文件先进行删除,新建 X----可以进入目录中   2:修改权限的相关命令: 1):Ch

linux下查看文件系统类型

1. df -hT命令   -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G) -T, --print-type      print file system type [[email protected] ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rhel-root xfs 18G 4.5G

【原创】AIX 下使用NFS挂载凝思linux下的文件系统出错记录

环境说明: 210.10.3.78 凝思Liunx 210.10.3.216 AIX 现象: 78共享,本机可mount,但216不能mount 操作过程如下(root): /* 凝思Liunx上操作 */ 共享: #/etc/rc.d/init.d/portmap start #/etc/rc.d/init.d/nfsserver start #vi /etc/exports 添加 /home  *(rw,sync) 挂载: mount -t nfs /home  /mnt/test 卸载:

Linux下分布式文件系统FastDFS安装与配置

1.fastdfs 分布式文件系统,对文件进行管理,主要功能包括文件存储.文件同步.文件访问(文件的上传和下载)等, 解决了大容量存储和负载均衡的问题. 2.fastdfs的两个核心分别是跟踪器(tracker)和存储节点(storage),其中tracker主要的功能是完成调度工作和实现负载均衡, storage主要的功能是存储数据. 3.fastdfs文件分布系统中实现文件上传下载的原理: 上传: 1)Client(客户端)要通过Tracker server(跟踪服务器)将文件上传到Stor

Linux下bash: scp: command not found问题 或者装ssh包时报错 Requires: libedit.so.0()(64bit)

    一.用scp命令从物理主机向CentOS 6.1虚拟机传送文件,提示以下错误:bash: scp: command not found到CentOS 6.1虚拟机查看也缺少scp命令.该虚拟机是同事安装的,还有其他命令也不完整,可能不是完整安装,缺了些包. 二.用以下方法解决: 1.在一台完整的CentOS 5.8查找scp所在的包:# which scp/usr/bin/scp# rpm -qf /usr/bin/scpopenssh-clients-4.3p2-82.el5 2.查出

linux ext2 文件系统学习

Linux  ext2文件系统理解 硬盘组成: 硬盘由多个圆形硬盘片组成.按照硬盘片能够容纳的数据量分为单盘和多盘.硬盘的数据读取主要靠机械手臂上的磁头,在机械手臂上有多个磁头.机械手臂不动硬盘旋转一周划过的路径就是磁道.由于在一块硬盘上有多个硬盘片重叠放置,所以在硬盘旋转的时候在不同硬盘片上画出了多个相同的磁道,这些相同的磁道组成了柱面.柱面是分区的最小单位.由圆形向外画直线又可以将磁道划分为扇区,扇区是数据存储的最小单位,一个扇区的大小约为512字节. 磁盘容量 = 柱面 * 磁头 * 扇区