Linux——文件系统

news2024/11/25 0:57:05

✅<1>主页::我的代码爱吃辣
📃<2>知识讲解:Linux——文件系统
☂️<3>开发环境:Centos7
💬<4>前言:上期我们了解了文件在内存中得组织方式,那么文件在磁盘中又是如何管理得呢?

目录

一.磁盘物理的结构

二.磁盘的逻辑结构

三.文件系统

四Linux文件属性

五.软硬链接

1.软链接

2.硬链接


 

一.磁盘物理的结构

磁盘是我们计算机上唯一的一个机械设备。

 说明:

  1. 这里的盘片有好几层,双面,每一面都会有一个磁头。
  2. 盘面上很多的微型磁体,使用磁体的N/S极,存储0/1数据。

抽象图:

说明:

  1. 可以将每一个盘面看成上述的一个抽象图,一圈圈的排布的。
  2. 每一圈叫做一个磁道。
  3. 每一圈的磁道,有多个小扇形组成,叫做扇区。
  4. 多个磁道在竖直方向上形成一个面,叫做柱面。
  5. 一般的磁盘每一个扇区,存储大小512字节。

磁盘如何定位:

  1. 每一个磁头(head)都有一个编号,依次可以定位到一个面。
  2. 根据上下多个磁道形成的柱面,结合磁道(cylinder)的半径可以准确的定位到一个柱面。
  3. 一个磁道(sector)上的扇区都是有编号的。

总结:

我们成中定位方式定位一个扇区叫做:CHS定位法。

一个普通文件(属性+数据)无非就是占用一个或者多个扇区,来进行自己的数据存储的!

二.磁盘的逻辑结构

上面我们得知,磁盘定位一个扇区,可通过CHS方式定位。

那么操作系统内部是不是使用的CHS方式定位一个扇区的呢?不是

因为操作系统要想做到解工作,如果我们换了一套硬件磁盘存储方案,操作系统又要跟着改。

即便是一个扇区已经有了512字节,单位IO的基本数量也是很小的,而在OS内部依次IO的基本单位是块——4KB(可以调整),所以OS一定要有一套自己的方案,来进行块级别的访问。

在OS看来:

OS以4KB(块)进行IO的,一个OS级别的文件块要包含8个扇区。

操作系统是使用数组对块的组织,那么OS对磁道的也会抽象数组。数组的每一个成员就是一个扇区。

此时定位一个扇区,就可以直接使用数组下标了。

定位任意一个块也是同样使用数组下标的特性来定位。

我们成这种定位一个方式叫做LBA。

操作系统也会提供LBA转CHS的算法,支持逻辑地址转换成物理地址。

三.文件系统

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。 

Boot Block:

  1. 一个block的大小是由格式化的时候确定的,并且不可以更改。可以设定block大小为1024、2048或4096字节。上图中启动块的大小就是用Boot Block来确定的。

Block Group:

  1. ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。 

超级块(Super Block):

  1. 存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。
  2. Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
  3. 从Super Block存储的结构信息结合分租来看,其实Super Block存储的信息应该都是一样的,但是Super Block是每一个分组都会有的一份。
  4. 目的是返防止Super Block被破坏。去过某一个分组的Super Block出现故障,可以使用其他分组的Super Block来进行修复。

Group Descriptor Table:

  1. 块组描述符,描述块组属性信息。

Date Blocks:

  1. linux下是将文件的属性和数据分开存储的,Date Blocks就是文件数据存储地。
  2. 一个文件属性大小都是固定的,数据是不固定的往往也是占据空间最大的。
  3. 一个分组中占据空间嘴大的也是Date Blocks,Date Blocks有很多个块(4KB)组成。

Block Bitmap:

  1. Date Blocks中有很多的块,而且块是使用数组的方式进行组织的。
  2. Block bitmap是一个位图结构,Date Blocks中每一个块的下标,都对应着BIock bitmap的一个位置,用于记录块是否被使用。

inode Table:

  1. 一般而言,一个文件内部的所有数据会被放进Date Blocks,而内部的属性的集合一般会有一种特性的结构来存储,我们叫做inode结点。
  2. 且每一个文件都会有一个inode结点,inode结点内部存储了在该分区内标识该文件的唯一编号,我们称之为inode编号,也就是对应文件的属性ID。
  3. 所以即使是一个分区内部都会有很多的文件,也就会有会多的inode结点,一个group,需要有一个地方专门存放这些结点,这个存储结点的地方我们称之为inode Table,inode表。

inode Bitmap:

  1. 一个分组的inode结点数往往是固定的,所以我们需要能标识每一个inode结点是否被使用了,inode Bitmap每一个bit位就是标识一个inode是否被使用。

四Linux文件属性

我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据:

从左往右依次是:权限模式,硬连接数,文件按的拥有者,文件的所属组,文件大小,最后修改时间,文件名。

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息:

stat [文件名]

 我们能够清楚的看到:

  1. File:文件名。
  2. Size:文件大小。
  3. Blocks:文件所占块数。
  4. IO Block:块大小。
  5. Inode:inode编号。
  6. Links:硬连接数。
  7. Access:最近访问时间(不会立即更新)。
  8. Modify:最近修改内容时间(立即更新)。
  9. Change:最近修改属性时间(立即更新)。

 创建一个新文件主要有一下4个操作:

1. 存储属性

  • 内核inode Bitmap先找到一个空闲的inode节点(这里是inode标号:263466)。内核把文件信息记录到inode结点存储待inode Table中。

2. 存储数据

  • 该文件需要存储在三个磁盘块,内核Block Bitmap找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推,将inode Bitmap对用的位图位置信息修改。

3. 记录分配情况

  • 文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表

4. 添加文件名到目录

  • 新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(inode编号:263466,文件名:abc)添加到目录文件。文件名和inode编号之间的对应关系将文件名和文件的内容及属性连接起来。

五.软硬链接

我们可以使用命令展示文件的inode:

ls -li

1.软链接

硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件。

制作一个软连接:

测试代码和文件:

测试代码:

#include <iostream>

using namespace std;

int main()
{

    cout << "hello c++ and linux" << endl;
    cout << "hello c++ and linux" << endl;
    cout << "hello c++ and linux" << endl;

    return 0;
}

 使用命令建立软链接:

ln -s [原文件] [链接文件]

软连接的作用:

2.硬链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSerach+MongoDB:实现文章检索历史功能

实现目标&#xff1a; 展示用户的搜索记录10条&#xff0c;按照搜索关键词的时间倒序可以删除搜索记录保存历史记录&#xff0c;保存10条&#xff0c;多余的则删除最久的历史记录 数据库的选择&#xff1a; 用户的搜索记录&#xff0c;需要给每一个用户都保存一份&#xff0c;数…

第3讲:vue路由安装配置,带参路由,子路由配置及应用

路由的安装与基本使用 vue-router是Vue官方的路由插件,它和Vue是深度集成,适用于构建单页面应用 vue-router的安装 //vue2路由配置npm install vue-router@3.0.2 或 cnpm install vue-router@3.0.2在具体应用的开发中我们一般会在src目录下新建一个名为router的目录,并在r…

加速乐源码(golang版本)

一、分析 分析过程网上有很多,这里只说个大概,主要是提供golang源码 请求网站,发现前两次请求都会返回521,第三次请求成功,说明前两次请求肯定是干了什么事情;使用接口请求工具模拟请求分析该过程 使用postman工具请求 a. 第一次请求会在响应头返回jsluid,返回内容中拼接…

滚动轴承 调心球轴承 外形尺寸

声明 本文是学习GB-T 281-2013 滚动轴承 调心球轴承 外形尺寸. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了符合 GB/T 273.3—1999 的调心球轴承及带紧定套的调心球轴承(以下简称轴承)的 外形尺寸。 本标准适用于调心球轴承…

【数字IC/FPGA】基于握手的数据广播

简介 本文介绍了一种基于握手协议的数据广播方式。事实上,该场景可以简化为模块的一对多握手,并且下游的各个模块可以独立的完成握手(与之相对的是下游模块一起完成握手,相比之下,下游各个模块可以独立完成握手显然更加普适、灵活)。 下图展示了模块一对多握手的示意图:…

阿里云服务器经济型e实例详细介绍_e系列性能价格表

阿里云服务器ECS推出经济型e系列&#xff0c;经济型e实例是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理…

GLTF编辑器如何合并相同材质的Mesh

1、什么是模型材质合批 模型材质合批是一种技术手段&#xff0c;主要用于优化渲染性能和提高图形应用程序的帧率。它通过将多个模型的材质进行合并&#xff0c;从而减少渲染时的绘制调用次数。 在计算机图形学中&#xff0c;每个模型都有一个或多个材质&#xff0c;这些材质定义…

【教程】视频汇聚/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…

使用 PyTorch 的计算机视觉简介 (5/6)

一、说明 本文主要介绍CNN中在pytorch的实现&#xff0c;其中VGG16网络&#xff0c;数据集来源&#xff0c;以及训练过程&#xff0c;模型生成和存储&#xff0c;模型调入等。 二、预训练模型和迁移学习 训练 CNN 可能需要大量时间&#xff0c;并且该任务需要大量数据。但是&am…

【每日一题】441. 排列硬币

441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整…

位段 联合体 枚举

Hello好久不见&#xff0c;今天分享的是接上次结构体没有分享完的内容&#xff0c;这次我们讲讲位段 枚举和联合体的概念以及他们的用法。 2.1 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 …

Unity下tga和png格式图片打包成AB包大小和加载速度测试

测试素材 测试素材&#xff0c;一张tga格式&#xff0c;一张png格式&#xff0c;他们的图像尺寸一样都是8K图。 两张图在AssetBundles里显示 Tga格式的图明显大很多&#xff0c;我们打包成ab包看看。 在PC 打包后看&#xff0c;明显大小一样&#xff0c;我们进行ab包加载&am…

通俗易懂讲解拥塞控制

文章目录 前言一、拥塞控制是什么&#xff1f;二、什么是拥塞窗口&#xff1f;和发送窗口有什么关系呢&#xff1f;三、慢启动四、阻塞避免算法五、拥塞发生状态时的算法以及快速重传以及快速恢复总结 前言 TCP的拥塞控制&#xff0c;以前觉得老复杂了&#xff0c;今天重温了一…

HTML - input type=file 允许用户选择多个文件

效果 示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- When the multiple Boolean attribute is specified, the file input allows the user to select more than o…

【漏洞复现】企望制造 ERP命令执行

漏洞描述 由于企望制造 ERP comboxstore.action接口权限设置不当&#xff0c;默认的配置可执行任意SQL语句&#xff0c;利用xp_cmdshell函数可远程执行命令&#xff0c;未经认证的攻击者可通过该漏洞获取服务器权限。 免责声明 技术文章仅供参考&#xff0c;任何个人和组织…

Python经典练习题(二)

文章目录 &#x1f340;题目一&#x1f340;第二题&#x1f340;第三题&#x1f340;第四题&#x1f340;第五题 &#x1f340;题目一 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&am…

【操作系统笔记二】链接阶段ELF文件

链接阶段&#xff1a;符号解析 链接阶段主要包含&#xff1a; 符号解析重定位 一般情况下&#xff0c;每个 C 文件可以看成一个程序模块&#xff0c;比如下边的main.c就是一个程序模块 #include <stdio.h>extern int shared; int sum(int *a, int n); int array[2] …

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…

oracle11g升级12c

目录 背景&#xff1a;oracle11.2.0.4升级至12.2.0.1版本 当前数据库版本 1&#xff09;上传12g安装包&#xff0c;解压开始安装 2&#xff09;不勾选 3&#xff09;升级数据库 4&#xff09;下一步 5&#xff09;修改路径11.2.0换成12.2.0 6&#xff09;下一步 7&…

shardingjdbc分库分表数据均衡性讨论

问题引入 最近一个业务系统中&#xff0c;因为数据量很大&#xff0c;经过技术选型&#xff0c;综合权衡选择了sharding-Jdbc&#xff0c;本文主要讨论的是分库分表的表达式 我们有一个批次总表A&#xff0c;还有一个明细表B&#xff0c;我们需要对明细表B进行水平拆分&#…