【linux】:模拟文件基本操作以及文件在磁盘中如何存储的学习(下)

简介: 【linux】:模拟文件基本操作以及文件在磁盘中如何存储的学习(下)

二、磁盘文件



一个文件在不被打开的时候是存储在磁盘中的,那么这个文件如何在磁盘中合理的存储呢?要了解文件如何在磁盘中存储,我们要先了解磁盘,如下图所示:

d7c02aa068e94f5295241b1bdaaa40cb.png




磁盘有几个重要的接口,分别是马达,盘片,磁头,一个磁头可以读取一个面的数据。磁盘中每个数据都是0 1,,01 的表示有很多种,波峰波谷,南极北极等,并且磁头和盘面是不接触的,只不过他们离的距离很近,下面是盘面的结构:

5053c2bc53d3490f8b787865c9a57556.png


在盘面上有扇区和磁道,一般的磁盘所有的扇区都是512字节,那么如何在硬件上定位一个扇区呢?要定位扇区首先要定位哪一个盘面,而盘面又是通过磁头确定的,因为磁头有相应的编号,通过磁头的编号就能找到哪个面了,找到面后我们要找扇区需要先定位在哪一个磁道,而磁道是通过半径决定的,在确定在该磁道在哪一个扇区,根据扇区的编号定位一个扇区。理解了以上的知识,我们就能谈文件是如何在磁盘中存储的了,一个普通文件(属性+数据)都是数据0,1,对于0 1这样的数据无非就是占用一个或者多个扇区,来进行自己的数据存储的,我们既然能够用CHS定位任意一个扇区,我们就能定位任意多个扇区,从而将文件从硬件角度,进行读取或者写入。


下面我们根据操作系统和磁盘的关系分析一下磁盘:


根据我们上面的描述,如果操作系统能够得知任意一个CHS地址,就能访问任意一个扇区,那么操作系统内部是不是直接使用的CHS地址呢?答案其实不是,因为操作系统是软件,磁盘是硬件,硬件定位一个地址,如果操作系统直接用了这个地址,玩意硬件变了呢?这样的话操作系统也要发生变化,操作系统要和硬件做好解耦工作所以不能直接用硬件上的地址。并且扇区才512字节,操作系统实际向外设写入的基本单位是4KB,与扇区并不符合,所以操作系统需要有一套新的地址来进行块级别的访问。现在我们画一张图表示一下磁道中的扇区结构:

5c30d64277a24ce38fa703b309d7d1a1.png

每一个扇区都是512,我们从头开始数512就找到了第一个扇区。这就印证了计算机常规的访问方式:起始地址 + 偏移量的方式,也就是说我们只需要知道数据块的起始地址(第一个扇区的下标地址)+4KB(块的类型)如下图所示:

4edb2b231e8d48208d5b23fbbd59e0bb.png


所以块的地址,本质就是数组的一个下标N,以后我们表示一个块,我们可以采用线性下标N的方式定位任何一个块了。OS->N->LBA->逻辑块地址,前面我们说了,磁盘只认CHS方式,所以要让这两个联系起来就需要LBA到CHS互相转化。就拿我们的电脑而言,我们进入我的电脑发现有ABCD 4个盘或者几个盘,而实际只有一个盘,是因为将这一个盘分区管理得到的四个盘,就如下图所示:

c87b8f024dcc480eadbc68a851ddd33d.png


如上图所示,我们将500G的磁盘分为150G一组,那么在这个150G的盘中都有什么呢?其实上图已经给出答案了,Boot Block主要保存与操作系统启动相关的内容,比如分区表,操作系统镜像的地址等,所以一般分区会在0号盘面0号磁道1号扇区保存的,对应的在C盘的某个区域存储,而这个块又被称为启动块,如果这个块坏了就不能开机了。文件= 内容+属性,linux下是将内容和属性分离的。


1.SuperBlock保存的是文件系统的所有属性信息,比如文件系统的类型,整个分组的情况。而SuperBlock在各个分组里面可能都存在,而且是统一更新的,这样做的原因是防止SuperBlock区域坏掉,如果出现故障,整个分区不可以再被使用。


2.GroupDescriptorTable:组描述符,改组内的详细统计等属性信息。


3.inodeTable:一个文件内部所有属性的集合,inode节点(128字节),一个文件一个inode,其中即便是一个分区,内部也会存在大量的文件即会存在大量的inode节点,一个group需要有一个区域,专门保存该group内的所有文件的inode节点。分组内部,可能存在多个inode,需要将inode区分开来,每一个inode都有自己的inode编号,inode编号也属于对应文件的属性id。


4.DateBlocks:文件的内容是变化的,我们是用数据块来进行文件的内容的保存的,所以一个有效文件要保存内容,就需要[1,n]数据块,那么如果是多个文件所以就需要更多的数据块,而DateBlock就是保存这些数据块的。而linux查找文件是要根据inode编号来进行文件查找的,包括读取内容,一个inode对应一个文件,而改文件inode属性和改文件对应的数据块是有映射关系的。


5.块位图BlockBitmap:BlockBitmap中记录着DateBlock中哪个数据块已经被占用,哪个数据块没有被占用。


6.inode位图inodeBitmap:每个bit表示一个inode是否空闲可用


总结



本篇文章的主要内容是在上一篇文件操作的基础上再次深刻理解系统文件操作,然后我们又大致讲解了磁盘的物理空间是什么样的是如何存储数据的,通过软硬件共同学习我们能知道文件的各个属性在磁盘中是如何存储的,每个分

目录
相关文章
|
4月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
704 13
|
5月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
185 16
|
5月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
102 4
|
6月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
880 12
|
5月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
Linux 开发工具 Shell
|
Shell Linux 数据安全/隐私保护
|
Linux 开发工具 安全