【Linux】了解磁盘/文件系统/inode

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


一.磁盘

1.磁盘的结构

在这里插入图片描述

在这里插入图片描述

问题1什么是磁盘

磁盘是在冯诺依曼体系结构中几乎唯一的机械设备机械设备意味着它的效率低那么我们为什么还会使用磁盘呢因为磁盘相比我们所熟知的内存有一个极大的优势那就是永久性磁盘是一种永久性存储介质而内存是一种掉电易失存储介质也就是没电了存储的数据就没了。因此目前所有的普通文件都是存储在磁盘上的。

磁盘在冯诺依曼体系结构当中既可以充当输入设备有可以充当输出设备。
在这里插入图片描述

问题2了解磁盘结构

介绍一下磁盘中的几个重要部分
盘片(Platter)磁盘一般是由多个盘片组成的而每个盘片都有上下2个盘面。
磁头(Head) 每个盘面都有一个对应的磁头也就是一个盘片都有上下2个磁头。磁头的作用是对磁盘进行写入和读取
磁道(Track) 当磁盘旋转时磁头若保持在一个位置上则每个磁头都会在盘片的表面画出一个圆形轨迹这个圆形轨迹就称为磁道。
扇区(Sector) 每个磁道都被切分为很多扇形区域这个扇形区域被称为扇区磁盘在寻址的时候基本单位是扇区512字节。如图所示越靠近同心圆的扇区面积越小越远离扇区的同心圆面积越大但是每一个扇区的存储大小均为512字节
柱面(Cylinder)不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面。

磁盘是计算机中唯一一个机械结构并且是一个外设相对于其他存储设备来说较慢。但是价格低廉、存储量大成为了企业存储设备的首选。磁盘磁头和盘面之间的距离极近不能进灰尘使用时禁止搬移抖动刮花盘面以免造成数据丢失。

磁盘通过磁头充放电完成盘面南北极的调转即二进制数据的写入

2.磁盘的定位寻找方案

对磁盘进行读写操作时一般有以下几个步骤CHS定位法
1、先定位磁道(cylinder)(柱面)
2、定位磁头(head)(即盘面)
3、定位扇区(sector)。

磁头会通过摆动确认在哪个磁道通过盘片高速旋转让磁头定位扇区。磁盘转速与磁头寻址速度匹配所以盘片旋转速度越快该磁盘的IO效率越高

3.磁盘的分区与格式化介绍

1.线性存储介质

将一摞磁盘沿磁道“拉直”就抽象成了线性结构。想想磁带当磁带被卷起来时其就像磁盘一样是圆形的但当我们把磁带拉直后其就是线性的。那么整个磁盘可以看做一个sector arr[n]数组对磁盘数据的管理就变成了对数组的管理。只要知道了扇区的下标就可以定位扇区。这个下标在操作系统内部称为LBA地址。根据LBA地址可以转化为CHS地址从而找到对应扇区。
在这里插入图片描述

为什么操作系统要将CHS定位法抽象为LBA地址

1.便于操作系统管理硬盘
2.不想让操作系统的代码和硬件强耦合硬件的变化并不会影响操作系统。

2.磁盘分区

看作线性存储介质后就方便我们对磁盘进行管理了。因为磁盘的容量很大我们可以对磁盘进行分区管理。磁盘通常被称为块设备一般以扇区为单位一个扇区的大小通常为512字节。我们若以大小为512G的磁盘为例该磁盘就可被分为十亿多个扇区。在分区之后对每个区域的管理都是相同的不同的目录与文件就可以存储进不同的分区这将很大程度的减少工作量。

在Linux中我们可以通过以下命令查看我们磁盘的分区信息

1 | [zxn@VM-0-15-centos ~]$ ls /dev/vda* -l

在分区之后我们可以每个区域进行格式化。
  
大小为4KB的页框和页帧

操作系统中内存以4KB大小划分每个空间被称为页框

磁盘中的文件尤其是可执行文件也时安装4KB大小划分好的每个块被称为页帧

磁盘的最小单位是扇区512个字节。操作系统的文件系统每次读取数据会以1KB,2KB,4KB为基本单位大部分是4KB读取至内存。以4KB为基本单元进行IO时有时4KB的数据并不能完全被利用但是这不代表浪费。根据局部性原理当计算机访问某些数据时它附近的数据也有非常大的概率被访问到加载4KB有助于提高IO效率同时增大缓存命中率。本质上是一种数据预加载以空间换时间的做法。

3.磁盘的格式化

当磁盘完成分区后我们还需要对磁盘进行格式化。磁盘格式化就是对磁盘中的分区进行初始化的一种操作这种操作通常会导致现有的磁盘或分区中所有的文件被清除。
简单来说磁盘格式化就是对分区后的各个区域写入对应的管理信息。

其中写入的管理信息是什么是由文件系统决定的不同的文件系统格式化时写入的管理信息是不同的常见的文件系统有EXT2、EXT3、XFS、NTFS等。

二.理解inode

磁盘文件由两部分构成分别是文件内容和文件属性。文件内容就是文件当中存储的数据文件属性就是文件的一些基本信息例如文件名、文件大小以及文件创建时间等信息都是文件属性文件属性又被称为元信息。

在Linux操作系统中文件的属性信息和内容是分离存储的其中保存元信息的结构称之为inode因为系统当中可能存在大量的文件所以我们需要给每个文件的属性集起一个唯一的编号即inode
inode是一个文件的属性集合Linux中几乎每个文件都有一个inode为了区分系统当中大量的inode我们为每个inode设置了inode编号。

在命令行当中输入ls -i即可显示当前目录下各文件的inode编号
在这里插入图片描述

三.ext2文件系统的存储方案

磁盘采用分而治之的思想例如一块500G的磁盘可以划分成4个125G进行管理每个125G又可以分为多个5G进行管理等。计算机为了更好的管理磁盘会对磁盘进行分区。而对于每一个分区来说分区的头部会包括一个启动块(Boot Block)对于该分区的其余区域EXT2文件系统会根据分区的大小将其划分为一个个的块组(Block Group)。每个组块都有着相同的组成结构每个组块都由超级块(Super Block)、块组描述符表(Group Descriptor Table)、块位图(Block Bitmap)、inode位图(inode Bitmap)、inode表(inode Table)以及数据表(Data Block)组成。

注意 启动块的大小是确定的而块组的大小是由格式化的时候确定的并且不可以更改。
在这里插入图片描述

在这里插入图片描述
1.Super Block超级块: 存放文件系统的结构信息。记录的信息主要有Data Block和inode的总量未使用的Data Block和inode的数量一个Data Block和inode的大小最近一次被挂载的时间最近一次写入数据的时间最后一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏可以说整个文件系统的结构就破坏了幸运的是在一个分区中超级块的数量不止一个起到了备份的作用。

2.Group Descriptor Table块组描述符表 描述该分区中块组的属性信息。

3.Block Bitmap块位图 块位图当中记录着Data Block中哪个数据块已经被占用哪个数据块没有被占用。用0表示某位没有被使用用1表示某位数据块已经被使用。

4.inode Bitmapinode位图 inode位图当中记录着每个inode是否空闲可用。用0表示某位没有被使用用1表示某位inode已经被使用。

5.inode Tableinode表 保存了分组内部所有的可用已使用+未使用的inode。用来存放文件的属性信息的如文件的大小、权限、类型、创建时间、所属组、所属用户等。我们使用ls -l看到的信息都是从这里获取的。每个文件对应一个inode因此每个inode中都存储一个inode编号用来区分。唯独文件名不在inode表中存储。一个文件对应一个inodeinode是固定大小。每个分组中的inode为了区分彼此它们都有自己的ID。同一分区的inode是连续的不同分区的inode是无关联的

6.Data blocks数据块 保存的是分组内部所有文件的数据块。单个Data block存放文件内容大小随文件大小变化而变化。但是对于目录文件会存放目录下的所有文件名到其中。文件名保存在它所在目录的数据块中

如何理解创建一个空文件

1.通过inode的位图找到一个未使用的inode,然后将某个空闲位置的inode值修改为1。
2.在inode表中找到对应的inode并将文件的属性信息填入到inode结构中
3.将该文件的inode编号与文件名这对映射关系添加到目录文件的数据块中。

如何理解对文件写入信息

1.通过文件的inode编号找到对应的inode结构扫描Block Bitmap找到空闲的块将其值改为1
2.通过inode结构找到存储该文件的数据块并将数据写入数据块建立数据块和inode结构的对应关系
3.说明一个文件使用的数据块和inode结构的对应关系是通过一个数组来进行维护的该数组一般可以存储15个元素其中前12个元素分别对应该文件使用的12个数据块剩余的三个元素分别是一级索引二级索引和三级索引当该文件使用的数据块的个数超过12个时可以用这三个索引进行数据块的扩充。

如何理解删除一个文件?

1.将该文件的inode在inode位图中置为无效
2.将该文件申请过的数据块在块位图中置为无效。

此操作并不会真正将文件的属性信息和内容删除而只是将其inode号和数据块号置为了无效所以我们如果想要恢复文件只需要找到被删除的文件的inode编号将inode Bitmap中的比特位由0置1找到该文件在inode Table中的位置根据其中的映射关系找到文件的数据块并把Block Bitmap由0置1即可恢复文件。注意文件被删除后如果想恢复就不要再创建文件因为后续创建其他文件或是对其他文件进行写入操作申请inode号和数据块号时可能会将该置为无效了的inode号和数据块号分配出去。

如何理解目录

通过以上学习我们知道了文件系统是使用inode编号查找和删除文件的但是用户用的可不是inode编号而是文件名。
1.都说Linux下一切皆文件目录当然也是个文件也有自己的inode编号和数据块
2.目录的inode结构当中存储的就是目录的属性信息比如目录的大小拥有者等
3.但是目录的数据块中存储的是该目录下的文件名以及对应文件的inode编号文件名和inode的映射关系所以在一个目录下创建文件必须要有写入权限原因就是创建文件需要在目录的数据块中写入文件名和inode。

这同时也解释了一个目录下不能出现同名文件的原因

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux