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. 如何破解excel宏的密码

    http://zhidao.baidu.com/question/140107193.html 最近下载了一个excel模板,使用excel宏编的,但实际需要需更改一下,但是他设置了工作表密码保护,谁 ...

  2. 【JAVA、C++】LeetCode 018 4Sum

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. 4.django笔记之admin

    作者:刘耀 QQ:22102107 django-Admin django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之 ...

  4. poj 2136 Vertical Histogram 解题报告

    题目链接:http://poj.org/problem?id=2136 题意不难理解,就是输入四行字符串(每行字符总数不超过72个),统计26个英文字母的数目,并按柱状图的形式输出.我的思路就是,先用 ...

  5. Mysql 5.6.17-win64.zip配置

    第一大步:下载. a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是 ZIP Archive 版的,win7 64位的机器支持这个,所以我建议都用这个.因为这个简单嘛,而且还干净. 地址见图 拉倒最下面 ...

  6. 基数排序(radix sort)

    #include<iostream> #include<ctime> #include <stdio.h> #include<cstring> #inc ...

  7. Animation & Property Animation 使用

    本篇主要讲Animation 和 Property Animation的使用,最后会讲QQ管家桌面火箭作为例子: 在Android中开发动效有两套框架可以使用,分别为 Animation 和 Prop ...

  8. 谈谈Objective-C的警告 (转)

    原文地址:http://onevcat.com/2013/05/talk-about-warning/ 一个有节操的程序员会在乎自己的代码的警告,就像在乎饭碗边上有只死蟑螂那样. ——@onevcat ...

  9. 在qq中可以使用添加标签功能

    而在sina中不可以,现在就保持一致吧!那么每天使用的日志主要是记录工作项目上的问题还有生活的感受

  10. Javascript操作剪切板数据(支持IE、Chrome、360、搜狗),亲测!

    clipboarddata只能在IE浏览器中使用,在chrome下会提示对象未定义!以下的方法支持IE.Chrome.360.搜狗等浏览器,其它浏览器还未验证. <!DOCTYPE html&g ...