• 浅析 Ext 文件系统


    安装Linux的时候可以将 /, /boot, /home 等放在不同的分区,每个分区可以选择需要的文件系统

    Ext文件系统的组织

    1. boot sector 用于存放引导程序,不同于Windows, Linux的安装可以将引导程序安装在自己选定的分区的boot sector,从而避免了覆盖MBR,不会损坏之前的系统的引导

    此处特别注意,如果你的 block size = 1024Bytes, 那么boot sector将占用 1个block,并位于block group 0, superblock将占用1个block,位于block group1;

    而如果你的blocksize>1024Bytes,那么你的boot sector与superblock将各占用1024Bytes,并一起放在同一个block里,位于block group 0.(意思是block group0只有1个block,这个block同时包含了boot sector 和 superblcok)

    2. 文件系统将block分成多个block group,每个group又包括如下几部分:

    1) Super Block: 这个区域记载了block/inode总量,可用量,每个block和inode的大小,日志系统的大小,FS的挂载时间等等数据,只有第1个Group会有这个Superblock,如果其他group也有,都是备份,如果1号group损坏,可以用备份来挽救

    2) FS Desc: 记录了SuperBlock,bitmap,data block的起止block段, 可以通过 dumpe2fs 命令来查看super block 和 block group的信息

    3) inode bitmap: 记录了所有inode的占用情况,每次写入文件前先要查找这个bitmap,确定使用的空inode

    4) block bitmap: 记录了所有data block的占用情况,每次写入文件签先查找这个bitmap,确定使用的空block

    5) inode table: 记录了所有文件夹,文件的属性(权限,所有者等)和数据block存储号,查找到文件的inode后就可以获得数据存储的block号,一次性将数据全部读取出来

    6) data block: 实际存储数据的地方,ext2中每个block的大小可以为 1K, 2K, 4K

    inode与data block的关系

    linux的文件系统属于索引文件系统,其中inode table就是文件索引,无论是目录和文件的索引都是存在inode中,每个目录或文件数据至少占用一个data block

    对于目录而言,他的inode对应的data block里存储了该目录下所有目录和文件的文件名及其对应的inode

    对于文件而言, 他的inode里存储了文件属性,所有者,存储该文件的所有data block号,而data block里存储了实际文件内容,其示意图如下

    他的好处就是系统可以一次性知道所有data block的号码,从而磁盘最多需要转一圈便可以把数据全都读出来

    而对于U盘的FAT文件系统,其存储如下

    这种情况由于每次需要读取完一个block才知道下一个block在哪里,则有可能需要磁盘转很多圈才能读取完数据,所谓“碎片整理”就是因为磁盘的数据存储过于分散,造成读取效率低下,整理既是把同一个文件的数据block都放到一起。

    文件读取的步骤

    例如读取 /etc/hosts

    1. 通过挂载点信息查找 / 的inode, 并找到 / 的block

    2. 通过 / 的block 找到/etc的inode,并找到/etc的block

    3. 通过 /etc 的block找到hosts文件的inode,最后读取hosts文件的data block

    Ext3的日志文件系统

    由于系统的异常中断,可能造成某些输入的写入成功,但是bitmap和super block的更新失败,造成数据不一致,操作系统只能在重启的时候进行强制同步,扫表磁盘所有文件来查找异常写入的数据。而这会话费大量的时间,所以引入了日志文件系统,通过一个日志记录块来磁盘的写入记录,当异常发生时,查找这个日志文件就能很快的找到造成数据不一致的文件,从而修复异常。

  • 相关阅读:
    Linked List Cycle
    黑白多帧相机设置白平衡原理
    cefsharp+elementplus
    Vue3(1)
    [Leetcode Weekly Contest]272
    [Leetcode Weekly Contest]273
    [Leetcode Weekly Contest]283
    ikbc104键键盘的win键失效的解决办法
    pytest接口自动化学习
    阿凡达项目的严重问题,质量过程改进,敏捷开发,
  • 原文地址:https://www.cnblogs.com/zemliu/p/2756146.html
Copyright © 2020-2023  润新知