linux ext2 文件系统学习
Linux ext2文件系统理解
- 硬盘组成:
硬盘由多个圆形硬盘片组成。按照硬盘片能够容纳的数据量分为单盘和多盘。硬盘的数据读取主要靠机械手臂上的磁头,在机械手臂上有多个磁头。机械手臂不动硬盘旋转一周划过的路径就是磁道。由于在一块硬盘上有多个硬盘片重叠放置,所以在硬盘旋转的时候在不同硬盘片上画出了多个相同的磁道,这些相同的磁道组成了柱面。柱面是分区的最小单位。由圆形向外画直线又可以将磁道划分为扇区,扇区是数据存储的最小单位,一个扇区的大小约为512字节。
磁盘容量 = 柱面 * 磁头 * 扇区 * 512字节
2.分区:
在使用一块硬盘之前首先要做的就是分区。分区的主要目的是告诉操作系统这块硬盘从哪个柱面到哪个柱面是可用区域。一块硬盘可以分成多个区,例如windows下的C、D、E、F。那么这些分区信息存储在什么地方? 在硬盘的第0轨上存储的是MBR(Master Boot Recorder)主引导区,分区信息就存储在MBR中。正因为如此,MBR是计算机启动时第一个读取的区域。
因为MBR的大小是存在限制的,最多只能够存储四个分区信息,这也是主分区和扩展分区最多只能有四个的原因。可以使用3P+E或者其他的方式对硬盘进行分区。
- 文件系统
在对硬盘进行分区了以后,要对分区进行格式化,ext2是Linux标准的文件系统格式。上面说过扇区是数据存储的基本单位,但是扇区容量太小,如果以扇区作为文件的基本存储单位,那么会导致硬盘的多次访问,从而导致系统性能的下降。格式化分区的一个主要任务是确定最小的数据存储单位----块的大小。一个块是由多个扇区组成,即 块容量 = 扇区容量 * 2 ^n,也就是说当格式化分区以后,文件的存储将以块为最小单位,例如一个块的大小为1k,那么如果我要存储0.1k的文件,就需要分配一个块给这个文件,虽然有0.9k的容量浪费;再比如要存储一个9.5k的文件,就需要分配10个块给这个文件。在Linux ext2文件系统中块只用来存储文件内容数据,那么文件还有很多的属性信息存储在什么地方? ext2 文件系统提出了inode这个数据结构,使用这个数据结构存储文件的相关属性,例如访问权限,所有者,所属组还用对应文件内容数据的存储块指针信息等。(inode也是用一个或者多个块存储的)在块和inode数据结构提出以后,格式化分区仍然存在以下问题:
1) 分区信息如何存储?例如分区大小,起始和结束柱面、创建时间等。
2) inode信息如何组织?
在使用ext2格式格式化分区以后,分区中的块和inode会被进行编号。而且会将0~x(x会因不同分区而异)的块规划成一个大的块,称为superBlock,在superBlock中存储了该分区的一些信息,例如块数目,inode数目,分区创建时间等,而且还有多个类似 Group x:(Block x ~ y)(这里的x,y表示的是数值编号)单元,这些信息存储的是什么?在ext2文件系统中将所有的块和inode又组成成多个块组,每个块组包含多个块和inode,也就是说块和inode是以块组进行管理的。在块组中包含的信息有:
Group 0: (Blocks 0-32767) [ITABLE_ZEROED] 1.Checksum 0xb986, unused inodes 49 2.Primary superblock at 0, 3.Group descriptors at 1-2 4.Reserved GDT blocks at 3-1024 5.Block bitmap at 1025 (+1025), Inode bitmap at 1041 (+1041) 6. Inode table at 1057-1568 (+1057) 7.22987 free blocks, 49 free inodes, 480 directories, 49 unused inodes 8.Free blocks: 9392, 9436, 9444, 9496, 9567-9571, 9790-32767 9.Free inodes: 8144-8192 |
- primary superblock : 存储分区信息的块
- Group descriptors : 存储块组信息的块
- Reserved GDT blocks : 预留块
- Block bitmap Inode bitmap: 分别表示块与inode是否可用,每一位表示一个块或者inode,为1表示存在有数据,为0表示没有存储数据为空
- inode table : 表示该块组包含的所有inode所在的块
- free Block, free inode : 空闲块和inode的数量
- free Block :空闲块所在块
- free inode : 空闲inode所在块
当你创建一个文件时 :
- 根据inode位图/块位图的信息,找到尚未使用的inode与块,进而将文件的属性与数据分别记入inode与块。
- 将刚刚使用的inode与块的号码告知superBlock、inode位图、块位图等,让这些数据更新信息。
Linux系统到底是如何读取一个文件内的内容呢?
目录:在Linux的ext2 文件系统建立一个目录时,ext2会给该目录分配一个inode与至少一个块。其中,inode记录该目录的相关属性,并指向分配到的那个块;块记录在这个目录下的相关文件的关联性 。
文件: 在ext2文件系统下创建一个文件时系统至少分配一个inode和对应于文件大小的块,inode本身并不记录文件名,它只记录文件相关属性,文件名则记录在该文件所属文件夹的块区域。在该文件夹的块区域记录了文件名和inode的相关连接。所以在ext2 文件系统下读取一个文件内容时,Linux会首先由根目录/获取该文件的上层目录所在的inode,在由该inode获取该目录所属的块,在块中找到该文件的inode,再通过该文件的inode得到该文件对应的块。例如读取 /etc/crontab文件:
linux ext2 文件系统学习的更多相关文章
- Linux ext2文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是ext2 1.ext2文件系统结构ext2文件系统划分为多个块组,每个块组拥有独立的inode/block,一个文件系统只有一个Super ...
- Linux ext2文件系统之初步思考
数据存放在磁盘中,磁盘最小存取单位sector(512Byte);文件系统中存储的最小单位是 块(Block),大小通常(1KB,2KB,4KB...), 一个block对应多个sector,因而可用 ...
- Linux EXT2 文件系统
磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件.文件系统的目的就是组织和管理磁盘中的文件.在 Linux 系统中,最长见的是 ext2 系列的文件系统.其早期版本为 ex ...
- ext2文件系统学习(二)—— 目录磁盘结构
创建镜像.mount等操作和上一篇一样,测试目录结构如下: 一些文件系统信息如下: Block size: 1024 Inodes per group: 128 Inode ...
- ext2文件系统学习(一)
源码分析网上太多了,不写了,记录简单的实践步骤: 1. 创建ext2文件镜像并映射 cd /tmp count= mkfs.ext2 ext2-1M.img mkdir ext2 sudo mount ...
- linux文件系统学习
linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, sh-# mount rootfs on / type r ...
- [Linux] linux文件系统学习
linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, lqt@lqt-ThinkPad-T420:~$ moun ...
- Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里
这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...
- 文件系统的特性,linux的EXT2文件系统【转】
本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281 先来提出三个概念: - superblock - inode - bloc ...
随机推荐
- Java for LeetCode 061 Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...
- HDU1009老鼠的旅行 (贪心算法)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Java数据类型和运算符
一,数据类型分类(2种) 1. 基本数据类型(3种) 数值型: 整数类型(4种): byte(1字节):范围(-128~127): short(2字节):范围(-32768~32767): int(4 ...
- 开源混淆工具ProGuard配置详解及配置实例
ProGuard的作用: 1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 2.创建的程序和程序库很难使用反向工程. 3.所以它能删除来自源文件中的没有调用的代码 4.充分利 ...
- 调试工具GDB详解
1 简介 2 生成调试信息 3 启动GDB 的方法 4 程序运行上下文 4.1 程序运行参数 4.2 工作目录 4.3 程序的输入输出 5 设置断点 5.1 简单断点 5.2 多文件设置断点 5.3 ...
- php 指针遍历、预定义数组和常用函数
<?php /*//定义 $attr = array(1,2,3); $attr[] = 1; $attr = array("one"=>"hello&quo ...
- 14、Silverlight 滤镜到 UWP 滤镜的移植(二)
上一篇文章 大致介绍了,移植戴震军大哥的 Windows Phone7 中,对于高斯模糊滤镜的移植,主要是 int[] 数组和 byte[] 数组的互相转换.同样的思路,只要把前文的方法封装一下,就能 ...
- Wcf for wp8 上传图片到服务器,将图片名字插入数据库字段(五)
环境:.NET Framework 3.5 服务: IIS EXpress托管 WCF服务程序 配置:Web.config <!--<connectionStrings> <a ...
- hdu 5312 数学
- C# GUID
全局唯一标识符,简称GUID,是一种由算法生成的唯一标识.GUID的主要目的是产生完全唯一的数字. 生产GUID语句: System.Guid.NewGuid().ToString();