Linux文件系统与磁盘存储

发布于:2025-02-22 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

一、磁盘基础

二、磁盘的结构与工作原理

1. 磁盘的物理结构

2. 磁盘的工作原理

🍒磁道与扇区 :

🍇磁盘如何找数据?

3. 磁盘的应用场景

🌵个人电脑

🌻公司服务器

4. 逻辑块地址(LBA)

三、文件系统

1. 磁盘分区与格式化

2. 文件系统的概念

3. EXT2文件系统是如何工作的?

4. 目录

四、现实应用揭秘

1. 如何理解创建一个文件?

2. 如何理解删除一个文件?

3. 如何理解对文件写入信息?

4. 为什么拷贝文件的时候很慢,而删除文件的时候很快?


一、磁盘基础

        磁盘是计算机中用来存储数据的重要设备,它就像一个大仓库,可以长期保存各种信息。磁盘主要分为两种类型:机械硬盘(HDD)和 固态硬盘(SSD)

  • 机械硬盘(HDD) :这种磁盘里面有很多像光盘一样的盘片,这些盘片可以旋转。数据就存储在这些盘片的表面上。机械硬盘的优点是容量大,价格相对便宜。但是,它的读写速度比较慢,因为需要磁头移动到指定位置才能读取或写入数据。而且,机械硬盘比较怕震动,如果受到剧烈震动,可能会导致数据丢失。

  • 固态硬盘(SSD) :固态硬盘没有机械部件,它使用闪存芯片来存储数据。固态硬盘的读写速度非常快,比机械硬盘快很多倍。这就像在高速公路上开车和在乡间小路上开车的区别一样。而且,固态硬盘抗震性能好,不怕震动。但是,固态硬盘的价格相对较高,容量也相对较小。

二、磁盘的结构与工作原理

1. 磁盘的物理结构

  • 盘片 :机械硬盘里面有很多盘片,这些盘片就像光盘一样,可以存储数据。每个盘片有两个面,都可以存储数据。盘片的数量越多,硬盘的存储容量就越大。

  • 主轴马达 :主轴马达位于盘片的中心,它的作用是驱动盘片旋转。就像一个电机一样,让盘片不停地转动。

  • 磁头 :读写磁头是机械硬盘中非常重要的部件。每个盘片表面都有一个读写头,它的作用是读取和写入数据。读写头悬浮在盘片表面上非常微小的距离内,就像一个飞机在跑道上起飞和降落一样,不会接触到盘片表面,以免造成损害。

  • 臂架 :读写头被安装在臂架上,臂架的运动使读写头能够在盘片的半径方向上移动。就像一个起重机一样,可以将读写头移动到盘片的不同位置,从而访问盘片上不同轨道的数据。

2. 磁盘的工作原理

🍒磁道与扇区

        每个盘片的表面被划分为很多同心圆环,这些同心圆环就是磁道。磁道就像一条条道路一样,数据就存储在这些道路上。每个磁道又被划分为很多小块,这些小块就是扇区。扇区是磁盘的最小组成单元,就像一个个小房间一样,数据就存储在这些小房间里。传统上,每个扇区的大小为 512 字节,但近年来逐渐过渡到 4096 字节的大扇区。

🍇磁盘如何找数据?

使用三维坐标定位法(CHS):

  1. 磁头选择:决定读哪个盘面

  2. 磁道定位:选择同心圆轨道

  3. 扇区查找:确定具体储物格

好比在大型立体停车场找车:

  • 先确定楼层(磁头)

  • 再找到停车区(磁道)

  • 最后定位车位号(扇区)


        Cylinder(柱面)是指磁盘上所有盘片的同一磁道组成的圆柱形区域Head(磁头)是指读写磁头Sector(扇区)是指磁道上的扇区。通过确定柱面、磁头和扇区,就可以准确定位到磁盘上的任何一个位置,就像通过门牌号找到一个具体的房间一样。

3. 磁盘的应用场景

🌵个人电脑

        现在大多数电脑上装的都是 SSD,因为 SSD 相比传统的机械硬盘(HDD)有更快的读写速度、更低的功耗和更小的噪音。就像一辆跑车一样,速度快、省油、安静。同时,因为没有机械运动部件,所以更耐震动,故障率也相对较低。就像一个坚固的保险箱一样,能够更好地保护数据。

🌻公司服务器

        在公司或企业的服务器存储解决方案中,尽管 SSD 在性能上有明显优势,但出于成本和容量考虑,长时间存储大量数据通常还是使用机械硬盘(HDD)。HDD 的成本较低,存储容量较大,就像一个大仓库一样,能够存储很多数据。适合用来存储那些不经常访问但需要长期保存的数据,比如公司的历史档案、备份数据等。

4. 逻辑块地址(LBA)

        随着技术的发展,出现了逻辑块地址(LBA)的概念。LBA 将磁盘上的所有扇区视为一个线性序列,就像把很多小房间排成一条长队一样。操作系统可以通过 LBA 直接定位到扇区,而无需关心具体的磁头、柱面和扇区信息。这就像通过一个统一的编号系统找到一个具体的房间一样,更加简单方便。

三、文件系统

1. 磁盘分区与格式化

分区把大仓库隔成多个房间

        磁盘通常被称作块设备,一般情况下,它以扇区作为基本单位来进行数据的存储和管理。通常而言,一个扇区的容量大小设定为 512 字节。以一块容量为 512G 的磁盘为例,它能够被划分成十亿多个扇区,这些扇区就好比是磁盘上的一个个微型存储空间,用于存放各种数据。

        为了让计算机能够更加高效、有序地管理磁盘,人们会借助分区编辑器对磁盘进行分区操作。磁盘分区,简单来说,就是在磁盘上划分出几个逻辑区域。一旦盘片被划分成多个分区,不同类型的目录与文件便可以分别存储到不同的分区之中。分区数量越多,文件的性质就能被区分得更为细致,从而可以根据文件的不同用途、类型等属性,将它们合理地存储在各个分区里,以便更好地对文件进行分类管理。就好比在 Windows 操作系统中,磁盘常常被划分为 C 盘和 D 盘这两个区域,以此来实现系统文件与用户数据等不同类型文件的分开放置。


格式化给每个房间安装货架系统

        磁盘格式化就像给一个杂乱的房间重新装修。刚开始的时候,这个房间里到处都是乱七八糟的东西,比如衣服、书本、玩具等等,根本没有一点秩序。这时候,你决定给这个房间来个大扫除。

        首先,你把房间里所有的东西都清理出去,不管它们是好是坏,是旧是新,全部都搬走。这就好比在磁盘格式化的过程中,所有的数据,不管是重要的文件、照片还是视频,都会被清除得干干净净。接着,你会对房间进行重新规划,决定在哪里放床、书桌、衣柜等等。你会根据房间的大小和形状,把空间合理地分割成不同的部分,比如睡觉的区域、学习的区域、娱乐的区域等等。在磁盘格式化中,也会根据磁盘的大小和类型,把磁盘上的空间重新分配,划分出不同的区域来存储不同类型的数据。最后,你会把房间打扫得干干净净,铺上新的床单、摆上新的家具,让整个房间焕然一新。磁盘格式化后,磁盘就像一个全新的空间一样,没有了原来的任何数据,等待着你去存储新的东西。

        所以,磁盘格式化就像给磁盘进行一次大清理和重新规划,让它变得整洁有序,准备好迎接新的数据存储任务。

2. 文件系统的概念

        文件系统是操作系统用于管理存储设备或分区上的文件的方法和数据结构。它就像一个仓库的管理员一样,负责管理文件的存储、读取和写入。在 Linux 中,常见的文件系统类型包括 ext2、ext3 和 ext4。

  • ext2 :ext2 是一种高效稳定的文件系统,但它不是日志文件系统。就像一个简单的仓库管理员一样,可以很好地管理文件,但在系统崩溃或断电时,可能会丢失一些文件信息。

  • ext3 :ext3 是基于 ext2 发展而来的,它增加了日志功能。就像一个更加细心的仓库管理员一样,会在操作过程中记录一些日志信息,以便在系统崩溃或断电时能够快速恢复文件系统。

  • ext4 :ext4 是对 ext2 和 ext3 进行改进和增强后的文件系统。它引入了 extents 数据结构,支持更大的文件和理论上无限的文件数量。就像一个更加智能的仓库管理员一样,可以更好地管理大量的文件,提高了文件系统的性能。

3. EXT2文件系统是如何工作的?

        为了方便计算机更好地管理磁盘,会对磁盘进行分区操作。就像给一个大房间划分出不同的小房间一样,每个分区就像是一个独立的小房间。对于每一个这样的分区来说,在分区的头部,会有一个特殊的区域,我们称之为启动块(Boot Block),它就像是这个分区的大门,记录着分区的一些关键信息。

        接下来,分区剩下的部分就像是一个大仓库,EXT2文件系统会对这个仓库进行细致的划分。它会根据分区的大小,把这个大仓库划分为一个个的小区域,我们把这些小区域称为块组(Block Group)。需要注意的是,启动块就像是一扇固定大小的门,它的大小是预先确定好的,而块组的大小则是在对磁盘进行格式化时确定的,并且一旦确定之后,就不能再进行更改,这就像是房间的大小在建设之初就确定好了,之后无法轻易改变。

        每一个块组都有着相同的组成结构,就像是一套标准的房间布局。每个块组都由几个重要的部分组成:

  • 首先是超级块(Super Block),它就像是块组的指挥中心,记录着整个块组的重要信息和规则;
  • 接着是块组描述符表(Group Descriptor Table),它就像是一个说明书,描述了块组的各种属性和特性;
  • 然后是块位图(Block Bitmap)和inode位图(inode Bitmap),它们分别用于记录数据块和inode的使用情况,就像是仓库里的货物清单,告诉我们哪些地方是空闲的,哪些地方是已经被使用的;
  • 接着是inode表(inode Table),它就像是一个文件的身份证管理中心,记录着每个文件的基本信息;
  • 最后是数据表(Data Block),这是真正存储文件内容的地方,就像是仓库里堆放货物的货架,每个数据块都存放着文件的一部分内容。

        在 Linux 系统中,文件的属性和内容是分开存储的。文件内容被分割成多个块,存储在磁盘的数据区中。数据区(Data Blocks)是文件系统中用于存储数据的最小单位,就像一个个小盒子一样,每个小盒子都有固定的大小。文件的属性信息(如文件名、文件大小、创建时间等)存储在 inode 中。

  • inode :inode 是一个文件的属性集合,就像一个文件的身份证一样。Linux 中几乎每个文件都有一个 inode,为了区分系统当中大量的 inode,我们为每个 inode 设置了 inode 编号。通过 inode 编号,我们可以找到文件的属性信息,从而访问文件内容。

4. 目录

        目录也是文件,也有自己的 inode 和属性。目录的内容是数据块中存储的文件名与对应文件 inode 的映射关系。就像一个仓库的货架上,写着文件的名字和对应的文件身份证编号一样。

  • 同一个目录下不能有同名文件 :因为通过目录内容中的文件名找到对应 inode,进而访问文件内容。就像在一个货架上,不能有两个相同的文件名,否则就会混淆,不知道该访问哪个文件了。

  • 目录的权限设置 :目录的权限设置影响对文件的访问。如果目录没有写权限,就无法删除文件;如果没有读权限,就无法查看文件;如果没有执行权限,就无法进入目录。就像仓库的门锁一样,只有有权限的人才能进入仓库,操作文件。

四、现实应用揭秘

1. 如何理解创建一个文件?

        在计算机系统中,要创建一个空文件,首先需要在磁盘的inode位图中找到一个未被使用的inode。这就像在一片广阔的土地上寻找一块尚未被开发的空地。找到空闲的inode后,系统会在inode表中为这个新文件分配一个位置,并在其中记录文件的属性信息,例如文件的大小、创建时间等。这相当于在那块空地上竖起一块地界碑,明确这块地的所有者和用途。

        然后,系统会将这个文件的名称和对应的inode编号记录在目录文件的数据块中。这就好比在社区的地图册上标注了新房子的位置和门牌号,方便其他人能够找到它。

2. 如何理解删除一个文件?

        删除一个文件的过程相对简单。系统只需要将文件对应的inode在inode位图中标记为无效,同时将该文件占用的数据块在块位图中也标记为无效。这就好比在小区地图册上划掉了一个房子的标记,同时释放了房子所占的房间。

        但是,这样的操作并没有真正将文件的信息从磁盘上清除。文件的内容仍然存在,只是操作系统不再“知道”它们的存在。因此,在短时间内,这些文件是可以恢复的。这就像被划掉的房子仍然矗立在原地,只是没有人在意它的存在。但随着时间的推移,当系统需要分配新的文件或数据块时,这些被标记为无效的inode和数据块可能会被重新分配。这时,原来的文件数据就会被覆盖,就像房子被拆除重建一样,原有的信息也就无法恢复了。

3. 如何理解对文件写入信息?

        当需要向文件中写入信息时,系统首先要通过文件的inode编号找到对应的inode结构。这就像根据门牌号找到了目标房子。然后,系统会根据inode结构中的信息找到存储文件内容的数据块。如果数据块中还有足够的空间,就直接将新数据写入到数据块中。

        如果数据块的空间不足,或者该文件还没有分配数据块,那么系统就需要在块位图中寻找空闲的块号。这就像在小区中寻找空闲的房间。找到空闲的块后,系统会在数据区中分配这个块,并将数据写入其中。最后,还需要在inode结构和数据块之间建立对应的链接关系,确保文件内容能够正确地被存储和读取。这就好比在房子和房间之间建立了一条通道,方便人们在房子和房间之间穿梭。

        一个文件使用的数据块和inode结构之间的对应关系是通过一个数组来维护的。这个数组通常可以存储15个元素,前12个元素分别对应文件使用的12个数据块,后3个元素分别是一级索引、二级索引和三级索引。当文件使用的数据块数量超过12个时,就可以利用这三个索引来扩展数据块的存储空间。这就像在房子中,如果房间不够用,就可以通过建立新的楼栋或者分区来增加可用的空间。

4. 为什么拷贝文件的时候很慢,而删除文件的时候很快?

        拷贝文件的过程相对复杂。首先要创建一个新的文件,这需要在磁盘上找到空闲的inode,并为其分配属性信息。然后,需要将原文件的内容从数据块中读取出来,再写入到新文件的数据块中。这个过程相当于将一个房子中的家具一件件地搬到另一个房子。由于要经历申请资源、搬运数据等一系列操作,因此耗时较长。

        而删除文件的过程则非常简单。只需要在磁盘的位图中标记相关的inode和数据块为无效,这样系统就不再将它们视为有效数据。这就好比在一份文件清单上划掉一个条目,操作非常迅速。这是因为删除操作并不真正清理数据,而是仅仅改变了数据的标记状态。