zoukankan      html  css  js  c++  java
  • linux 磁盘管理与文件系统

    一、磁盘分区的意义

          磁盘分区就是为了将磁盘分成不同的逻辑区域,每个分区可以有不同的文件系统

    二、

          磁盘分区是按照磁盘的柱面进行分区的,由于盘片在转动时的角速度都是一样的,所以磁头在最外层的磁道上读取信息的速度最快,当从读取大量数据时,包含最外层磁道的分区的读取速度是最快的。

    三、ext2文件系统结构

       

    上图是整个分区的结构:

        block

        对于ext2(ext3类似)文件系统来说,硬盘分区首先被划分为一个个的block,同一个ext2文件系统上的每个block大小都是一样的。但是对 于不同的ext2文件系统,block的大小可以有区别。典型的block大小是1024 bytes或者4096 bytes。这个大小在创建ext2文件系统的时候被决定,它可以由系统管理员指定,也可以由文件系统的创建程序根据硬盘分区的大小,自动选择一个较合理 的值。

    一个硬盘分区上的block计数是从0开始的,并且这个计数对于这个硬盘分区来说是全局性质的。

         BootBlock

        BootBlock中存储的是对应于此文件系统的的操作系统的bootloader程序

        BlockGroup

         硬盘分区中所有block被聚在一起分成几个大的block group,其中每个block group中有多少个block是固定的。

       SuperBlock

         super Block即为超级块,它是硬盘分区开头——开头的第一个bytebyte 0,从 byte 1024开始往后的一部分数据。由于block size最小是 1024 bytes,所以super block可能是在block 1中(此时block 的大小正好是 1024 bytes
    超级块中的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中每个block的大小、硬盘分区上一共有多少个block group、以及每个block group中有多少个inode

       Group Descriptor Table(gbt) 

    每个block group都相对应一个group descriptor table,这些group descriptor table 被聚在一起放在硬盘分区的开头部分,跟在super block的后面。在每个group descriptor当中有几个重要的block指针,指向block group的inode table、block bitmap和inode bitmap。

      

    inode number

    当一个分区被格式化为ext2或ext3的文件系统的时候,会自动产生inode number。

    inode number可以决定在这个分区中存储多少文件或目录,因为每个文件和目录都会有与之相对应的inode number。

    inode table

    每个inode number都有对应的inode table。

    inode table记录这个inode number对应文件所对应的metadata(元数据)。

    metadata的主要作用是描述资料的属性:

    其中的“pointer”,记录了这个文件占用了哪几个block。

    当你存储一个文件之前,Linux系统会找到文件所对应的inode number。然后根据这个文件的inode number读取到相对应的inode table。由inode table中的“pointer”可以知道文件存放在哪几个block才能存储这个文件。

    Block Bitmap inode Bitmap

    两者表明了, 位图对应的区域是否空闲。 

     三、ext2文件系统与ext3文件系统的区别

           ext3文件系统中多了日志块,比如想要往block中写入文件时,先要将这个文件所对应的inode放入日志块中,只有这个文件完整写入,再将对应的inode放入inode table中。防止文件没有写完,出现意外情况,然后文件烂尾在系统中。

  • 相关阅读:
    关于BigDecimal转String的准确性问题
    MyBatis动态Sql之if标签的注意事项
    Servlet与通信协议概述
    关于ThreadLocal的那些事
    MyBatis 中 @Param 注解的四种使用场景
    Mybatis中#{}与${}的区别
    如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
    jsp有哪些动作?作用分别是什么?
    forward 和redirect的区别 ?
    Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别?
  • 原文地址:https://www.cnblogs.com/dfyz/p/4866455.html
Copyright © 2011-2022 走看看