Linux——磁盘和文件系统(一)
Linux——磁盘和文件系统
- 磁盘
- 机械式磁盘
- 固态硬盘
- 机械式磁盘结构
- 磁盘,磁道,扇区
- 柱面
- 文件系统的初始化
- 划卷(划盘)
- 挂载
- C盘放了什么东西
- Boot Block(启动模块)
- 0号组放了什么东西
- Super Block(超级块)
- Data Block(数据块)
- inode(索引结点)
- inode bit map和block bit map
- 软硬连接
- 硬链接
- 软连接
我们之前一直学习计算机都是在一个人为给定的,虚拟的层面上来了解的,今天我们来了解一下,一台计算机底层的组成,我们先来了解存储数据的硬件——磁盘。
磁盘
我们一切计算机的基础的基础,是要有一个东西可以来储存我们的数据,这样我们才可以在每次运行时按照我们已经储存好的数据和规定来运行,磁盘就是一个重要的储存设备。
磁盘(Disk)是一种用于存储和检索数据的存储设备。它是计算机系统中的主要外部存储介质之一,被用于长期存储数据、操作系统和应用程序。
发展到如今,我们的磁盘也有许多的种类:
机械式磁盘
- 硬盘驱动器(HDD): HDD 是一种使用磁性存储技术的机械式磁盘,其中包含旋转的磁性盘片和移动的磁头。数据存储在盘片上的磁性表面上,而磁头则用于读写数据。
这种是最早出现的磁盘,工作原理有点像“留声机”,通过指针头在磁道上读取存储数据:
这种磁盘最主要的优势就是它便宜,量大,很多企业都会用它。但是缺点就是比较容易损坏,(因为磁头的高速摇晃),一旦损坏,数据很难恢复。
固态硬盘
固态硬盘(SSD): SSD 是一种不使用机械部件的磁盘,而是使用闪存存储技术。
它相对于HDD更加快速、耐用和轻便,但是也更加昂贵,一般用在笔记本,轻量级的电脑上。
机械式磁盘结构
磁盘,磁道,扇区
我们拿上面的机械式磁盘的图为例:
磁盘:表面有一些磁性物质构成,可以记录一些二进制的数据。我们的磁头会从磁盘上读取数据。
磁道:我们上面看到磁盘好像是光滑的,其实盘面上已经被划分出来无数个轨道了,我们称这些轨道为磁道,磁头就是从磁道读取数据的。
扇区:磁道被等分划分出来的区域。
我们可以对扇区编号,方便我们进行管理。
我们这里虽然只看到了一个盘面,但是,实际上一个机械式的磁盘是由很多个磁盘垒起来的,也会有多个磁头:
同时注意,我们一个盘,可能两个面都是可以读写的。
柱面
柱面:所有盘面中,相对位置相同的磁道所形成的柱面。
文件系统的初始化
好了,现在我们有了磁盘了,但是现在这样的物理结构不方便我们进行想象。假设我现在把每一个盘面剪开,然后拼接在一起:
然后我们可以抽象出来每扇盘面上的磁道和扇区:
操作系统可以以扇区为单位读取,但是这样效率很低,其实我们我们可以一次读取多个扇区,以多个扇区为单位,我们称这样的这样的一个单位为文件块。
这样的话我们操作系统在读取文件的时候就会以文件块为单位进行读取。
划卷(划盘)
好的假设现在我有一个完整的磁盘,大小为500GB
现在有一个问题,500GB的磁盘,如果操作系统一个人来管理,操作系统会累死。所以,为了不让操作系统累死,我们可以将这500GB的磁盘进行区域划分:
好了,现在我们划分好了区域,我们可以对这些区域起个名字:比如我把红色的100GB的区域,叫做C盘,把蓝色的300GB的区域叫做E盘。相信到了这里,大部分的同学应该都熟悉起来了,这不就是我的电脑里我看见的C,D,E盘吗?:
比如我的电脑把总共的磁盘分了119GB给C盘,剩下的给了D盘,并不是我的电脑有两个磁盘。
挂载
好了,现在我们划好盘了,但问题是,操作系统不知道咋用,也不知道该从哪里开始用,所以如果我们划的盘想要被操作系统看见,就有了挂载的概念:
在计算机领域中,“挂载”是指将一个文件系统附加到文件系统目录树的特定位置的过程。挂载允许文件系统中的文件和目录可通过操作系统的文件系统层次结构进行访问。
具体来说,挂载通常包括以下步骤:
选择文件系统: 首先,确定要挂载的文件系统类型。常见的文件系统包括 ext4、NTFS、FAT32、XFS等。
选择挂载点: 选择一个现有的目录作为挂载点。这个目录将成为新文件系统的根目录,文件系统中的内容将在该目录下可见。
我们可以在Linux下用 mount /dev/sdb1 (分区)/mnt/mydrive (目录名)
我们在Linux下可以用df -h查看我们的文件系统被挂载在哪个区上:
这个其实和我们的U盘息息相关:
windows下,可以查看已挂载的卷和驱动器号:
先执行diskpart:
再执行:list volume:
C盘放了什么东西
好了,我们现在划好盘了,现在我们把视角转到那100GB的C盘中,现在操作系统该如何管理这100GB的磁盘区域呢?很简单,我又开始划分区域(划成一组一组的):
我们可以看一个更清晰的图:
Boot Block(启动模块)
诶,这就是我们划分的组了,我们来看看**Boot Block(启动模块)**有什么作用:
“Boot block”(引导块)通常指的是存储设备上的一个特殊区域,包含用于引导计算机操作系统的关键信息。这个区域在启动时会被加载到计算机的内存中,以启动操作系统的引导过程。
具体来说,引导块通常包括以下内容:
引导加载程序(Boot Loader): 引导块中的引导加载程序是一个小型的程序,位于存储设备的引导块区域。这个程序负责加载操作系统的内核到计算机的内存中,并启动操作系统的执行。常见的引导加载程序包括 GRUB(GRand Unified Bootloader)和 LILO(LInux LOader)等。
分区表信息: 引导块通常包含分区表信息,描述了存储设备上的分区结构,其中包括分区的起始位置、大小等信息。这些信息对引导加载程序来说很重要,因为它需要知道从哪个分区加载操作系统。
引导标志和签名: 引导块中可能包含引导标志和数字签名等信息,以确保引导加载程序的完整性和可信度。
其他引导参数: 引导块可能还包含一些其他的引导参数,这些参数可能被操作系统内核用于初始化系统环境。
引导块的位置和结构可能因不同的存储设备而异。在传统的硬盘驱动器(HDD)中,引导块通常位于存储设备的第一个扇区,这也被称为主引导记录(Master Boot Record,MBR)。在使用UEFI(Unified Extensible Firmware Interface)的系统中,引导块通常位于特定的EFI系统分区。
这是它的功能,最重要的一点是这个Boot Block会激活你的操作系统,如果这个区域坏了,那么电脑可能就报废了。
0号组放了什么东西
0号组也放了很多东西我们也一起来看看:
我们这里先来看看Super Block(超级块)和 Data Block
Super Block(超级块)
superblock(超级块)是文件系统中一个重要的元数据结构,它包含了关于整个文件系统的关键信息。superblock 存储了文件系统的参数、状态和结构,使操作系统能够有效地管理文件系统上的文件和目录。
以下是关于 superblock 的一些基本概念:
文件系统参数: superblock 包含了文件系统的基本参数,例如文件系统的类型、块大小、inode(索引节点)的大小等。这些参数对文件系统的整体结构和功能有着重要的影响。
文件系统状态: superblock 记录了文件系统的状态,如是否已经被挂载(mounted)、是否存在错误等。这有助于操作系统在文件系统挂载时进行正确的初始化和检查。
inode 信息: superblock 包含有关 inode 的信息,包括总共有多少个 inode、已经使用了多少个 inode,以及哪些 inode 已经被分配给了文件或目录。
数据块信息: superblock 存储了文件系统上数据块的总数、已经使用了多少个数据块,以及哪些数据块已经被分配给了文件。
文件系统的布局: superblock 描述了文件系统的整体布局,包括存储空间的分布、块组(block group)的数量等。块组是文件系统的逻辑划分单元,每个块组包含一组 inode 和数据块。
文件系统的挂载点: superblock 中包含了文件系统被挂载的位置信息,即文件系统在操作系统的目录树中的位置。
创建和修改时间: superblock 记录了文件系统的创建时间和最后一次修改时间,这些信息有助于追踪文件系统的历史和维护。
文件系统检查和修复: superblock 中可能包含用于文件系统检查和修复的标志和信息。这对于在文件系统异常情况下进行一致性检查和修复非常重要。
Data Block(数据块)
datablocks(数据块)是文件系统中用于存储文件和目录实际数据的基本单位。当文件系统需要存储文件的内容时,它将文件数据划分为块,然后将这些块存储在磁盘上的数据块中。这些数据块通常是文件系统管理的最小的可分配单元。
以下是关于 datablocks 的一些基本概念:
数据块大小: 文件系统通常将文件数据划分为固定大小的数据块。这个大小是文件系统的一个基本参数,通常在文件系统的超级块(superblock)中指定。典型的数据块大小可能是 4KB、8KB 或 16KB,具体取决于文件系统的设计。
块地址: 文件系统使用块地址来引用数据块。这些块地址存储在文件的 inode 中。对于小文件,块地址可能直接存储在 inode 中;对于大文件,块地址可能存储在一级、二级或三级块指针中,以支持更大的文件大小。
文件系统布局: 数据块的分配和管理通常是按照块组(block group)的形式进行的。块组是文件系统的逻辑单元,每个块组包含一组 inode、数据块和其他元数据。块组的使用有助于提高文件系统的性能和管理。
数据块分配: 当文件系统需要存储新的文件数据时,它会在数据块中找到未被使用的块,将文件数据写入这些块。文件系统会更新相关的数据结构,如 inode 和 datablocks bitmap,以跟踪数据块的使用情况。
文件系统性能: 数据块的大小和分配策略对文件系统的性能产生影响。较小的数据块可能导致更多的碎片,但可能更适用于小文件;较大的数据块可能减少碎片,但可能会浪费存储空间,特别是对于小文件而言。
总的来说,数据块是文件系统中用于存储文件实际内容的基本单位,文件系统的设计和性能特征与数据块的大小、分配方式以及块组的组织方式密切相关。
这是我们的超级块和数据块,现在我们来看一个很重要的概念:索引结点。
inode(索引结点)
索引结点是啥呢?如果我们用的Linux操作系统,我们可以看到这个结点:
前面这串数字就是索引结点,那么索引结点到底是啥呢?
其实我们平时找文件都用的是文件名去找,但是对于操作系统来说,人类的语言过于麻烦,所以就把除文件名之外的属性打包在一起,写成一个专门的结构,这,就叫索引结点:
一个索引结点对应一个文件名,所以表面上我们使用文件名寻找文件,但实际上操作系统通过索引结点来寻找文件。
inode bit map和block bit map
我们知道,索引结点再小,不可能有无限个,都是要占用空间和文件块的,而inode bit map和block bit map就是来标记哪些索引结点和板块被用了,用位图1表示用了,0表示没用。
软硬连接
好了,我们现在来谈软硬连接的问题,我们首先给出定义:
硬链接:
文件系统中的链接关系: 硬链接是指多个文件共享相同的 inode 号,它们指向文件系统中相同的数据块。因此,硬链接的文件实际上是文件系统中相同的实体,无论哪一个发生变化,其他都会受到影响。
** inode 号码**: 硬链接会在文件系统中创建一个额外的目录项,这个目录项具有相同的 inode 号。多个文件名指向相同的 inode,因此它们共享相同的数据和元数据。
删除行为: 当删除一个硬链接时,实际的数据块只有在最后一个链接被删除后才会被释放,因为每个链接都只是 inode 号的一个引用。
跨文件系统限制: 硬链接不能跨越不同的文件系统。
软链接:
文件系统中的链接关系: 软链接是一个独立的文件,它包含了指向目标文件的路径或者文件名。软链接并不直接引用目标文件的 inode 号,而是通过路径进行引用。
** inode 号码**: 软链接和目标文件有不同的 inode 号,它们在文件系统中是两个独立的实体。
删除行为: 如果删除了软链接所指向的目标文件,软链接仍然存在,但它成为一个“死链接”或者“孤立链接”。相反,如果删除软链接本身,不会影响目标文件。
跨文件系统: 软链接可以跨越不同的文件系统。
我们可以来演示一下:
硬链接
首先我们可以来演示硬链接,我们首先编一段代码:
形成mybin文件:
现在我们可以给这个文件创建硬链接(Linux下用ln指令):
我们看一下这个硬链接和mybin的索引结点号:
我们发现是一样的,说白了,硬链接就是另外一个文件和源文件共享索引结点。
而且运行结果也是一样的。
软连接
我们可以用ln -s创建软连接:
我们看看这个软连接的索引结点号:
我们发现和源文件的索引结点号不一样,其实软连接就是新创建了一个文件,存放指向源文件的路径,不共用索引结点
执行它,也可以得到我们的目标结果:
这个软连接,其实和Windows下的快捷方式是一样的。
网络上经常有段子,说当妈妈的为了不让儿子玩游戏,把桌面上的游戏卸载了。其实这样只是删除了软连接(快捷方式),程序本身并没有什么影响。
相关文章:

Linux——磁盘和文件系统(一)
Linux——磁盘和文件系统 磁盘机械式磁盘固态硬盘 机械式磁盘结构磁盘,磁道,扇区柱面 文件系统的初始化划卷(划盘) 挂载C盘放了什么东西Boot Block(启动模块) 0号组放了什么东西Super Block(超级…...

EasyCVR视频智能监管系统方案设计与应用
随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…...

Ubuntu搭建国标平台wvp-GB28181-pro
目录 简介安装和编译1.查看操作系统信息2.安装最新版的nodejs3.安装java环境4.安装mysql5.安装redis6.安装编译器7.安装cmake8.安装依赖库9.编译ZLMediaKit9.1.编译结果说明 10.编译wvp-GB28181-pro10.1.编译结果说明 配置1.WVP-PRO配置文件1.1.Mysql数据库配置1.2.REDIS数据库…...

LC 2808. 使循环数组所有元素相等的最少秒数
2808. 使循环数组所有元素相等的最少秒数 难度: 中等 题目大意: 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒,你可以对数组执行以下操作: 对于范围在 [0, n - 1] 内的每一个下标 i ,将 nums[i] 替换成 nums[i] &…...

Qt|大小端数据转换
后面打算写Qt关于网络编程的博客,网络编程就绕不开字节流数据传输,字节流数据的传输一般是根据协议来定义对应的报文该如何组包,那这就必然牵扯到了大端字节序和小端字节序的问题了。不清楚的大小端的可以看一下相关资料:大小端模…...

禅道添加自定义字段
1,数据库表 zt_story 添加自定义字段 bakDate1,bakDate2,bakDate3,bakDate4 2,在 /opt/lampp/htdocs/zentaopms/extension/custom/story/ext/config 中添加bakDate.php文件 <?php $config->story->datatab…...

蓝桥杯2024/1/26笔记-----基于PCF8591的电压采集装置
功能实现要求: 每次建好工程文件夹,里边包含User(放工程文件,mian.c,可以在这里写如同我这个文章的文本文档)、Driver(存放底层文件如Led.c,Led.h等) 新建的工程先搭建框…...

【一】esp32芯片开发板环境搭建
1、esp32的源码在github上的地址 不同的芯片支持的源码版本不一样,需要根据自己的实际的esp32开发板的芯片下载不用版本的代码 esp32支持多种开发方式,如arduino,ESP-IDF等。官方推荐使用idf开发,ESP-IDF 是乐鑫官方推出的物联网开…...

PyTorch2ONNX-分类模型:速度比较(固定维度、动态维度)、精度比较
图像分类模型部署: PyTorch -> ONNX 1. 模型部署介绍 1.1 人工智能开发部署全流程 #mermaid-svg-bAJun9u4XeSykIbg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bAJun9u4XeSykIbg .error-icon{fill:#552222;}…...

Docker命令快车道:一票通往高效开发之旅
欢迎登上 Docker 命令快车!在这趟旅程中,你不仅会学会如何驾驭 Docker 这辆神奇的车,还会发现如何让你的开发旅程变得更加轻松愉快。现在,请系好安全带,我们即将出发! Docker 是什么 Docker 就像是一辆超…...

IP类接口大全,含免费次数
IP查询 IP归属地-IPv4高精版:根据IP地址查询归属地信息,支持到中国地区(不含港台地区)街道级别,包含国家、省、市、区县、详细地址和运营商等信息。IP归属地-IPv4区县级:根据IP地址查询归属地信息…...

LLMs 的记忆和信息检索服务器 Motorhead
LLMs 的记忆和信息检索服务器 Motorhead 1. 为什么使用 Motorhead?2. 通过 Docker 启动 Motorhead3. Github 地址4. python 使用示例地址 1. 为什么使用 Motorhead? 使用 LLMs构建聊天应用程序时,每次都必须构建记忆处理。Motorhead是协助该…...

vue3项目中让echarts适应div的大小变化,跟随div的大小改变图表大小
目录如下 我的项目环境如下利用element-resize-detector插件监听元素大小变化element-resize-detector插件的用法完整代码如下:结果如下 在做项目的时候,经常会使用到echarts,特别是在做一些大屏项目的时候。有时候我们是需要根据div的大小改…...

springboot启动异常
Error creating bean with name ‘dataSource’ org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name dataSource: Unsatisfied dependency expressed through field basicProperties; nested exception is org.springframew…...

直播主播之互动率与促单
直播互动率是衡量直播间观众参与度的重要指标,通常指的是直播间的观众点赞、评论以及转发的数量。互动率越高,表明观众参与度越高,直播间的人气值也相应越高。 为了提升直播互动率,主播可以采取以下策略: 1.积极引导观众参与互动…...

Android 基础技术——Bitmap
笔者希望做一个系列,整理 Android 基础技术,本章是关于 Bitmap Bitmap 内存如何计算 占用内存 宽 * 缩放比例 * 高 * 缩放比例 * 每个像素所占字节 缩放比例 设备dpi/图片所在目录的dpi Bitmap加载优化?不改变图片质量的情况下怎么优化&am…...

数据结构奇妙旅程之七大排序
꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...

【JavaScript】Generator
MDN-Generator Generator对象由生成器函数返回,并且它符合可迭代协议和迭代器协议。 Generator-核心语法 核心语法: 定义生成器函数获取generator对象yield表达式的使用通过for of获取每一个yield的值 // 1. 通过function* 创建生成器函数 function* foo() {//…...

河南省考后天网上确认,请提前准备证件照哦
✔报名时间:2024年1月18号一1月24号 ✔报名确认和缴费:2024年1月 31号一2月4号 ✔准考证打印:2024年3月12号一3月17号 ✔笔试时间:2024年3月16日-2024年3月17日。 ✔面试时间:面试时间拟安排在2024年5月中旬 报名网址&…...

【前端】防抖和节流
防抖 防抖用于限制连续触发的事件的执行频率。当一个事件被触发时,防抖会延迟一定的时间执行对应的处理函数。如果在延迟时间内再次触发了同样的事件,那么之前的延迟执行将被取消,重新开始计时。 总结:在单位时间内频繁触发事件,只有最后一次生效 场景 :用户在输入框输…...

【网络】:网络套接字(UDP)
网络套接字 一.网络字节序二.端口号三.socket1.常见的API2.封装UdpSocket 四.地址转换函数 网络通信的本质就是进程间通信。 一.网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网…...

Linux编程 1/2 数据结构
数据结构: 程序 数据结构 算法 1.数据结构: 1.时间复杂度: 数据量的增长与程序运行时间增长所呈现的比例函数,则称为时间渐进复杂度函数简称时间复杂度 O(c) > O(logn)> O(n) > O(nlogn) > O(n^2) > O(n^3) > O(2^n) 2.空间复杂度: 2.类…...

【UE Niagara】实现闪电粒子效果的两种方式
目录 效果 步骤 方式一(网格体渲染器) (1)添加网格体渲染器 (2)修改粒子显示方向 (3)添加从上到下逐渐显现的效果 (4)粒子颜色变化 方式二࿰…...

js数组/对象的深拷贝与浅拷贝
文章目录 一、js中的深拷贝和浅拷贝二、浅拷贝1、Object.assign()2、利用es6扩展运算符(...) 二、深拷贝1、JSON 序列化和反序列化2、js原生代码实现3、使用第三方库lodash等 四、总结 一、js中的深拷贝和浅拷贝 在JS中,深拷贝和浅拷贝是针对…...

HCIA学习第六天:OSPF:开放式最短路径优先协议
OSPF:开放式最短路径优先协议 无类别链路状态IGP动态路由协议 1.距离矢量协议:运行距离矢量协议的路由器会周期性的泛洪自己的路由表。通过路由的交互,每台路由器从相邻的路由器学习到路由,并且加载进自己的路由表中;…...

从四个方面来解决企业在项目管理中遇到的各类问题
案例背景:某建筑集团有限公司成立于1949年,拥有国家房屋建筑工程施工总承包一级、建筑装修装饰工程专业承包一级、市政公用工程施工总承包一级资质。是一家集建筑施工、设备安装、装饰装潢、仿古建筑、房地产开发、建材试验为一体的具有综合生产能力的建…...

使用代码取大量2*2像素图片各通道均值,存于Excel文件中。
任务是取下图RGB各个通道的均值及标签(R, G,B,Label),其中标签由图片存放的文件夹标识。由于2*2像素图片较多,所以将结果放置于Excel表格中,之后使用SVM对他们进行分类。 from PIL import Image import os …...

React16源码: React中commit阶段的commitBeforeMutationLifecycles的源码实现
commitBeforeMutationLifecycles 1 )概述 在 react commit 阶段的 commitRoot 第一个while循环中调用了 commitBeforeMutationLifeCycles现在来看下,里面发生了什么 2 )源码 回到 commit 阶段的第一个循环中,在 commitRoot 函数…...

压制二元组的总价值
压制二元组的总价值 对于每一个 a i a_i ai, 看它能压制它前面的多少个元素, 那么它对总价值的贡献就是: 在a数组中: a i a_i ai压制了x个数, 贡献为: x ∗ i x*i x∗i被 a i a_i ai所压制的所有数在 a a a中的下标和为 y y y, 贡献为 − y -y −y 树状数组来求: 为了…...

【习题】保存应用数据
判断题 1. 首选项是关系型数据库。 错误(False) 2. 应用中涉及到Student信息,如包含姓名,性别,年龄,身高等信息可以用首选项来存储。 错误(False) 3. 同一应用或进程中每个文件仅存在一个Preferences实例。 正确(True) 单选题 …...