美文网首页linux文件系统
《鸟哥的linux私房菜》学习笔记 文件系统

《鸟哥的linux私房菜》学习笔记 文件系统

作者: ahole | 来源:发表于2017-05-03 18:05 被阅读39次

    我发现我看了Linux后对搞机还挺感兴趣

    文件系统 File systems

    wiki : 文件系统是数据组织方式,定义数据在磁盘上的保存、读取和更新方法

    个人理解:文件系统就是数据在硬盘扇区内储存的规则,好让操作系统去读取相应的扇区内的数据。

    Ext2

    Ext2 是Linux支持的一种文件系统。

    Ext2 讲分区分成若干个分组。每个分组里含有以下这些组成部分:

    1.Super block
    2.File system Description
    3.block bitmap
    4.inode bitmap
    5.inode table
    6.data block

    为了了解这个东西,我们需要大致了解一些概念。

    block

    储存数据的真正位置,比如我们有一个文件里面写着 ‘to be a happy guy' , 那么这些文本信息就会保存在block中。当我们格式化成文件系统后,就会生成若干个block,并且都一一编号(UUid).另外在每个block大小一般是一样的。通常为1K,2K,4K.

    inode

    在Linux中每一个文件都只对应一个inode,它记录这文件的几乎全部信息(权限,修改时间,指有多少文件名指向这个inode)。最重要的是它记录正文件内容在哪些block中。

    当系统要访问一个文件的时候,首先要有文件的inode,查看上面的权限,通过了在通过上面的 block 号码,去获得文件的内容。

    回到那个分组

    为什么要分组?

    了解了 inode 和 block 我们知道分组好像不是太必要。但是当我们结合物理就明白,这是处理物理上inode和block在扇区上分布的一种结局方案。

    data block

    其实就是连续的blocks。这里需要一提的就是 一个文件最少占用1个block。 所以当有一堆小文件用大block去储存会存在浪费问题。但是大文件用小block去储存就会需要更多block数,inode 就需要记录更多的block号,这影响性能,所以,选择大小需要思考。

    inode table

    在Ext2中,inode只有128B,很小却需要储存很多信息。
    我们来算一下,一个文件400M,每个Block4K,那么inode需要记录10万个Block号码??!!
    Ext2的方法是使用空的Block来记录,如 inode 记录一个 Block ,这个Block不记录正真的数据而是记录Block号码,good。记过记录一个Block能记录256个block号码。好像不太够,那就256Block在用来储存Block号码,这就变成了指数级的变化了。
    Ext2 中的 inode 记录直接block号码的有 12个,一个间接,一个双间接,一个三间接。

    Super block

    记录文件系统使用情况,block大小等基本信息。讲道理这个东西只需要一个,所以不是每个分组都有,多个Super block也是做备份用的。

    File System Description

    记录分组的开始block号码与技术block号码

    block bitmap && inode bitmap

    分别记录那么block是空的,那么 inode 是未使用的。

    Ext3

    Ext2 上添加了日志功能
    ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal的记录。

    Ext4

    Ext3 的升级版本,相比与Ext3有很多 优点,其有比较好的兼容性,这个就意味着结构上不会有太大的改变。个人认为其结构上比较大的改变是对大文件的处理,其使用了extent概念,就是不会每个Block号码都做记录,只记录开始Block号,连续Block数等信息(思想是这样的,但没有这么简单)来记录大文件。

    参考文献

    Linux文件系统第一篇—从Ext2到Ext3再到Ext4 - 徐志强
    文件系统的两种文件索引模式extent和blockmap

    相关文章

      网友评论

        本文标题:《鸟哥的linux私房菜》学习笔记 文件系统

        本文链接:https://www.haomeiwen.com/subject/qkdktxtx.html