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

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.mfbz.cn/a/776869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件,然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…

python基础语法 006 内置函数

1 内置函数 材料参考:内置函数 — Python 3.12.4 文档 Python 解释器内置了很多函数和类型,任何时候都能直接使用 内置函数有无返回值,是python自己定义,不能以偏概全说都有返回值 以下为较为常用的内置函数,欢迎补充…

【二】Ubuntu24虚拟机在Mac OS的VMware Fusion下无法联网问题

文章目录 1.环境背景2. 需求背景3. 解决方法3.1 在mac的终端查看虚拟机NAT网络3.2 查看unbuntu节点2的网络配置3.3 问题定位与解决3.3.1 检查是否有冲突3.3.2 冲突解决方法 4. 总结4.1 NAT 网关的原理4.2 VMware Fusion 的 NAT 模式4.3 为什么网关冲突会引起问题4.4 理解配置冲…

transformer初探

transformer初探 self-attentionmultihead-attentionencoderdecoder self-attention 其实就是三个矩阵, W q W_q Wq​、 W k W_k Wk​、 W v W_v Wv​,这三个矩阵就是需要训练的参数。分别得到每个token对应的 q q q k k k v v v,其中 q …

系统测试-测试方法学习

目录 (1)等价类 (2)边界值 (3)正交:(只用于确定排列组合,不确定具体内容) (4)判定表法 (5)流程分析法 (6&#xff0…

【vue组件库搭建04】使用vitepress搭建站点并部署到github

前言 基于vitePress搭建文档站点,使用github pages进行部署 安装VitePress 1.Node.js 18 及以上版本 2.npm add -D vitepress 3.npx vitepress init 4.将需要回答几个简单的问题: ┌ Welcome to VitePress! │ ◇ Where should VitePress initi…

Vue2基础 14:自定义指令

自定义指令 1 函数式1.1 案例--v-text放大10倍 2 对象式2.1 案例--v-fbind默认获取焦点(函数式)2.2 案例--v-fbind默认获取焦点(对象式) 3 自定义指令容易犯的错4 全局指令写法(参考过滤器写法)&#xff1a…

C51单片机程序及仿真(加减器)

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

AndroidKille更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 apktool插件更新 网址 Releases iBotPeaches/Apktool (github.com) 找到apktool管理器 填入apktool位置,并输入apktool名字 选择默认的apktool版本 x掉,退出重启 可以看到反编译完成了 dex2jar 更新 网址 Release…

数据库-多表设计 多表查询

多表设计 一对多 一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键 外键约束 -- 创建表时指定 create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表…

帕金森患者饮食小贴士 满满的爱与关怀哦!

🍎 首先,要多吃水果和蔬菜!新鲜蔬果富含维生素和矿物质,对神经系统有很好的保护作用。🥦 特别是绿叶蔬菜,比如菠菜、生菜,它们都是健康的小天使!💚 🍲 其次&a…

vue2-vue3响应式原理

我们先来看一下响应式意味着什么?我们来看一段代码: m有一个初始化的值,有一段代码使用了这个值;那么在m有一个新的值时,这段代码可以自动重新执行; let m 20 console.log(m) console.log(m * 2)m 40上…

政策护航新能源助推绿色经济腾飞

随着全球气候变化问题日益严重,新能源行业的发展成为推动绿色经济腾飞的重要引擎。近年来,各国政府纷纷出台政策支持新能源产业,旨在激发行业活力,促进经济可持续发展。本文将从政策红利的角度,探讨新能源行业发展的现…

lnmp php7 安装ssh2扩展

安装ssh2扩展前必须安装libssh2包 下载地址: wget http://www.libssh2.org/download/libssh2-1.11.0.tar.gzwget http://pecl.php.net/get/ssh2-1.4.tgz (这里要换成最新的版本) 先安装 libssh2 再安装 SSH2: tar -zxvf libssh2-1.11.0.tar.gzcd libss…

【Linux进阶】ext2文件系统(inode)

1.再谈inode (1) 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个…

方法引用 异常 file

一.方法引用 1.方法引用概述 eg: 表示引用run1类里面的sxxxx方法 把这个方法当做抽象方法的方法体 ::是方法引用符 //方法引用Integer[] arr{4,3,1,6,2,7,8,5};Arrays.sort(arr,run1::subtraction);System.out.println(Arrays.toString(arr));}publi…

算法金 | 平均数、众数、中位数、极差、方差,标准差、频数、频率 一“统”江湖

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 更多内容,见微*公号往期文章,阅读人数已破 10, 000:协方差、方差、标准…

vue3自定义全局指令和局部指令

1.全局指令 el:指令绑定到的DOM元素,可以用于直接操作当前元素,默认传入钩子的就是el参数,例如我们开始实现的focus指令,就是直接操作的元素DOM binding:这是一个对象,包含以下属性:…

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

vue打包部署后 浏览器缓存问题,导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下: 每次build打包部署到服务器上时,偶尔会出现前端资源文件不能及时更新到最新,浏览器存在缓存问题,这时在…