【Linux】【硬件向】从“找文件”到“懂磁盘”:一文搞懂文件、磁盘与文件系统 - 指南

news/2025/10/2 22:37:10/文章来源:https://www.cnblogs.com/yxysuanfa/p/19124105

前言:欢迎各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君**耐其心性,忘却杂尘,道有所长!!!!

在这里插入图片描述


IF’Maxue:个人主页

  个人专栏:
《C语言》
《C++深度学习》
《Linux》
《数据结构》
《数学建模》

⛺️生活是默默的坚持,毅力是永久的享受。不破不立!

文章目录

    • 一、先搞懂:文件存磁盘里,怎么找到它?
    • 二、磁盘的“朋友圈”:从单个磁盘到机房
      • 1. 磁盘的基本能力
      • 2. 磁盘里的数据怎么存?靠“小磁铁”
    • 三、磁盘的“内部地图”:磁道、扇区与柱面
      • 1. 最基本的“存储单元”:扇区
      • 2. 双面磁盘与“磁头”
      • 3. 逻辑上的“柱面”
    • 四、怎么找到磁盘里的“扇区”?两种寻址方式
      • 1. 早期的“三维定位”:CHS寻址
      • 2. 更简单的“线性定位”:LBA寻址
      • 3. CHS和LBA的转换:磁盘自己搞定
    • 五、操作系统怎么管磁盘?引入“文件系统”
      • 1. 比扇区大的“管理单元”:块
      • 2. 磁盘分“组”:块组管理
      • 3. 块组里有什么?
    • 六、实战:在Linux里看磁盘和inode信息
      • 1. 查看磁盘分区和扇区信息
      • 2. 查看文件的inode信息
    • 总结

一、先搞懂:文件存磁盘里,怎么找到它?

咱们电脑里的每个文件,其实都很“简单”——单个文件 = 内容(比如文档里的字、图片的像素)+ 属性(比如文件大小、创建时间)

但问题来了:没打开的文件都存在磁盘里,磁盘里文件那么多,咱们怎么精准找到想要的?

答案藏在“磁盘的目录结构”里——磁盘是用树状目录来存文件的,就像你电脑里“此电脑→D盘→学习资料→Linux笔记.txt”这样的一串地址,这串地址叫“路径”。只要顺着路径找,就能定位到文件。

就像下面这张图里展示的那样,树状的目录结构+明确的路径,是咱们找到磁盘里文件的“导航图”:
image.png

而这一切能实现,背后全靠“文件系统”——它最核心的工作,就是帮咱们管好磁盘里的文件,让咱们能快速找到、读写文件。

二、磁盘的“朋友圈”:从单个磁盘到机房

要懂文件系统,得先搞懂它“管理的对象”——磁盘,以及磁盘所在的硬件环境。

1. 磁盘的基本能力

磁盘就像一个“可擦写的笔记本”:能存数据(写)、能读数据(读)、也能删数据(擦除)。但它不是孤立存在的,通常和这些硬件搭伙干活:

  • 服务器:磁盘一般装在服务器里,服务器靠“网卡”连网,咱们才能通过网络访问服务器里的文件(比如云盘里的文件)。
  • 机柜:服务器不是散着放的,而是放进“机柜”里——机柜就像服务器的“多层书架”,能塞很多台服务器,节省空间还方便管理:
    image.png
    image.png
  • 机房:多个机柜连起来,再配上电源、空调、网络设备,就成了“机房”——一般只有大公司(比如阿里、腾讯)或云服务商才会建自己的机房,用来放大量服务器和磁盘:
    image.png

2. 磁盘里的数据怎么存?靠“小磁铁”

不同硬件存数据的原理不一样,磁盘靠的是“磁铁”——可以把磁盘看成无数个“小磁铁”组成的平面:

三、磁盘的“内部地图”:磁道、扇区与柱面

磁盘的物理结构没那么复杂,咱们拆开来看看:

1. 最基本的“存储单元”:扇区

把磁盘的一个“盘面”(像光盘一样的圆形平面)放大,会看到一圈圈的“同心圆跑道”,这叫磁道;每个磁道又被分成很多“小段”,每一小段就是扇区——这是磁盘最小的存储单元,默认大小是512字节(比如一个文字、一个小图标碎片,可能就存在一个扇区里):
image.png
image.png

2. 双面磁盘与“磁头”

实际的磁盘不是“单面”的,而是像“叠起来的光盘”,有很多个“盘面”(比如双面磁盘有2个盘面)。每个盘面都需要一个“读/写头”(简称磁头),就像唱片机的针头一样,负责读/写这个盘面的数据:
image.png

而且这些磁头是“同步行动”的——比如所有磁头一起往“外圈”移动,或者一起往“内圈”移动,不会各自为政。

3. 逻辑上的“柱面”

当所有磁头同步移动到同一个“磁道位置”时,这些盘面的“同位置磁道”会组成一个“圆柱形”的结构,这就是柱面——柱面是个“逻辑概念”,不是真的有个柱子,而是为了方便管理多个盘面的磁道:
image.png

比如写数据时,磁盘会让多个盘面的扇区“同时写”(比如6个扇区一起写),效率更高。

四、怎么找到磁盘里的“扇区”?两种寻址方式

知道了磁盘的结构,接下来的问题是:怎么精准定位到一个扇区(比如要把512字节的数据写入某个扇区)?

1. 早期的“三维定位”:CHS寻址

早期磁盘用的是CHS寻址,靠三个参数定位扇区,就像找教室要“哪栋楼(C)、哪一层(H)、哪个教室(S)”:

定位时,磁头会先移动到指定柱面,然后磁盘旋转,等指定扇区转到磁头下方,就能读/写数据了:
image.png
image.png

简单说:文件的本质,就是存在一个或多个扇区里——比如一个1KB的文件,就需要2个512字节的扇区。

2. 更简单的“线性定位”:LBA寻址

CHS寻址有个问题:磁盘容量变大后,柱面、磁头、扇区的数量会变得很复杂,操作系统管理起来很麻烦。于是就有了LBA寻址(Logical Block Addressing,逻辑块地址)。

LBA的思路很简单:把磁盘所有扇区“拉直”,看成一个“线性数组”,每个扇区给一个唯一的“编号”(从1开始,不是从0),这个编号就是LBA地址。比如磁盘有1000个扇区,LBA编号就是1~1000:
image.png
image.png

操作系统怎么算LBA总数?很简单:用磁盘总容量除以每个扇区的大小(512字节)。比如一个10GB的磁盘,总容量是10×1024×1024×1024字节,除以512字节/扇区,就能算出LBA总数:
image.png

注意:扇区的LBA编号是从1开始的,不是从0开始——这是硬件规定的:
image.png

3. CHS和LBA的转换:磁盘自己搞定

操作系统只需要用LBA地址(比如“写数据到LBA=100的扇区”),不用管CHS。那LBA怎么对应到实际的CHS位置?

不用咱们操心——磁盘硬件会自动完成“CHS和LBA的转换”:

最终结论:操作系统只需要跟LBA打交道,复杂的硬件细节(CHS)交给磁盘自己处理,效率更高:
image.png

五、操作系统怎么管磁盘?引入“文件系统”

前面说过,扇区是磁盘最小的存储单元(512字节),但操作系统读/写磁盘时,不会以扇区为单位——因为每次读512字节太慢了,效率太低。

于是文件系统引入了“块”的概念:

1. 比扇区大的“管理单元”:块

文件系统把多个扇区“打包”成一个“块”(Block),默认大小是4KB(也就是8个512字节的扇区)。操作系统读/写磁盘时,都以“块”为单位——就像搬砖,一次搬8块比一次搬1块快多了:
image.png

比如一个10KB的文件,需要3个4KB的块(前两个块存满4KB,第三个块存2KB,剩下的2KB空闲)。

2. 磁盘分“组”:块组管理

如果磁盘容量很大(比如300GB),直接管理所有块会很混乱。文件系统会把磁盘分成多个“块组”(Block Group),比如把300GB分成10个30GB的块组——每个块组相当于一个“小区”,管理自己的块,找文件时不用翻遍整个磁盘:
image.png

3. 块组里有什么?

每个块组里都有这些核心部分,负责管理文件的“属性”和“内容”:
image.png

重点说两个关键角色:

文件系统会把“内容”和“属性”分开存——属性存在inode里,内容存在数据块里。inode就像文件的“身份证”,是一个固定大小的“结构体”(编程里的struct),默认128字节:
image.png

比如一个文件的inode里,会记录“这个文件的内容存在哪些数据块里”——操作系统找到inode,就能顺着inode里的“块地址”,找到文件的内容:
image.png

六、实战:在Linux里看磁盘和inode信息

光说理论不够,咱们用Linux命令实际看看磁盘和inode的情况(云服务器或本地Linux都能执行):

1. 查看磁盘分区和扇区信息

lsblk 命令查看系统里的磁盘和分区(比如云服务器的磁盘):

# 列出所有磁盘和分区的信息(包括大小、类型)
lsblk

执行后会看到类似这样的结果(对应前面“云服务器查看磁盘”的图):

  • vda 是磁盘名,vda1 是磁盘的第一个分区;
  • 能看到分区大小(比如200GB),以及是否挂载(Mounted)。

如果想更详细地看扇区信息,用 fdisk -l 命令:

# 查看磁盘分区的详细信息(包括扇区大小、LBA总数)
fdisk -l /dev/vda  # /dev/vda 是磁盘路径

执行后能看到“扇区大小”(512字节)、“总扇区数”(比如419430400,对应200GB),这些就是咱们前面说的LBA相关信息。

2. 查看文件的inode信息

ls -i 命令查看文件的inode编号(每个文件的inode编号唯一):

# 查看当前目录下所有文件的inode编号和文件名
ls -i

比如执行后会看到:

123456  Linux笔记.txt  789012  图片.jpg

其中 123456 就是 Linux笔记.txt 的inode编号。

如果想查看inode里的详细属性(比如文件大小、创建时间),用 stat 命令:

# 查看指定文件的inode详细信息
stat Linux笔记.txt

执行后会看到类似这样的结果(对应前面inode存属性的图):

  File: Linux笔记.txtSize: 10240     	Blocks: 24         IO Block: 4096   regular file
Device: 801h/2049d	Inode: 123456      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2024-05-01 10:00:00.000000000 +0800
Modify: 2024-05-01 10:30:00.000000000 +0800
Change: 2024-05-01 10:30:00.000000000 +0800Birth: -

其中:

  • Inode: 123456 是inode编号;
  • Size: 10240 是文件大小(10KB);
  • Blocks: 24 是占用的块数(24×4KB=96KB?这里要注意:实际占用块数会比文件大小略大,因为即使文件没填满块,也会占用整个块);
  • Access/Modify/Change 是文件的访问、修改、属性变更时间,这些都存在inode里。

总结

咱们从“找文件”到“懂磁盘”,其实就绕了这几个圈:

  1. 文件=内容+属性,靠路径找到磁盘里的文件;
  2. 磁盘是硬件,靠磁道、扇区存数据,用CHS/LBA定位扇区;
  3. 文件系统用“块”管理磁盘,用“inode”存属性,把内容和属性分开管,让操作系统效率更高。

下次再用电脑存文件、看云盘,就知道背后是这么一套逻辑在干活啦~

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

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

相关文章

题解:CF1770H Koxia, Mahiru and Winter Festival

牛牛题。 题意:给出两个排列 \(p,q\),要求构造一种路径方案,\((1,i)\rightarrow(n,p_i)\),\((i,1) \rightarrow(q_i, n)\),要求经过次数最大的边经过次数最少。 做法: 首先 \(p_i=i,q_i=i\) 直接就是 \(1\),轻松…

HarmonyOS之LocalStorage - 详解

HarmonyOS之LocalStorage - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

南华 NHXJ-02 汽车悬架检验台:实用的技术特性与实操应用指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

建设银行网站理财产品安徽房地产网站建设

pack://application:, pack://application:, 是一个在 WPF (Windows Presentation Foundation) 应用程序中用于指定资源位置的 URI (统一资源标识符) 方案的特定格式。这个格式用于访问嵌入在应用程序程序集(assemblies)中的资源,如图像、XA…

网站建设后如何修改wordpress 投稿 标签

28-实现 strStr()(easy) 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 思路…

网站重定向淮北公司做网站

一、对插槽的理解 1.定义及作用: 插槽是一种用于在组件中插入内容的特殊语法。它的作用是让父组件可以向子组件传递内容,从而实现组件的灵活性和复用性。 2.分类: 插槽可以分为具名插槽和作用域插槽。 2.1具名插槽: 具名插槽允许父…

怎么做网站注册登入页面成都网站建设公

统一配置管理中心:TranslationChain 架构的简洁配置管理方案 1. 集中式配置文件设计 config/settings.yaml: # 多环境配置开关 env: production # development|test|production# 模型管理中心 models:openai:class: langchain_openai.ChatOpenAIparams

Spring Boot Logback:实现定时任务日志与业务日志隔离 - Higurashi

1. 问题背景 在 Spring Boot 应用中,我们通常使用@EnableScheduling启用定时任务。这些定时任务在执行过程中,可能会调用 Mapper 方法与数据库交互,产生大量的 SQL 日志。默认情况下,这些日志会与普通业务请求的日…

网络流 最小割 Dinic算法

标准模板 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=210,M=5e3+10; int n,m,s,t,d[N],cur[N],vis[N]; int h[N],e[M<<1],ne[M<<1],id=1;//从2,3开始配对 LL…

15.VLANIF(2025年9月30日) - 教程

15.VLANIF(2025年9月30日) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

国庆集训DAY2

国庆集训DAY2T1 cycle思路 直接暴力\(dfs\) 解法 \(dfs\)限制\(a_i \neq a_{i-1}\) 最后判断\(a_n \neq a_{1}\) 归纳总结解题策略 \(dfs\) 结果 100pts 时间分配 20minT2 factor思路 直接暴力\(dfs\) 解法 直接暴力\(…

树莓派搭建NAS之一:安装系统

准备工作 先提前准备好需要的材料树莓派3B以上版本 16GB+ 内存卡(内存卡速率最好高一些,不然系统容易卡顿) 内存卡读卡器 树莓派镜像烧录器 网线/无线网烧录系统 1、下载并安装 Raspberry Pi Imager 前往 Raspberry…

详细介绍:电子电气架构 --- 中国汽车座舱产品与技术发展趋势展望

详细介绍:电子电气架构 --- 中国汽车座舱产品与技术发展趋势展望pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

新手Markdown学习

Markdown 学习 标题 三级标题 四级标题 +空格+标题名称 几个#代表几级标题(最多六级) 字体 Hello,world!(头尾+**) Hello,world!(头尾+*) Hello,world!(头尾+***) Hello,world!(头尾+~~) 引用好好学习,天天…

马云归来,“新零售”不死 - 指南

马云归来,“新零售”不死 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

网站关键词如何选取用织梦做网站需不需授权

FROM Dockerfile中的第一个指令&#xff0c;也是一个必须的指令。它用于指定构建新镜像时所基于的基础镜像。 FROM <image>:<tag> FROM nginx:1.25.1-alpineRUN 指令在Dockerfile中可以出现多次&#xff0c;并且每个RUN指令都会创建一个新的镜像层。为了减少镜像…

银川网站开发公司电话怎么建立自己的小程序

1.更改图像大小 通常情况下&#xff0c;如果我们想在某些上传图片&#xff0c;会发现我们的图片可能会过大或者过小&#xff0c;为此&#xff0c;我们需要调整图像的大小&#xff0c;使之符合网站的规则。 首先打开photoshop&#xff0c;打开一张图片。首先我们需要了解这张图…

SQL正则表达式总结 - 实践

SQL正则表达式总结 - 实践2025-10-02 22:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

Pdfminer-Vulnerability-Research

Pdfminer code auditing and script development script path: https://github.com/L1nq0/Pdfminer-CMap-Generator CMapDB Deserialization cmapdb.py#CMapDB._load_data 调用 pickle.loads_load_data 传入参数 name…