Linux系统的Ext2文件系统

  下面我们正是你介绍Ext2文件系统

  Ext2文件系统使用以inode为基础的文件系统。

  文件系统一开始将inode与block规划好了,除非重新格式化,否则inode与block固定后就不再变动,但是当inode与block数量过多时,就不易于管理。因此Ext2在格式化的时候基本上是区分为多个块组(block group),每个块组都有独立的/inode/block/superblock系统。Ext2格式化后如图

  在整体的规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装引导装载程序。因此可以将不同的引导装在程序安装到个别的文件系统最前端,而不用覆盖整块硬盘唯一的MBR(主引导分区)。具体每个内瓤说明如下:

  1、data block (数据块):用来放置文件内容。在Ext2文件系统中所支持的block大小有1KB,2KB及4KB三种,在格式化block大小的时候就固定了,且每个block都有编号,以方便inode记录。

但是,由于block大小的区别,会导致文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同,block大小而长生的Ext2文件系统限制如下

block大小 1KB 2KB 4KB
最大单一文件限制 16GB 256GB 2TB
最大文件系统容量 2TB 8TB 16TB

限制:

  1)、原则上,block大小与数量在格式化完就不能再改变

  2)、每个block内最多只能够放置一个文件的数据

  3)、承上,如果文件大于block的大小,则一个文件会占用多个block数量

  4)、承上,如果文件小于block,则该block的剩余空间就不能再被使用(磁盘空间会浪费)

  2、inodetable(inode表格):inode的内容主要记录文件的属性以及该文件实际数据是放置在哪几号block内,基本上,inode记录的文件数据至少有下面这些:

    1)、该文件的访问模式

    2)、该文件的所有者与组

    3)、该文件的大小

    4)、该文件创建或状态改变的时间

    5)、最近一次的读取时间

    6)、最近修改的时间

    7)、定义文件特性的标志

    8)、该文件真正内容的指向

    9)、每个inode大小均固定在128bytes

    10)、每个文件都仅会占用一个inode而已

    11)、承上,因此文件系统能够创建的文件数量与inode的数量有关

   12)、系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能开始实际读取block的内容

  inode/block与文件大小的关系:

  inode要记录的数据非常多,但只有128bytes,而inode记录一个block号码要花掉4bytes,假设一个文件有400MB且每个block为4KB,那么至少要10万条block号码的记录,inode哪有这么多可记录

的信息?为此我们系统很聪明将inode记录block号码的区域定义为12个直接,一个间接,一个双间接与一个三间接记录区。

  图中最左边为inode本身(128bytes),里面有12个直接指向block号码的对照,这12个记录可以直接取到block号码,也就是直接寻址。至于所谓的间接就是再拿一个block来当作记录block号码的记录区,如果文件过大时,就会使用间接的block来记录编号,也就是间接寻址。同理,如果文件持续长大,就会利用双间接。

  这样inode能够指定多少个block呢?以较小的1KB的block来说明。可以指定的情形如下:

  1)、12个直接指向:12*1K=12K,由于是直接指向,所以总共可以记录12条记录

  2)、间接:256*1K

    每条block号码的记录会花去4bytes,因此1K的大小能记录256条记录

  3)、双间接:256*256*1K=256^2K

  4)、三间接:256*256*256*1K=256^3K

  总额:将直接、间接、双间接、三间接加总,得到12+256+256^2+ 256^3=16GB,此时我们知道当文件系统将block格式化为为1K大小时,能够容纳的最大文件为16GB,比较一下文件系统线指标的结果可发现是一致的。但这个方法不能用在2K及4K的block大小的计算中。因为大于2K的block将会收到文件系统本身的限制

  3、Superblock(超级块)

    superblock是记录整个文件系统相关信息的地方,没有superblock,就没有这个文件系统了,它记录的主要信息有:

    1)、block与inode的总量

    2)、未使用与已使用的inode/block数量

    3)、block与inode的大小

    4)、文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息

    5)、一个validbit数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1

    superBlock是非常重要的,因为我们这个文件系统的基本信息都写在这里。此外,每个block group都有可能含有superblock。但是我们也说一个文件系统应该仅有一个superblock。事实上除了第一个blockgroup内会含有superblock之外,后续的block group 不一定含有superblock,若含有superblock则也是作为第一个superblock的备份而已。

  4、File System Description(文件系统描述说明):这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间

  5、block bitmap(块对照表):如果你想要添加文件时总会用到block。那你要使用哪个block来记录呢?当然是选择”空的block“来记录新文件的数据。那你怎么知道哪个block是空的?这就得通过

block bitmap 的辅助,从block bitmap 当中可以知道哪些block是空的,因此我们的系统就能很快速找到可使用的空间来处理文件。同样,如果删除某些文件时,那么哪些文件原本占用的block号码就得释放出来,此时在block bitmap当中相对应到该block号码的标志就得修改成为”未使用中“。这就是blockmap的功能。

  6、inode bitmap(inode对照表):这个与block bitmap功能类似,只是block bitmap记录的是使用与未使用的block号码,inode bitmap记录使用与未使用的inode号码。

  查看文件系统

  刚才谈到的各部分数据都与block号码有关,每个区段与superblock的信息都可以使用dumpe2fd这个命令来查询,利用dumpe2fs可以查询到非常多的信息。

  与目录树的关系

    目录与文件在Ext2文件系统当中是如何记录数据的呢?基本上可以这么说

    1、目录:当我们在Linux的ext2文件系统新建一个目录时,ext2会分配一个inode与至少一块block给该目录。其中inode记录该目录的相关权限与属性,并可记录分配的那块block号码。而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。也就是说目录所占用的block内瓤在记录如下的信息:

    1)、如果想实际查看root目录下的文件所占用的inode号码时,可以如下操作:

  2、文件:当我们在Linux下的ext2新建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件

  3、目录树读取:因为文件名是记录在目录的block当中,因此当我们要读取某个文件时,就务必会经过目录的inode与block,然后才能找到那个待读取文件的inode号码,最终才会取到正确的文件的block的内容。由于目录树是从根目录开始读取,因此系统通过挂载的信息可以找到挂载点的inode号码,此时就能得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层向下读到正确的文件名。

3、文件系统大小与磁盘读取性能

  当一个文件系统规划的很大时,由于磁盘上面的数据经常变动,所以,整个文件系统上面的文件通常无法连续写在一起,即block号码不hi连续,而是填入式的将数据填入没有被使用的block中,如果写入的block很松散,那么就会有文件数据离散的问题发生。    

时间: 2024-10-20 19:31:41

Linux系统的Ext2文件系统的相关文章

《Linux学习并不难》文件系统管理(3):在Linux系统中创建文件系统

18.3  <Linux学习并不难>文件系统管理(3):在Linux系统中创建文件系统 使用mkfs命令可以在分区上创建各种文件系统.mkfs命令本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.这里的文件系统是要指定的,比如xfs.ext4.ext3.vfat或者是msdos等. 命令语法: mkfs [选项] [设备] 命令中各选项的含义如表所示. 选项 选项含义 -t <文件系统类型> 指定文件系统类型 -v 显示详细信息 例:为/dev/sda5磁盘分区创建xfs

Linux系统挂载NTFS文件系统(转载)

转自:http://hermesbox.blogbus.com/logs/47386987.html 今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其他同学们会有类似经历,于是尽量细致的记录于此.     无论是一块安装了Windows/Linux双系统的硬盘,还是通过USB连接的移动硬盘/U盘,都是可以挂载到Linux系统中的.不过由于Windows本身常用的文件系统包括fat32和NTFS,因此还是需要区别的.废话少说,进入正题. 系统环境如

在linux系统上建文件系统,建用户,修改用户所属组,重置用户密码

在linux系统上建文件系统,建用户,修改用户所属组,重置用户密码 实验背景:用户及空间 用户名:bosswlb    组别和附属组: bosswlb      主目录:/bosswlb            Shell:bash 空间: 新增    (新增/扩容) 5G   ■解锁  ■密码重置 abcd1234 第一点:建立新的文件系统 我们先来看下系统上现有的文件系统,如下图所示: 下面开始增加一块大小为5G的新盘,使用下面任意一个命令可以扫到新盘: 1.#echo '- - - '> 

df 显示目前在Linux系统上的 文件系统的磁盘使用情况

Linux系统: df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. 应用场景:检查磁盘内存使用状态,便于清理磁盘 语法:df [选项] [file] 中括号代表可选可省略项 显示指定磁盘文件的可用空间.如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示.默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示 常用命令: df -m | grep /LMONAM df -h --t

Linux系统开发 3 文件系统开发 文件/目录

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] Linux系统开发 文件操作 ext2文件系统了解 stat()函数 access()函数 chmod()函数 utime()函数 truncate()函数 link()硬链接函数 symlink()软链接函数 readlink()函数 unlink函数 rename函数() 目录操作 chdir()/fchdir() getcwd/getwd()/get_current_dir_name() pathco

fsck 工具 &mdash;&mdash;检查 与修复 Linux系统上的文件系统

可能由于昨天关电脑断电源的问题, 后来开机,直接出现如下界面: 心里想,不会吧,电脑怎么又出问题了吧(上周的时候,手贱,把装系统的硬盘分区设为了非活动分区,电脑就启动不来了,后来手动引导起来的:): 我仔细一个文字提示,需要让我在 initramfs 上手动运行一下 fsck 工具, 直接搜了一下什么是 fsck 工具,原来是用于检查与修复 文件系统的:      运行了以下命令,并且过程中的文字提示下,一直按 yes ,然后就修复成功了: fsck -t ext4 /dev/sda1 既然如此

Linux系统挂载NTFS文件系统

?? 今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其他同学们会有类似经历,于是尽量细致的记录于此.     无论是一块安装了Windows/Linux双系统的硬盘,还是通过USB连接的移动硬盘/U盘,都是可以挂载到Linux系统中的.不过由于Windows本身常用的文件系统包括fat32和NTFS,因此还是需要区别的.废话少说,进入正题. 系统环境如下:操作系统-- RHEL5,详细版本为:Red Hat Enterprise Linux Se

深入理解linux系统下proc文件系统内容

http://www.itshanghai.net/technology/2009/0209/article_238.html 另外,可以参考这个http://www.centos.org/docs/5/html/5.1/Deployment_Guide/ch-proc.html 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件

Linux磁盘管理——Ext2文件系统

前言 通常而言,对于一块新磁盘我们不是直接使用,而是先分区,分区完毕后格式化,格式化后OS才能使用这个文件系统.分区可能会涉及到MBR和GPT问题.至于格式化和文件系统又有什么关系? 这里的格式化指的是高级格式化,由于每种OS所设置的文件属性/权限并不相同, 为了能够操作这些文件,就需要对partion进行格式化,以满足OS能够利用的“文件系统格式(filesystem)”. 上面说对partion进行格式化,这种说法不严谨. 对于早期技术而言,可以认为Partion与FS是1:1的关系,这两种