Linux——磁盘和文件系统(一)

news2024/12/28 19:55:26

Linux——磁盘和文件系统

  • 磁盘
    • 机械式磁盘
    • 固态硬盘
  • 机械式磁盘结构
    • 磁盘,磁道,扇区
    • 柱面
  • 文件系统的初始化
    • 划卷(划盘)
  • 挂载
    • C盘放了什么东西
      • Boot Block(启动模块)
    • 0号组放了什么东西
      • Super Block(超级块)
      • Data Block(数据块)
  • inode(索引结点)
    • inode bit map和block bit map
  • 软硬连接
    • 硬链接
    • 软连接

我们之前一直学习计算机都是在一个人为给定的,虚拟的层面上来了解的,今天我们来了解一下,一台计算机底层的组成,我们先来了解存储数据的硬件——磁盘

磁盘

我们一切计算机的基础的基础,是要有一个东西可以来储存我们的数据,这样我们才可以在每次运行时按照我们已经储存好的数据和规定来运行,磁盘就是一个重要的储存设备。

磁盘(Disk)是一种用于存储和检索数据的存储设备。它是计算机系统中的主要外部存储介质之一,被用于长期存储数据、操作系统和应用程序。

发展到如今,我们的磁盘也有许多的种类:

机械式磁盘

  1. 硬盘驱动器(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下的快捷方式是一样的。

在这里插入图片描述在这里插入图片描述
网络上经常有段子,说当妈妈的为了不让儿子玩游戏,把桌面上的游戏卸载了。其实这样只是删除了软连接(快捷方式),程序本身并没有什么影响。

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

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

相关文章

[m1pro ] ssh: connect to host localhost port 22: Connection refused

在学习Hadoop 的时候,使用 ssh localhost 遇到以下问题 原因: 本地没有打开远程登录 解决办法:打开远程登录 成功结果

leetcode刷题(剑指offer) 191.位1的个数

191.位1的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(…

【Linux网络编程】网络编程套接字(1)

【Linux网络编程】网络编程套接字(1) 目录 【Linux网络编程】网络编程套接字(1)源IP地址和目的IP地址端口号端口号和进程ID的关系 网络通信TCP协议UDP协议网络字节序socket编程接口简单的UDP网络程序 作者:爱写代码的刚子 时间:2024.1.29 前言&#xff1…

时序预测 | Python基于Multihead-Attention-TCN-LSTM的时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时序预测 | Python基于Multihead-Attention-TCN-LSTM的时间序列预测 Multihead-Attention-TCN-LSTM(多头注意力-TCN-LSTM)是一种结合了多个注意力机制、时序卷积网络(TCN&#xff0…

ORB-SLAM策略思考之RANSAC

ORB-SLAM策略思考之RANSAC 1. 初始化器的RANSAC ORB-SLAM中的初始化器是一个端到端的地图初始化策略,即不需要人的参与双线程同时计算本质矩阵和单应性矩阵使用基于RANSAC和卡方检验的评价方法 为了保证两种算法评价的一致性,计算本质矩阵F和单应性矩阵…

ETCD监控方法以及核心指标

文章目录 1. 监控指标采集1.1 监控指标采集1.2 配置promethues采集和大盘 2. 核心告警指标3. 参考文章 探讨etcd的监控数据采集方式以及需要关注的核心指标,便于日常生产进行监控和巡检。 1. 监控指标采集 etcd默认通过/metrics指标暴露相关指标,因此不…

引入 js 文件报错: Uncaught SyntaxError: Unexpected token <

文章目录 问题分析问题 在开发中引入 Cesium.js 文件时报错如下 分析 我是这么引入的<body><noscript><strong>Were sorry but <%= htmlWebpackPlugin.options.title %> doesnt work properly without JavaScript enabled.Please enable it to c

C++仿函数、万能头文件、transform学习

这是网上的一个代码,里面的一些东西以前没用过; #include <bits/stdc++.h> using namespace std;// A Functor class increment { private:int num; public:increment(int n) : num(n) { }int operator () (int arr_num) const {return num + arr_num;} };// Driver …

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;append()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

Spark3内核源码与优化

文章目录 一、Spark内核原理1、Spark 内核概述1.1 简介1.2 Spark 核心组件1.3 Spark 通用运行流程概述 2、Spark 部署模式2.1 YARN Cluster 模式(重点)2.2 YARN Client 模式2.3 Standalone Cluster 模式2.4 Standalone Client 模式 3、Spark 通讯架构3.1 Spark 通信架构概述3.2…

江科大stm32学习笔记5——蜂鸣器

目录 一、接线 二、代码部分 三、查看库函数的方法 一、接线 蜂鸣器选择有源高电平触发蜂鸣器。 GND——GND VCC——正极 I/O——B12 注意&#xff1a;32上的PA15、PB3、和PB4是默认调试端口&#xff0c;如果使用需要进行额外配置&#xff0c;一般避开这三个端口。 二、…

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

5天!软件开发考试该如何准备?

作者&#xff1a;统信UOS技术团队 意外的早晨 那是一个阳光明媚的早晨&#xff0c;我正走早上班的路上&#xff0c;慢悠悠地享受着早餐。忽然&#xff0c;我的手机发出了提示音。一条来自领导的消息突然打破了宁静的早餐时光。它通知我&#xff0c;五天后将有一场考试——离线…

算法39:统计全 1 子矩形(力扣1504)----单调栈

题目: 给你一个 m x n 的二进制矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩…

申万宏源基于 StarRocks 构建实时数仓

作者 &#xff1a;申万宏源证券 实时数仓项目组 小编导读&#xff1a; 申万宏源证券有限公司是由新中国第一家股份制证券公司——申银万国证券股份有限公司与国内资本市场第一家上市证券公司——宏源证券股份有限公司&#xff0c;于 2015 年 1 月 16 日合并组建而成&#xff0c…

error: failed to open index: Database already open. Cannot acquire lock报错解决办法

ordinals节点数据同步出现报错 error: failed to open index: Database already open. Cannot acquire lock.问题分析&#xff1a; 出现问题的原因是btcoin core节点数据没有同步完我们就开始进行ordinals数据同步&#xff0c;导致/root/.local/share/ord/index.redb 文件数据…

盒子模型的内容总结

知识引入 1.认识盒子模型 在浏览网站时我们会发现内容都是按照区域划分的。这使得网页很工整、美观。在页面中&#xff0c;每一块区域分别承载不同的内容&#xff0c;使得网页的内容虽然零散&#xff0c;但是在版式排列上依然清晰有条理。如图1 图1 *承载内容的区域称为盒子…

Next.js 学习笔记(八)——优化

优化 Next.js 提供了多种内置优化&#xff0c;旨在提高应用程序的速度和核心网络生命指数。本指南将介绍可用于增强用户体验的优化功能。 内置组件 内置组件抽象化了实现常见 UI 优化的复杂性。这些组件包括&#xff1a; 图像&#xff1a;基于本地 <img> 元素构建。图…

Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】

RocksDB是Flink中用于持久化状态的默认后端&#xff0c;它提供了高性能和可靠的状态存储。然而&#xff0c;当处理大型状态并频繁读写时&#xff0c;可能会导致背压问题&#xff0c;因为RocksDB需要从磁盘读取和写入数据&#xff0c;而这可能成为瓶颈。 遇到的问题 Flink开发…

STM32 有源蜂鸣器

模块介绍: 结构&#xff1a;有源蜂鸣器通常由一个振膜和一个驱动电路组成。振膜是负责产生声音的部分&#xff0c;而驱动电路则负责控制振荡频率和幅度。 工作原理&#xff1a;有源蜂鸣器的驱动电路会向振膜施加电压&#xff0c;使其振动产生声音。驱动电路可以根据输入信号的…