【Linux进阶】文件系统4——文件系统特性

news2025/1/13 10:15:11

1.磁盘组成与分区的复习

首先说明一下磁盘的物理组成,整块磁盘的组成主要有:

  • 圆形的碟片(主要记录数据的部分);
  • 机械手臂,与在机械手臂上的磁头(可擦写碟片上的数据);
  • 主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据;

从上面我们知道数据存储与读取的重点在于碟片,而碟片上的物理组成则为:

  • 扇区(Sector)为最小的物理存储单位,且依据磁盘设计的不同,目前主要有512B与448
  • 两种格式;
  • 将扇区组成一个圆,那就是柱面(Cylinder);
  • 早期的分区主要以柱面为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码,就好像座位一样);
  • 磁盘分区表主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT分区表;
  • MBR 分区表中,第一个扇区最重要,里面有:主引导记录(Master boot record,MBR)及
  • 分区表(partition table),其中MBR占有 446B,而分区表则占有64B;
  • GPT分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过2TB;

        至于磁盘的文件名部分,基本上,所有物理磁盘的文件名都已经被模拟成/dev/sd[a-p]的格式,第一块磁盘文件名为/dev/sda,而分区的文件名若以第一块磁盘为例,则为/dev/sda[1-128]。除了物理磁盘之外,虚拟机的磁盘通常为/devlvd[a-p]的格式。

        若有使用到软件磁盘阵列的话,那还有devlmd[0-128]的磁盘文件名,使用LVM时,文件名则为/devNGNAME/LVNAME等格式。关于软件磁盘阵列与LVM我们会在后面继续介绍,这里主要介绍的以物理磁盘及虚拟磁盘为主。

  • /devlsd[a-p][1-128]:为物理磁盘的文件名;
  • /devlvd[a-d][1-128]:为虚拟磁盘的文件名;

复习完物理组成后,来复习一下磁盘分区吧!

如前所述,以前磁盘分区最小单位经常是柱面,但CentOS7的分区软件,已经将最小单位改成了扇区,所以分区容量的大小可以划分的更细,此外,由于新的大容量磁盘大多要使用GPT分区表才能够使用全部的容量,因此过去那个MBR的传统磁盘分区表限制就不会存在了,不过,由于还是有小磁盘。

因此,你在处理分区的时候,还是得要先查询一下,你的分区是MBR分区表,还是GPT的分区表。后续的操作,大多还是以GPT为主来介绍。

2.文件系统特性

        我们都知道磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个文件系统。为什么需要进行格式化?

        这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式(filesystem)。由此我们也能够知道,每种操作系统能够使用的文件系统并不相同。

        举例来说,Windows98以前的微软操作系统主要使用的文件系统是FAT(或FAT16),Windows2000以后的版本有所谓的NTFS文件系统,至于Linux的正统文件系统则为ext2(Linux second Extended file system,ext2fs)。此外,在默认的情况下,Windows操作系统不支持Linux的ext2文件系统。

        传统的磁盘与文件系统应用中,一个分区就只能够被格式化成为一个文件系统,所以我们可以说个文件系统就是一个硬盘分区。但是由于新技术的利用,例如我们常听到的LVM与软件磁盘阵列(software raid ),这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM,RAID)。

        所以说,目前我们在格式化时已经不再说成针对硬盘分区来格式化了,通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。

那么文件系统是如何运行的呢?

        这与操作系统的文件有关。较新的操作系统的文件除了文件实际内容外,通常含有非常多的属性,

例如Linux操作系统的文件权限(rwx)与文件属性(拥有者、用户组、时间参数等 )文件系统通常会将这两部分的数据分别存放在不同的区块,

  • 文件的权限和属性保存在 inode 中(i 节点)中,每个 inode 都有自己的编号。每个文件各占用一个 inode。不仅如此,inode 中还记录着文件数据所在 block 块的编号;
  • 文件的实际内容保存在 data block 中(数据区块),类似衣柜的隔断,用来真正保存衣物。每个 block 都有属于自己的编号。当文件太大时,可能会占用多个 block 块。

另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量等。

每个inode与区块都有编号,至于这三个数据的意义可以简略说明如下:

  • 超级区块:记录此文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码;
  • 数据区块:实际记录文件的内容,若文件太大时,会占用多个区块。

        由于每个inode与数据区块都有编号,而每个文件都会占用一个inode,inode 内则有文件数据放置的区块号码。

        因此,我们可以知道的是,如果能够找到文件的inode 的话,那么自然就会知道这个文件所放置数据的区块号码,当然也就能够读出该文件的实际数据了。这是个比较有效率的做法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据,读写的性能比较好。

我们将inode与数据区块用图解来说明一下,如图所示:文件系统先格式化出 inode 和 block 块,假设某文件的权限和属性信息存放到 inode 4 号位置,这个 inode 记录了实际存储文件数据的 block 号有 4 个,分别为 2、7、13、15,此时我们的操作系统就能够据此来排列磁盘的读取顺序,可以一口气将四个区块内容读出来,那么数据的读取就如同下图中的箭头所指定的模样。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

        Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。

实际上,系统内部这个过程分成三步:

  1. 首先,系统找到这个文件名对应的inode号码;
  2. 其次,通过inode号码,获取inode信息;
  3. 最后,根据inode信息,分析 inode 所记录的权限与用户是否符合,找到文件数据所在的block,读出数据

这种数据存取的方法我们称为索引式文件系统(indexed allocation)。

        那有没有其他的常用文件系统可以比较一下?

有的,那就是我们常用的U盘,U盘使用的文件系统一般为FAT格式。

FAT这种格式的文件系统并没有inode存在,所以FAT没有办法将这个文件的所有区块在一开始就读取出来。每个区块号码都记录在前一个区块当中,它的读取方式有点像下面这样;

        上图中我们假设文件的数据依序写入1->7->4->15号这4个区块号码中,但这个文件系统没有办法一口气就知道四个区块的号码,它要一个一个地将区块读出后,才会知道下一个区块在何处。        如果同一个文件数据写入的区块太分散,则我们的磁头将无法在磁盘转一圈就读到所有的数据,因此磁盘就会多转好几圈才能完整地读取到这个文件的内容。

常常会听到所谓的碎片整理吧?需要碎片整理的原因就是文件写入的区块太过于离散,此时文件读取的性能将会变得很差所致。这个时候可以通过碎片整理将同一个文件所属的区块集合在一起,这样数据的读取会比较容易。

因此,FAT的文件系统需要不时地碎片整理一下,那么ext2是否需要磁盘整理呢?

        由于ext2是索引式文件系统,基本上不太需要进行碎片整理。但是如果文件系统使用太久,常常删除、编辑、新增文件时,那么还是可能会造成文件数据太过于离散的问题,此时或许会需要进行整理一下。Linux操作系统上面进行过ext2或ext3文件系统的碎片整理,似乎不太需要。

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

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

相关文章

Redis学习 - 基础篇

Redis学习 - 基础篇 一. 简介 Redis 是一个高性能的key-value数据库,常用的数据类型如下:string,list,set,zset,hash 二. 安装 Widows和Linux下如何安装Redis-CSDN博客 三. 常用命令 配置及数据库操作…

[ TOOLS ] JFLASH 使用说明

一、使用everything查找JFLASH everything是指这个软件,使用这个方便查找想要的文件 二、创建一个工程并配置 创建完后进行配置: Target devic: 板子的芯片型号,比如R7FA6M4Target interface: 一般是SWDSpeed: 一般是4000kHz, 不能下载则将Sp…

数学建模美赛入门

数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如:灰色预测模型需要微积分知识;神经网络需要用到导数知识;图论和层次分析法等都需要用到矩阵计算的相关知识等; 概率论与数理统计&am…

基于SpringBoot构造超简易QQ邮件服务发送 第二版

目录 追加 邮箱附件 添加依赖 编码 测试 第二版的更新点是追加了 邮箱附件功能 ( 后期追加定时任务 ) 基于SpringBoot构造超简易QQ邮件服务发送(分离-图解-新手) 第一版 追加 邮箱附件 添加依赖 <!-- 电子邮件 --><dependency><groupId>org.spri…

后端登录校验——Filter过滤器和Interceptor拦截器

一、Filter过滤器 前面我们学会了最先进的会话跟踪技术jwt令牌&#xff0c;那么我们要让用户使用某些功能时就要根据jwt令牌来验证用户身份&#xff0c;来决定他是否登陆了、让不让用户访问这个页面&#xff08;或功能&#xff09; 但是这样一来&#xff0c;没发一个请求&…

解决打印PDF文本不清楚的处理办法

之前打印PDF格式的电子书&#xff0c;不清晰&#xff0c;影响看书的心情&#xff0c;有时看到打印的书的质量&#xff0c;根本不想看&#xff0c;今天在打印一本页数不多&#xff0c;但PDF格式的书感觉也不太清楚&#xff0c;我想应该有办法解决&#xff0c;我使用的是解决福昕…

实时监测、智能预警:电缆光纤测温系统|原理、应用与前景

实时监测、智能预警&#xff1a;电缆光纤测温系统|原理、应用与前景 电缆光纤测温系统&#xff0c;作为现代电力系统中不可或缺的一部分&#xff0c;以其独特的优势在电缆安全监控领域发挥着日益重要的作用。该系统利用光纤传感技术&#xff0c;实时监测电缆的运行温度&#x…

【LeetCode刷题笔记】LeetCode.11.盛最多水的容器

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

KIVY Button¶

Button — Kivy 2.3.0 documentation Button Jump to API ⇓ Module: kivy.uix.button Added in 1.0.0 The Button is a Label with associated actions that are triggered when the button is pressed (or released after a click/touch). To configure the button, the s…

c++入门基础篇(上)

目录 前言&#xff1a; 1.c&#xff0b;&#xff0b;的第一个程序 2.命名空间 2.1 namespace的定义 2.2 命名空间使用 3.c&#xff0b;&#xff0b;输入&输出 4.缺省参数 5.函数重载 前言&#xff1a; 我们在之前学完了c语言的大部分语法知识&#xff0c;是不是意…

GraphRAG——一个基于图的检索增强生成的开源项目【送源码】

GraphRAG 最近几天&#xff0c;微软团队开源了GraphRAG&#xff0c;这是一种基于图&#xff08;Graph&#xff09;的检索增强生成方法。 先说说RAG吧&#xff0c;检索增强生成&#xff0c;相当于是从一个给定好的知识库中进行检索&#xff0c;接入LLM模型&#xff0c;让模型生…

数据结构——顺序表【C】

顺序表 1. 顺序表的概念以及结构1.1概念1.2静态顺序表和动态顺序表 2. 顺序表接口模拟实现接口总览2.1 初始化数据和销毁容器 2.2 顺序表的尾插和尾删2.3 头插和头删2.4 任意位置插入和删除数据2.5 查找数据 3. 顺序表的问题 &#xff1a; 1. 顺序表的概念以及结构 1.1概念 顺…

无缝协作:如何实现VMware与Ubuntu虚拟机的剪切板共享!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 剪贴板共享 📒📝 VMware设置📝 安装VMware Tools或open-vm-tools📝 验证剪贴板共享功能⚓️ 相关链接 🚓️📖 介绍 📖 无缝的剪贴板共享是提高工作效率的关键。在VMware和Ubuntu虚拟机的协同工作中,能够直接在宿…

【鸿蒙学习笔记】属性学习迭代笔记

这里写目录标题 TextImageColumnRow Text Entry Component struct PracExample {build() {Row() {Text(文本描述).fontSize(40)// 字体大小.fontWeight(FontWeight.Bold)// 加粗.fontColor(Color.Blue)// 字体颜色.backgroundColor(Color.Red)// 背景颜色.width(50%)// 组件宽…

arp缓存中毒实验

文章目录 一、相关知识1.什么是arp&#xff08;地址解析协议&#xff09;2.什么是免费arp&#xff08;1&#xff09;简介&#xff08;2&#xff09;主要应用&#xff08;3&#xff09;代码 3.什么是arp缓存中毒&#xff08;1&#xff09;简介&#xff08;2&#xff09;过程&…

ubuntu使用kubeadm搭建k8s集群

一、卸载k8s kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm -rf /var/lib/etcd …

第5章-组合序列类型

#全部是重点知识&#xff0c;必须会。 了解序列和索引|的相关概念 掌握序列的相关操作 掌握列表的相关操作 掌握元组的相关操作 掌握字典的相关操作 掌握集合的相关操作1&#xff0c;序列和索引 1&#xff0c;序列是一个用于存储多个值的连续空间&#xff0c;每一个值都对应一…

python实现建议股票计算器

name 无忧传播 stock_price 19.99 stock_code "003032" stock_rise 1.2 day 7print(f"公司&#xff1a;{name},代码&#xff1a;{stock_code},当前股价&#xff1a;{stock_price}")print("增长系数是&#xff1a;%f&#xff0c;经过%d天后&am…

Git本地仓库的搭建与使用

目录 一、前言 二、Linux下搭建 git 仓库 三、Windows下搭建 git 仓库 一、前言 做项目时&#xff0c;我们常常需要将自己的代码进行托管&#xff0c;但有时候 Github 的速度属实叫人流泪。有的人会选择 Gitee 等进行托管代码&#xff0c;这当然是可以的。那如果没有其他代码…

【VUE基础】VUE3第一节—vite创建vue3工程

什么是VUE Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0…