文件系统
目录
1.认识磁盘
磁盘的物理结构
CHS定位法
磁盘的逻辑结构
2.认识文件系统
inode
分区和分组
磁盘上的文件系统
3.软硬链接
软链接
软链接的操作
创建软链接
查看软链接
删除软链接
软链接的特点
软链接的使用场景
硬链接
硬链接的操作
创建硬链接
查看硬链接
删除硬链接
硬链接的特点
硬链接的使用场景
1.认识磁盘
磁盘的物理结构
我们的计算机当中会存在许多的文件,有被打开的文件,也有没打开的文件,没打开的文件就是放在磁盘上存储的,磁盘的物理结构如下图所示:
- 盘片:一个磁盘有多个盘片,一个盘片有上下两个盘面。
- 磁头:一个盘面配有一个磁头,磁头会在盘面上方来回摆动读取盘面上的数据。
- 主轴:多个盘片被主轴贯穿,绕主轴旋转。
- 伺服系统:内部有各种控制电路和程序,控制磁盘的运动。
我们将磁盘的物理结构形象的表示成下面这幅图:
- 磁道:盘面上的一圈就是一个磁道。
- 扇区:磁道上的一小个扇装结构就是一个扇区,一个扇区的大小通常是512字节。
CHS定位法
磁盘上的磁头(Head)、磁道(Cylinder)、扇区(Sector)都有唯一的编号,那么我们就可以这样来定位磁盘上的一个特定扇区:
- 首先确定使用哪一个磁头,通过这个磁头就能够找到一个固定的盘面。
- 通过磁头的来回摆动,找到固定的一个磁道。
- 盘片是绕轴旋转的,通过盘片的旋转,就能找到特定的扇区。
这种定位一个扇区的方法称为CHS定位法。扇区是磁盘进行IO的基本单位,文件又是在磁盘上存储的;那么,一个文件就是多个扇区所承载的数据了。
磁盘的逻辑结构
我们可以想象一下,把一个盘面按照磁道为单位进行展开,并且所有的磁道首尾相连,那么一个盘面不就相当于被展开成了一串 “磁带” 了吗?
我们可以把展开之后的盘面看成一个大数组,每个数组元素都是一个扇区。这个大数组就是磁盘的逻辑结构。
磁盘逻辑结构示意图:
对于操作系统来说,每次和磁盘进行IO的基本单位是4KB。
2.认识文件系统
inode
文件是由文件的内容和文件的属性共同组成的。文件内容的大小是不固定的,但是文件属性的大小是固定的,通常为128字节。而且,在Linux操作系统中,文件的内容和文件的属性是分开存储的,文件的属性存储在一个 struct inode 类型的结构体中,inode中通常记录着文件大小,所有者,最近修改时间等……
需要注意的是:inode中, 没有文件名,Linux系统中,标识一个文件用的不是文件名,而是inode编号,也正是inode中没有文件名,才能做到 struct inode 类型的对象大小固定。
分区和分组
我们计算机上的磁盘的存储空间是很大的,就现在而言,一般的计算机都有512GB的磁盘空间,那么操作系统要如何才能管理好着512GB的磁盘空间和磁盘上的文件呢?
操作系统对磁盘空间的管理其实是采用了分治思想,先把磁盘划分成多个区域,我们在Windows电脑上就可以很明显的看到有什么C盘、D盘…… 这其实就是操作系统对磁盘进行了分区;要管理好一个磁盘,就要管理好多个分区。那么操作系统是如何管理好一个分区的呢?同样采用了分治思想,操作系统先把一个分区分成多个组,这叫做分组,然后编写管理好一个分组的数据结构和算法,一个分组能够管理好,那么就能把管理管理一个分组的数据结构和算法拷贝给其他分组,这样就管理好了一个分区内的多个分组,也就意味着管理好了一个分区,既然能够管理好一个分区,那复用管理好着一个分区的数据结构和算法,就能管理好多个分区,管理好多个分区就意味着管理好了磁盘。
分区和分组示意图:
磁盘上的文件系统
每一个分组其实是 Block group 结构,多个 Block group 结构和头部的 BootBlock 结构 共同就构成了磁盘的文件系统,每一个 Block group 又都有相同的结构,分别是:
- Date blocks:数据区,存放文件的内容。
- Block Bitmap:块位图,Block Bitmap中记录着 Data blocks 中哪个数据块已经被占用,哪个数据块没有被占用;比特位的位置,表示块号,比特位的内容,表示对应的块是否被使用(1表示使用,0表示未使用)。
- inode Table:i节点表,相当于一个 inode 数组。
- inode Bitmap:inode位图,inode Bitmap中记录着 inode Table 中 inode 的使用情况;比特位的位置表示第几个inode,比特位的内容,表示inode是否被使用(1表示使用,0表示未使用)。
- Super Block:超级块,存放文件系统本身的结构信息。
记录的信息主要有:
1.bolck 和 inode的总量。
2.未使用的block和inode的数量。
3.一个block和inode的大小。
4.最近一次挂载的时间。
5.最近一次写入数据的时间。
6.最近一次检验磁盘的时间等其他文件系统的相关信息。
Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。 - Group Descriptor Table:块组描述,符描述块组属性信息。
3.软硬链接
软链接
在Windows操作系统中,我们都使用过快捷方式打开一个软件,在Linux操作系统中,软链接文件就类似于Windows中的快捷方式。
软链接的操作
创建软链接
我们可以使用 ln -s 目标文件或目录 软链接名称 命令创建一个软链接文件:
- 从开头的文件类型为l,表明软链接文件是一个链接文件。
- 并且文件名当中会通过 -> 告诉我们软链接文件链接的是哪一个文件。
查看软链接
我们还可以使用 ll -l -i 命令查看文件的 inode编号:
- 可以看到这两个文件的inode编号不同,表明一个文件的软连接确实是一个文件。
删除软链接
我们可以使用 rm 命令或者 unlink 命令删除一个软链接文件:
软链接的特点
- 软链接是一个独立的文件,因为它有自己的inode编号。
- 软连接会记录目标文件或目录的路径,相当于Windows中的快捷方式。
- 可以为目录创建软链接。
软链接的使用场景
软链接中会记录目标文件or目录的路径,我们可以使用这一点来进行以下操作:
- 简化路径:为长路径的文件或目录创建软链接,方便访问。
- 版本管理:通过软链接指向不同版本的文件或目录,方便切换。
硬链接
硬链接是Linux操作系统中的一种文件链接方式。它与软链接不同,硬链接直接指向文件的 inode,而不是存储目标路径。硬链接更像是文件的 “别名”,多个硬链接共享同一个 inode 和 数据块。
硬链接的操作
创建硬链接
我们可以使用 ln 目标文件 软链接名称 为指定文件创建硬链接:
- 开头的文件类型为 - ,表明硬链接是一个普通文件。
查看硬链接
我们可以使用 ll -l -i 命令 查看硬链接文件:
- 开头的文件类型为 -,表明这是一个普通文件。
- code.c 和 code_link.hard 的 inode 编号是一样的,说明code_link.hard只是code.c的一个别名。
- 可以看到 code.c 和 code_link.hard 文件的硬链接数都是2。
删除硬链接
我们可以使用 rm 命令 或者 unlink 命令删除一个硬链接文件:
- 可以看到文件的硬链接数变成1了。
- 硬链接数相当于一个文件的引用计数,当硬链接数大于1时,删除硬链接不会影响其他的硬链接or文件;只有当硬链接数为1的时候,删除硬链接才会释放文件数据。
硬链接的特点
- 硬链接与目标文件共享同一个 inode,因此它们指向相同的物理数据。
- 用户不能给目录建立硬链接,只能由系统给目录建立硬链接。
硬链接的使用场景
- 文件备份:硬链接可以提供额外的访问路径,即使删除一个硬链接,文件数据依然存在。
- 文件共享:多个用户可以通过硬链接共享同一个文件,而无需复制路径。
在Linux操作系统中,我们经常可以看到 . 和 .. 这两个目录,. 代表当前目录,.. 代表上一级目录,这是如何实现的呢?
Linux 系统当中目录本质上是一个特殊的文件,它存储了文件名和对应的 inode 编号的映射关系,当我们创建一个目录的时候,文件系统会自动生成两个硬链接:
.
指向当前目录的 inode。
..
指向父目录的 inode。这样,就能够通过 cd . 命令 进入当前目录,cd ..命令进入上一级目录了。
注意:我们只是说用户不能给目录创建硬链接,但是系统是可以给目录创建硬链接的,这两个硬链接就是操作系统自己创建的。
相关文章:

文件系统
目录 1.认识磁盘 磁盘的物理结构 CHS定位法 磁盘的逻辑结构 2.认识文件系统 inode 分区和分组 磁盘上的文件系统 3.软硬链接 软链接 软链接的操作 创建软链接 查看软链接 删除软链接 软链接的特点 软链接的使用场景 硬链接 硬链接的操作 创建硬链接 查看硬…...
力扣LeetCode:1472 设计浏览器历史记录
题目: 你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步。 请你实现 BrowserHistory 类: BrowserHistory(string h…...

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序
🧑💻博主介绍🧑💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…...
【笔记ing】每天50个英语词汇
ex- e-out exclude 排外,排除 expect 期待,期望 单词构成: 前缀(prefix):情感(emotion)方向(orientation) 词根(root)…...

联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘
坏了的硬盘会自动亮黄灯。用一个空的新盘来替换,新盘最好不要有东西。但是有东西可能也没啥,因为我看 RAID 控制器里有格式化的选项 1. 从 IPMI 把服务器关机,电源键进入绿色闪烁状态 2. 断电,推开塑料滑块拉出支架,…...

Java基础关键_012_包装类
目 录 一、基本数据类型对应的包装类 1.概览 2.说明 二、包装类 1.最大值与最小值 2.构造方法 3.常用方法(Integer为例) (1)compare(int x, int y) (2)max(int a, int b) 和 min(int a, int b) &…...
【react】TypeScript在react中的使用
目录 一、环境与项目配置 1. 创建 TypeScript React 项目 2. 关键tsconfig.json配置 3.安装核心类型包 二、组件类型定义 1. 函数组件(React 18) 2.类组件 三、Hooks 的深度类型集成 1. useState 2. useEffect 3. useRef 4. 自定义 Hook 四、事…...

vllm的使用方式,入门教程
vLLM是一个由伯克利大学LMSYS组织开源的大语言模型推理框架,旨在提升实时场景下的大语言模型服务的吞吐与内存使用效率。以下是详细的vLLM使用方式和入门教程: 1. 前期准备 在开始使用vLLM之前,建议先掌握一些基础知识,包括操作…...

IDEA 使用codeGPT+deepseek
一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行,您需要在操作系统中预先配置 Python 环境。具体来说,您需要安装 Python 3.8 或更高…...
vue3中测试:单元测试、组件测试、端到端测试
1、单元测试:单元测试通常适用于独立的业务逻辑、组件、类、模块或函数,不涉及 UI 渲染、网络请求或其他环境问题。 describe(increment, () > {// 测试用例 }) toBe():用于严格相等比较(),适用于原始类…...
机器学习介绍与数据集
一、机器学习介绍与定义 1.1 机器学习定义 机器学习(Machine Learning)是让计算机从数据中自动学习规律,并依据这些规律对未来数据进行预测的技术。它涵盖聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep Learning…...

React 源码揭秘 | 更新队列
前面几篇遇到updateQueue的时候,我们把它先简单的当成了一个队列处理,这篇我们来详细讨论一下这个更新队列。 有关updateQueue中的部分,可以见源码 UpdateQueue实现 Update对象 我们先来看一下UpdateQueue中的内容,Update对象&…...

关于网络端口探测:TCP端口和UDP端口探测区别
网络端口探测是网络安全领域中的一项基础技术,它用于识别目标主机上开放的端口以及运行在这些端口上的服务。这项技术对于网络管理和安全评估至关重要。在网络端口探测中,最常用的两种协议是TCP(传输控制协议)和UDP(用…...
Vue.js 中使用 JSX 自定义语法封装组件
Vue.js 中使用 JSX 自定义语法封装组件 在 Vue.js 开发中,使用模板语法是常见的构建用户界面方式,但对于一些开发者,特别是熟悉 JavaScript 语法的,JSX 提供了一种更灵活、更具表现力的替代方案。通过 JSX,我们可以在…...
设计模式教程:备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)详解 一、模式概述 备忘录模式(Memento Pattern)是一种行为型设计模式,允许在不暴露对象实现细节的情况下,保存对象的内部状态,并在需要时恢复该状态。备忘录模式…...
使用 C# 以api的形式调用 DeepSeek
一:创建 API 密钥 首先,您需要来自 DeepSeek 的 API 密钥。访问 DeepSeek,创建一个帐户,并生成一个新的 API 密钥。 二:安装所需的 NuGet 包 使用 NuGet 包管理器安装包,或在包管理器控制台中运行以下命…...

CS5366AN:高集成Type-C转HDMI 4K60Hz芯片的国产突破
一、芯片概述 CS5366AN 是集睿致远(ASL)推出的一款高度集成的 Type-C转HDMI 2.0视频转换芯片,专为扩展坞、游戏底座、高清显示设备等场景设计。其核心功能是将USB Type-C接口的DisplayPort信号(DP Alt Mode)转换为HDM…...

瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发
触觉智能分享,瑞芯微RK安卓Android主板GPIO按键配置方法,方便大家更好利用空闲IO!由触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持安卓Android、开源鸿蒙Open…...

Dify自定义工作流集成指南:对接阿里云百炼文生图API的实现方案
dify工作流的应用基本解释 dify应用发布相关地址:应用发布 | Dify 根据官方教程,我们可以看到dify自定义的工作流可以发布为----工具 这个教程将介绍如何通过工作流建立一个使用阿里云百炼文生图模型。 工具则可以给其他功能使用,如agent…...
前端项目配置 Nginx 全攻略
在前端开发中,项目开发完成后,如何高效、稳定地将其部署到生产环境是至关重要的一步。Nginx 作为一款轻量级、高性能的 Web 服务器和反向代理服务器,凭借其出色的性能和丰富的功能,成为了前端项目部署的首选方案。本文将详细介绍在…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...