当前位置: 首页 > news >正文

Linux---文件系统

一、文件系统的注意事项

①文件=内容+属性

②被打开的文件再内存中

③没有被打开的文件在磁盘中

④如何找到磁盘中的文件:目录

⑤文件系统的工作:帮助我们找到磁盘上的文件

二、磁盘

1.基础

①机械磁盘是计算机中唯一的一个机械设备

②磁盘是一种外设,和键盘显示器没区别

③离CPU远,运行速度曼

④容量大,价格便宜

2.物理结构

3.存储结构

扇区:磁盘存储数据的基本单位,一片扇区能存储512字节

一个盘片

多个盘片

磁道是二维的,柱面是三维的,二者是一个东西

过程:先选择柱面,然后等扇区,最后选磁头下落

三、CHS和LBA

1.CHS

①CHS是Cylind Head Sector 柱面 磁头 扇区,也就是磁盘寻址的过程

②对文件的存储就是将文件存储在一个或者多个扇区里

2.逻辑抽象

逻辑结构:将磁盘以扇区为单位拉直,就是一个数组,根据数组下标就可以找到每一个扇区

这种结构叫做LBA,也就是数组下标

注意:LBA数组下标从1开始,CHS从0开始(0号柱面,0号磁头...)

3.CHS和LBA地址的转化

①CHS转成LBA

Ⅰ磁头数*每磁道扇区数=单个柱面的扇区总数

Ⅱ LBA=柱面号C*单个柱面的扇区总数+磁头号H*每磁道扇区数+扇区号S+1

②LBA转成CHS

Ⅰ柱面号C=LBA/(磁头数*每磁道扇区数) 就是单个柱面的扇区总数

Ⅱ磁头号H=(LBA%(磁头数*每磁道扇区数))

Ⅲ扇区号S=(LBA%每磁道扇区数)+1

四、引入文件系统

1.块

①概念

其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样
效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可
以更改,最常⻅的是4KB,即连续⼋个扇区组成⼀个 ”块”。”块”是⽂件存取的最⼩单位

2.分区

将磁盘的空间分成几份,管好一份其他就可以使用相同的手段

3.分组(Block Group1)

①文件=内容+属性,内容和属性是分开存储的

②Linux中任何文件都要有自己的属性集合

③Data Blocks

存储内容,group中的大部分空间被其占据,以4kb为单位

④inode Table

属性集合,存储属性,底层是一个struct结构体,里边存储文件的属性

        Ⅰ 文件属性的大小是一样的,在EXT2文件系统中是128字节

        Ⅱ 文件名不会作为属性,保存在文件inode当中,原因是,文件名是字符串,大小会浮动

        Ⅲ 每一个inode结构体,都会有一个inode编号inode_number,用来查找是输入哪一个文件的属性

        Ⅳ 在Linux显示inode_number的指令是ls -li

⑤Block Bitmap:块位图,记录Data Blocks中哪个数据块已经被占用,哪个数据块没有被占用

⑥inode Bitmap:每个bit表示inode是否空闲可用

⑦下载东西时慢是因为要将数据存入Data Blocks和inode Table,同时将两个位图对应部分制1,而删除东西时,只需要将位图中的bit位置0,不清空数据,下次再下载其他东西时,DataBlocks和inode Table中被删除的位置数据可以被替代

 ⑧GDT

块组描述符表,描述块组属性信息,整个分区分成多个块组就对应有多少个块组描述符。每个块组描 述符存储⼀个块组 的描述信息,如在这个块组中从哪⾥开始是inode Table,从哪⾥开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有⼀份拷⻉。

struct ext2_group_desc
{
__le32 bg_block_bitmap; /* Blocks bitmap block */
__le32 bg_inode_bitmap; /* Inodes bitmap */
__le32 bg_inode_table; /* Inodes table block*/
__le16 bg_free_blocks_count; /* Free blocks count */
__le16 bg_free_inodes_count; /* Free inodes count */
__le16 bg_used_dirs_count; /* Directories count */
__le16 bg_pad;
__le32 bg_reserved[3];
};

⑨super Block

放⽂件系统本⾝的结构信息,描述整个分区的⽂件系统信息。记录的信息主要有:bolck 和 inode的总量,未使⽤的block和inode的数量,⼀个block和inode的⼤⼩,最近⼀次挂载的时间,最近⼀次写⼊数据的时间,最近⼀次检验磁盘的时间等其他⽂件系统的相关信息。Super Block的信息被破坏,可 以说整个⽂件系统结构就被破坏了
不是每一个组里边都有super Block,一个分区里边的每一个组里边的super Block完全相同

super Block一旦受影响,影响非常大,所以要存好几个

⑩inode和数据块可以跨组编号,不能跨分区编号,所以再同一个分区内部,inode编号和块号都是唯一的

4.目录

①文件名不会作为属性,保存在inode中,文件名保存在当前文件所属的数据内容当中

②磁盘上的文件系统只认inode,我们查找文件时没有使用过inode,而是用文件名,其实是路径+文件名,默认当前路径,因为文件名和inode有映射关系,所以文件名可以找到文件,文件名也是数据

③进程提供文件路径,找到任何Linux文件,都必须从根目录开始,进行路径解析,直到找到对应的路径,但是每次都从根目录找效率太低,所以OS会根据历史访问的路径在内存中自动生成一颗多叉树,,提高效率

Linux中,在内核中维护树状路径结构的内核结构体叫做: struct dentry

truct dentry {atomic_t d_count;unsigned int d_flags; /* protected by d_lock */spinlock_t d_lock; /* per dentry lock */struct inode *d_inode; /* Where the name belongs to - NULL is* negative *//** The next three fields are touched by __d_lookup. Place them here* so they all fit in a cache line.*/struct hlist_node d_hash; /* lookup hash list */struct dentry *d_parent; /* parent directory */struct qstr d_name;struct list_head d_lru; /* LRU list *//** d_child and d_rcu can share memory*/union {struct list_head d_child; /* child of parent list */struct rcu_head d_rcu;} d_u;struct list_head d_subdirs; /* our children */struct list_head d_alias; /* inode alias list */unsigned long d_time; /* used by d_revalidate */struct dentry_operations *d_op;struct super_block *d_sb; /* The root of the dentry tree */void *d_fsdata; /* fs-specific data */#ifdef CONFIG_PROFILINGstruct dcookie_struct *d_cookie; /* cookie, if any */#endifint d_mounted;unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
};

⑤inode映射

五、软硬连接

1.软连接

①指令:ln -s 要链接的文件  链接后的名字

②软连接是一个独立文件,因为他有独立的inode

改变file.c中的内容file-soft的内容也会改变

③软连接本质上相当于windows中的快捷方式

④删除软连接

Ⅰ 直接rm

Ⅱ unlink

2.硬连接

①指令:ln 要连接文件 名称

②硬连接本质不是一个独立的文件,因为它没有独立的inode!

本质是一组新的文件名和inode_number的映射关系

③用途:进行备份

http://www.dtcms.com/a/395665.html

相关文章:

  • 循环语句效率与规范的原理及示例解析
  • Three.js 开发实战教程(四):相机系统全解析与多视角控制
  • 介绍一下SQLite的基本语法和常用命令
  • 台式电脑如何恢复出厂设置?Win10 强制重置详细教程
  • 李宏毅2023机器学习作业 HW02实操
  • 【C++实战㉜】深入C++动态内存分配:从理论到实战的进阶之路
  • 小鼠抗新冠病毒N蛋白IgG亚型抗体ELISA检测试剂盒
  • 安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析
  • C++ 中 size_t 的用(用于跨平台编译)
  • C++ 拷贝构造函数调用时机
  • 手机镜头参数介绍
  • 区块链技术之《(1)—概述》
  • 复盘与导出工具最新版V31.0版本更新---彻底修复卡死闪退bug,盘中实时丝滑
  • 深入理解JVM类加载与垃圾回收机制
  • Ethernet/IP转ProfiNet网关选型指南:欧姆龙PLC对接研祥工控机最佳实践
  • Java 面试高频手撕题清单
  • 【论文阅读】Long-VLA:释放视觉语言动作模型在机器人操作中的长时程能力
  • Python poplib 库全解析:POP3 邮件收取的完整指南
  • DanceTrack数据集介绍
  • 【无标题】话题学习笔记1,话题基本了解
  • 【论文阅读】OpenVLA:一个开源的视觉-语言-动作模型
  • 科技信息差(9.22)
  • Zotero中进行文献翻译【Windows11】【新版,目前没发现bug】
  • 单细胞数据分析:单细胞计数矩阵(Seurat)
  • Hyperf使用视图
  • React何时用函数组件(Hooks),何时用类组件?(错误边界用类组件Error Boundary)
  • VMware虚拟机ubuntu20.04共享文件夹突然无法使用
  • 流行AI工具的分类与比较
  • 哪些行业需要使用时序数据库?
  • PyTorch 神经网络工具箱简明笔记