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
};

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
  • 可以通过目录文件的硬链接数来推断其下含有多少子目录文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starnight531

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值