• Linux-7-文件系统


    前言

    Vue框架:Vue驾校-从项目学Vue-1
    算法系列博客友链:神机百炼

    linux文件属性:

    • 查看多个文件的属性的命令:ls -l
      ls -l
    • 查看单个文件详细属性的命令:stat 文件名.后缀
      stat 文件名.后缀
    • 文件存储的结论:新建一个文件,查看其大小
      file的大小为0
      不仅要存储文件内容本身,还要存储文件相关属性

    硬盘存储方式:

    硬盘结构:

    • 从硬件和软件两个角度查看硬盘存储系统:
      硬盘存储系统

    硬件上:

    1. 确定硬盘上某一具体位置所需坐标:盘片 -> 盘面 -> 柱面/轨道 -> 扇区
    2. 硬盘存储容量计算:磁头数 * 磁道数 * 扇区数 * 每扇区内字节数
    3. 每个扇区内字节数最小512字节,最大4096字节

    软件上:

    硬盘软件划分

    1. 分区:硬盘之所以称为块设备,是由于按照块为单位作为存储空间,且每块容量相同
    2. 格式化:为每块添加附属管理信息,不同文件系统所添加的管理信息不同
    3. 分组:每块继续下分,分为一个起始块Boot Block和多个组块Block group[],但是并非所有块的Boot Block都填写内容
    4. 组内下分:每个组块Block group[i]都继续分为六个部分:Super Block + GDT + Block bitmap + inode bitmap + inode Table + Data Blocks

    主板bios

    • bios:主板自身携带的一小块内存空间,记录硬盘的起始位置,即0盘面0助眠的0号扇区
    • 分区表:在硬盘起始位置存储,记录每个分区的起始位置和终止位置
    • OS的载入:在硬盘起始位置存储,但是部分分区会记载OS位置信息,计算机开机时OS从硬盘导入内容

    inode:

    group block[]内各部分含义:

    Super Block:

    • 作用:存放文件系统本身的结构信息
      1. block 和 inode的总量
      2. 未使用的block 和 inode数目
      3. 每个block 和 inode的大小
      4. 最近一次挂载到内存的时间
      5. 最近一次被写入数据的时间
      6. 最近一次检验磁盘的时间
      7. …………等其他文件系统相关信息
    • 重要性:Super Block被破坏则整个文件系统结构就被破坏了

    Group Descriptor Table:

    • 作用:块描述符,描述group block相关信息

    Block Bitmap

    • 作用:位图,记录当前group block[i]中所有Data Block的使用情况
    • 重要性:某个inode

    inode Bitmap:

    • 作用:位图,记录当前group block[i]中所有inode节点的使用情况
    • 重要性:

    inode Table:

    • 作用:inode Table是一个链表,其中节点称为inode,每新存储一项文件,inode链表中新增一个inode节点,用于存储文件的相关属性信息
    • inode的重要性:我们识别文件一看路径,二看名称,但是OS识别文件只看inode信息
    • inode的本质:一个结构体
    //伪代码:
    struct inode{
    	inodeID;	
        //inodeID,用于识别inode节点
        blocks[12];	
        //每个文件用一个inode存储属性,同时默认用12个Data block存储内容,每个block有4KB
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Data Blocks:

    • 作用:具体存储文件内容的位置,每个group Block[i]中含有多个Data Block,每个Data Block可存储4KB文件

    • inode和Data Block的连接:依靠inode结构体中的blocks指针数组:
      inode和data block的连接

    • Data Block和Data Block的连接:每个Data Block中含有Data Block指针

    • OS 和 硬盘眼中的文件:inode Table中的一个inode节点(文件属性信息) + 该inode所指向的Data Blocks(文件本身内容)

    文件存储过程

    1. 存储文件属性:

    • 遍历inode Bitmap,寻找inode Table中空的inode节点
    • 将文件相关属性信息存储到空白的inode节点中

    2. 存储数据:

    • 遍历block Bitmap,寻找Data blocks中空的Data block
    • 将文件本身内容存储到空的Data block中

    3. 关联inode和Data Block:

    • 将使用的Data block的指针或编号,存放进入所使用的inode结构体中的block[12]中

    4. 目录文件新增项:

    • 目录文件:目录文件作为一种特殊的文件,其存储的内容是目录下各文件的inode地址和文件名
    • 查找目录下文件:到目录文件inode对应的Data Block中查找文件名对应的inode,依据文件名对应inode中的block[12]找到Data Blocks下具体的文件内容
    • 目录下新增文件:将文件的inode指针和文件名存储到目录文件的Data Block中

    存储过程图示:

    目录下新增文件的inode操作

    文件删除过程:

    • 下载文件需要4步,但是删除文件只需要核心两步:

      1. 将文件原来占据的inode bitmap中的位置为0
      2. 将文件原来占据的block bitmap中的位置为0
      3. 将目录文件inode对应的Data block内的文件名和inode指针内容删除
    • 这个原理解释了两种现象:

      1. 删除文件比新建文件块
      2. 删除掉的文件有概率恢复
    • 删除目录文件的特殊性:

      递归删除,先删除目录data block内所有inode指向的data block,再删除目录inode

    软硬链接:

    • 背景:硬盘和操作系统查找和区分文件时使用的是inode,而非路径+文件名

    软链接:

    1. 创建过程:

      新建inode,新开辟Data Block,存储原文件的inode指针

    2. 访问方式:

      根据本文件的inode寻找到本文件的Data Block数据,即获取到原文件的inode,再根据原文件的inode寻找原文件的Data Block数据

    3. 删除源文件后:

      由于源文件的Data Block和inode都被释放,所以无法按照本文件中存储的源文件inode去寻找原文件数据

    4. 相当于:快捷方式,原文件删除后快捷方式失效

    5. 指令:ln -s 原文件名 软链接文件名
      ln -s

    硬链接:

    1. 创建过程:

      新文件的文件直接使用原文件的inode,使用原文件的block

    2. 访问方式:

      和直接访问原文件的过程一样,根据inode查找Data Blocks中的数据

    3. 删除源文件后:

      硬链接的inode和Data Block保持不变
      只有一个inode的所有硬链接都被删除,该inode及其Data Block才被释放

    4. 相当于:取别名,只要还存在一个别名,内容就未被释放

    5. 指令:ln 原文件名 硬链接文件名
      ln

    • 删除原文件,查看软硬链接文件变化:硬链接文件没事,软连接文件报错
      删除原文件

    硬链接数:

    • 创建一个普通文件,其硬链接数为1
    • 创建一个目录文件,其硬链接数为2:本名 + .
    • 目录文件下每多创建一个目录,其硬链接数+1:每个子目录可以通过…返回上级目录
      子目录让父目录硬链接数+1
    • 可以通过目录文件的硬链接数来推断其下含有多少子目录文件
  • 相关阅读:
    Linux 离线环境下安装RabbitMQ
    BENTLY 350015 127610-01数字量输入模块
    systemverilog:interface中端口方向、Clocking block的理解
    OpenMMLab开源库总结——笔记1
    算法题练习——python题解BM52 数组中只出现一次的两个数字和BM51 数组中出现次数超过一半的数字
    CentOS7 升级OpenSSH9.0全过程和坑
    企业内部安全与风控管理图解
    XML 解析器
    windows onlyoffice教程
    机器学习 | Python实现GA-XGBoost遗传算法优化极限梯度提升树特征分类模型调参
  • 原文地址:https://blog.csdn.net/buptsd/article/details/126501468