• 第十一章学习心得


    一、梗概

    • 多年来,Linux 一直使用EXT2(Card等 1995)作为默认文件系统。EXT3(EXT3,14)是 EXT2 的扩展。EXT3 中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的 EXT3 文件系统与 EXT2 文件系统相同。EXT3 的最新扩展是 EXT4(Cao 等 2007)。EXT4 的主要变化是磁盘块的分配。在 EXT4中,块编号为48位。EXT4不是分配不连续的磁盘块,而是分配连续的磁盘块区,称为区段。除了这些细微的更改之外,文件系统结构和文件操作保持不变。本书的目的是讲授文件系统的原理。主要目标并非实现大的文件存储容量,而是重点论述文件系统设计和实现的原则,强调简单性以及与 Linux 的兼容性。*

    二、知识点归纳

    1、超级块
    如果说inode块是Unix操作系统中文件的核心,那么超级块就是文件系统的心脏。启动Unix操作系统后,发现某个文件系统无法使用,很有 可能就是超级块出现了问题。为什么这个超级块有这么大的作用呢?主要是因为在超级块中保存了全局文件信息,如硬盘已用空间、数据块可用空间、inode结 点信息等等。做一个形象的比喻,这个超级块就好像是企业的资产负债表,一个文件系统中有哪些资源都记录在这个表中。
    2、块组描述符
    块组描述符表的起始地址位于超级块所在块的下一个块,在整个文件系统中有很多块 组描述符表的备份,备份的方式具体分为两种:
    (1) 文件系统不具备稀疏超级块特性。
    如果文件系统不具备稀疏超级块特性,那么在每个块组中都会有一个超级块的备份, 同时也有块组描述符表的备份。
    (2) 文件系统具备稀疏超级块特性。
    如果文件系统具备稀疏超级块特性,那么只在块组号是3、5、7的幂的块组(如1、3、 5、7、9、25、49等)内才对超级块和块组描述符表做备份,其他块组内则没有备份。

    3、索引节点
    理解inode,要从文件储存说起。
    文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

    操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
    文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
    每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

    inode包含文件的元信息,具体来说有以下内容:
    1)文件的字节数
    2)文件拥有者的User ID
    3)文件的Group ID
    4)文件的读、写、执行权限
    5)文件的时间戳,共有三个:
    ctime指inode上一次变动的时间
    mtime指文件内容上一次变动的时间
    atime指文件上一次打开的时间。
    6)链接数,即有多少文件名指向这个inode
    7)文件数据block的位置*
    

    可以用stat命令,查看某个文件的inode信息: 
      stat example.txt
    i_block[15]数组包含的磁盘块指针:

    4、文件系统结构
    EXT2文件系统的主要组成结构有:inode table(inode表格)、data block(信息区块)、superblock(超级区块)、filesystem description(文件系统描述说明)、inode bitmap(inode对照表)、block bitmap(区块对照表)等。
      在EXT2文件系统中,文件的权限、属性与文件的内容是分开存储的,文件的权限和属性都存储在inode中,而文件内容则存储在block中。inode和block的大小和数量都是在格式化(即文件系统创建)的时候就已经固定了的。每个inode的大小均为128bytes(ext4与xfs可以设置256bytes),每个文件仅占用一个inode,所以文件系统中能够建立的文件数量与inode的数量有关。block有1k,2k和4k三种大小,所以当文件内容的大小超出block的大小时就需要多个block来存储了。
    每个inode和block都是有编号的。inode中不仅存储了文件的权限和属性,也存储了文件内容存放的所有block的编号,这样只要找到文件的inode就能根据inode中记录的block的编号一次性把所有存放该文件内容的block的数据全部读取出来了。如图:

    问题来了,记录一个block编号需要4bytes的空间,如果一个文件比较大的话,需要的block的数量是比较多的,但是inode只有128bytes啊,怎么记录得了那么多的block编号呢?其实并不是所有的block编号都直接记录在inode中的,当文件占用的block数量比较多的时候,系统会拿出一些block专门来记录文件内容block的编号,然后inode只要记录这些block的编号就可以读取到文件内容block的编号了。EXT2把inode中记录blok编号的区域定义为12个直接,一个间接,一个双间接,和一个三间接记录区。*
    三、实践内容

    通过mkfs创建虚拟磁盘

    Linux下的命令:
    mke2fs [-b blksize -N ninodes] device nblocks
    

    在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
    例:

  • 相关阅读:
    【转】Google 的眼光
    【转】不要去SeaWorld
    【转】Tesla Autopilot
    【转】Tesla Model X的车门设计问题
    【转】Tesla Model S的设计失误
    【转】编程的智慧
    【转】智商的圈套
    【转】创造者的思维方式
    【转】恶评《星际穿越》
    【转】谈创新
  • 原文地址:https://www.cnblogs.com/1482156703optimus/p/16748765.html
Copyright © 2020-2023  润新知