Linux  ext2文件系统理解

  1. 硬盘组成:

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

磁盘容量 = 柱面 * 磁头 * 扇区 * 512字节

2.分区:

在使用一块硬盘之前首先要做的就是分区。分区的主要目的是告诉操作系统这块硬盘从哪个柱面到哪个柱面是可用区域。一块硬盘可以分成多个区,例如windows下的C、D、E、F。那么这些分区信息存储在什么地方? 在硬盘的第0轨上存储的是MBR(Master Boot Recorder)主引导区,分区信息就存储在MBR中。正因为如此,MBR是计算机启动时第一个读取的区域。

因为MBR的大小是存在限制的,最多只能够存储四个分区信息,这也是主分区和扩展分区最多只能有四个的原因。可以使用3P+E或者其他的方式对硬盘进行分区。

  1. 文件系统

在对硬盘进行分区了以后,要对分区进行格式化,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

  1. primary superblock : 存储分区信息的块
  2. Group descriptors : 存储块组信息的块
  3. Reserved GDT blocks : 预留块
  4. Block bitmap Inode bitmap: 分别表示块与inode是否可用,每一位表示一个块或者inode,为1表示存在有数据,为0表示没有存储数据为空
  5. inode table : 表示该块组包含的所有inode所在的块
  6. free Block, free inode : 空闲块和inode的数量
  7. free Block :空闲块所在块
  8. free inode : 空闲inode所在块

当你创建一个文件时 :

  1. 根据inode位图/块位图的信息,找到尚未使用的inode与块,进而将文件的属性与数据分别记入inode与块。
  2. 将刚刚使用的inode与块的号码告知superBlock、inode位图、块位图等,让这些数据更新信息。

Linux系统到底是如何读取一个文件内的内容呢?

目录:在Linux的ext2 文件系统建立一个目录时,ext2会给该目录分配一个inode与至少一个块。其中,inode记录该目录的相关属性,并指向分配到的那个块;块记录在这个目录下的相关文件的关联性 。

文件: 在ext2文件系统下创建一个文件时系统至少分配一个inode和对应于文件大小的块,inode本身并不记录文件名,它只记录文件相关属性,文件名则记录在该文件所属文件夹的块区域。在该文件夹的块区域记录了文件名和inode的相关连接。所以在ext2 文件系统下读取一个文件内容时,Linux会首先由根目录/获取该文件的上层目录所在的inode,在由该inode获取该目录所属的块,在块中找到该文件的inode,再通过该文件的inode得到该文件对应的块。例如读取 /etc/crontab文件:

linux ext2 文件系统学习的更多相关文章

  1. Linux ext2文件系统

    Linux最传统的磁盘文件系统(filesystem)使用的是ext2 1.ext2文件系统结构ext2文件系统划分为多个块组,每个块组拥有独立的inode/block,一个文件系统只有一个Super ...

  2. Linux ext2文件系统之初步思考

    数据存放在磁盘中,磁盘最小存取单位sector(512Byte);文件系统中存储的最小单位是 块(Block),大小通常(1KB,2KB,4KB...), 一个block对应多个sector,因而可用 ...

  3. Linux EXT2 文件系统

    磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件.文件系统的目的就是组织和管理磁盘中的文件.在 Linux 系统中,最长见的是 ext2 系列的文件系统.其早期版本为 ex ...

  4. ext2文件系统学习(二)—— 目录磁盘结构

    创建镜像.mount等操作和上一篇一样,测试目录结构如下: 一些文件系统信息如下: Block size:             1024 Inodes per group:  128 Inode ...

  5. ext2文件系统学习(一)

    源码分析网上太多了,不写了,记录简单的实践步骤: 1. 创建ext2文件镜像并映射 cd /tmp count= mkfs.ext2 ext2-1M.img mkdir ext2 sudo mount ...

  6. linux文件系统学习

    linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, sh-# mount rootfs on / type r ...

  7. [Linux] linux文件系统学习

    linux系统支持很多种文件系统. 1. 如何确认当前系统挂载了哪些文件系统? 使用mount命令可以查看当前系统上已经挂载了哪些文件系统, lqt@lqt-ThinkPad-T420:~$ moun ...

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

    这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...

  9. 文件系统的特性,linux的EXT2文件系统【转】

    本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281 先来提出三个概念: - superblock - inode - bloc ...

随机推荐

  1. Java for LeetCode 036 Valid Sudoku

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  2. java读取本地properties文件

    package cn.edu.hbcf.pojo; import java.io.FileNotFoundException; import java.io.IOException; import j ...

  3. 爱改名的小融 2(codevs 3149)

    3149 爱改名的小融 2  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description Wikioi上有个人 ...

  4. 怎么判定一个mac地址是multicast还是unicast.

    MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置.MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique ide ...

  5. hdu 2191 完全背包

    为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最多能采购多少 ...

  6. 自动、手动同步FishEye, JIRA的联系人信息

    背景:在将FishEye和JIRA配置成共用用户信息,并且可以在二者之间自由切换,此时FishEye里的用户信息是不能更改的,只有更新了JIRA,然后让其同步至FishEye才行,如何进行设置呢? 答 ...

  7. x264测试代码

    建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...

  8. 建模算法(十)——灰色理论之关联度分析

    一.数据变换技术 为了保证建模的质量和系统分析结果的准确性,对原始的数据要进行去量纲处理. 1.定义 设有序列,则成映射为序列x到序列y的数据变换. (1) f 是初值化变换. (2) f 是均值化变 ...

  9. CentOS6.5升级内核到3.10.28 --已验证

    本文适用于CentOS 6.4, CentOS 6.5,估计也适用于其他Linux发行版. 1. 准备工作 确认内核及版本信息 [root@hostname ~]# uname -r 2.6.32-2 ...

  10. Source insight怎样恢复默认界面布局 窗口嵌入

    先关闭,然后在c盘的文档的Source Insight\Settings目录里面,将CF3文件剪切到别的地方,再打开 不过有些其它设置也会丢失,需要重新设置,参见Source_Insight破解版下载 ...