【Linux】磁盘存储+文件系统简介

目录

1、理解硬件

[1.1 磁盘构成](#1.1 磁盘构成)

[1.2 CHS地址定位](#1.2 CHS地址定位)

[1.3 磁盘的逻辑结构](#1.3 磁盘的逻辑结构)

[1.3.1 理解过程](#1.3.1 理解过程)

[1.3.2 真实过程](#1.3.2 真实过程)

2、引入文件系统

[2.1 引入"块的概念"](#2.1 引入“块的概念”)

[2.2 引入"分区"概念](#2.2 引入“分区”概念)

[2.3 了解分组细节](#2.3 了解分组细节)


正文:

1、理解硬件

1.1 磁盘构成

磁盘由主轴马达、磁盘、磁头、磁头臂、永磁铁构成。如下图:

图中那面光滑的可以照镜子的圆盘就是磁盘,光滑的磁盘上其实有一圈一圈磁道,磁道又由一个一个扇区组成,每条磁道上扇区个数都是相同的。

扇区:是磁盘存储数据的基本单位,512字节,块设备

如何定位⼀个扇区呢?

• 可以先定位磁头(header)

• 确定磁头要访问哪⼀个柱⾯(磁道)(cylinder)

• 定位⼀个扇区(sector)

1.2 CHS地址定位

每个磁头、磁道、扇区都有编号,起始编号分别是:0,0,1 这就称为CHS地址定位

文件=内容+属性都是数据,无非就是占据那几个扇区的问题!能定位一个扇区了,能不能定位多个扇区呢?

扇区是从磁盘读出和写入信息的最小单位,通常大小为 512 字节。
磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头
磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据
柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数
扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同
圆盘(platter)数:就是盘片的数量

磁盘容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
细节:传动臂上的磁头是共进退的

柱面(cylinder),磁头(head),扇区(sector),显然可以定位数据了,这就是数据定位(寻址)方式之一

**CHS寻址
对早期的磁盘⾮常有效,知道⽤哪个磁头,读取哪个柱⾯上的第⼏扇区就可以读到数据了。
但是CHS模式⽀持的硬盘容量有限,因为系统⽤8bit来存储磁头地址,⽤10bit来存储柱⾯地
址,⽤6bit来存储扇区地址,⽽⼀个扇区共有512Byte,这样使⽤CHS寻址⼀块硬盘最⼤容量
为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是
8.4GB)

1.3 磁盘的逻辑结构

【结论:磁盘是一个以扇区为单位的一维数组】

1.3.1 理解过程

逻辑上我们可以把一面磁盘想象成为卷在⼀起的磁带,把磁带"拉直",形成线性结构,全是扇区

每面磁盘扇区总数相等,每条磁道扇区个数相等。

把多面磁盘按线性结构展开就是一个一维数组 ,确定一个扇区等于确定一个一维数组下标

用数组下标定义任意扇区称为:LBA

但系统不认识LBA只认CHS,所以要把LBA转换成CHS(转换由磁盘自己完成,我们知道磁盘容量就行)

LBA转成CHS:

• 柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】

• 磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数

• 扇区号S = (LBA % 每磁道扇区数) + 1

• "//": 表⽰除取整

例如:告诉我们磁盘有100面,10磁道,有个下标124,如何转成CHS?

124/100=1(H)找到第一面

124%100=24,24/10=2(C)确定磁道

24%10=4(S)确定扇区

这就是把LBA转换成CHS过程。

以上是以面为单位展开,磁盘真实展开 并不以物理盘面展开,而是以柱面为单位展开

1.3.2 真实过程

⼀个细节:传动臂上的磁头是共进退的

柱面 是⼀个逻辑上的概念,其实就是整个磁盘所有盘面的统一磁道。

所以,磁盘物理上分了很多⾯,但是在我们看来逻辑上,磁盘整体是由"柱⾯"卷起来的。

所以,磁盘的真实情况是:

磁道:

某⼀盘⾯的某⼀个磁道展开:

即:⼀维数组

柱⾯:

整个磁盘所有盘⾯的同⼀个磁道,即柱⾯展开:这不就是个二维数组

整盘:整个磁盘不就是多张⼆维的扇区数组表(三维数组)

所以,寻址⼀个扇区:先找到哪⼀个柱⾯(Cylinder) ,在确定柱⾯内哪⼀个磁道(其实就是磁头位置Head),在确定扇区(Sector),所以就有了CHS。

我们之前学过C/C++的数组,在我们看来,其实全部都是⼀维数组:

为什么要用CHS寻址,因为磁盘是三维的有三个下标,下标顺序不能乱!

LBA转换成CHS本质:一维数组下标转换成三个数字【数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了】磁盘就是一个以扇区为单位的一维数组

2、引入文件系统

2.1 引入"块的概念"

其实硬盘是典型的"块"设备 ,操作系统读取硬盘数据的时候,其实是不会**⼀个个扇区地读取,这样效率太低** ,⽽是⼀次性连续读取多个扇区,即**⼀次性读取⼀个"块"(block)** 。

硬盘的每个分区是被划分为⼀个个的"块"。⼀个"块"的大小是由格式化的时候确定的,并且不可更改,最常⻅的是4KB,即连续八个扇区组成⼀个 "块"。"块"是文件存取的最小单位。如下图:

通过上图,当给你一个磁盘总容量,总容量/4KB就知道有多少块,拿着块号++/--往上找不就可以访问任意扇区。

因此,OS看待磁盘认为是一个块设备,每块都有下标,文件OS的角度看待磁盘也是块设备,有两种访问方式:LBA和块号,而LBA又可以转换成块号。

2.2 引入"分区"概念

磁盘是一个个块组成,当磁盘很大OS还是不好管理,所以再分区,如果还大就再分组。把每个组管理好等于把磁盘管理好(分治思想

把磁盘分区后只要知道从哪个块号开始到哪个块号结束为一个分区,也就可以把整个分区内的内容管理好。例如Windows上我们有C、D、E、F盘,实际上我们只有一块物理盘,只是分区把它分成大家所看到的C、D、E、F盘。

2.3 了解分组细节

文件 = 内容 + 属性 对于Linux来说不管是内容还是属性都是数据,既然是数据就要存储。在还没被加载到内存前存放在磁盘中。

1. Linux中内容和属性分开存储

2. OS文件系统中和磁盘进行IO的基本单位是4KB(所以每个数据块大小是4KB)

以上是对文件系统的简要介绍,具体inode如何存储等一系列问题都还没解答!为了知识点的连贯性,统一放在下节ext2文件系统部分详细介绍。


感谢观看,下节再见~

相关推荐
-SGlow-1 小时前
MySQL相关概念和易错知识点(3)(表内容的CURD、内置函数)
linux·运维·服务器·数据库·mysql
君不见~2 小时前
Windows 10 WSL&Ubuntu 22.04 安装并迁移到 F 盘
linux·ubuntu·wsl迁移盘符·wsl迁移
PanYu——BJ2 小时前
CentOS Nginx 1.13.9 部署文档
linux·nginx·centos
UQWRJ2 小时前
菜鸟教程Linux ViVimYumApt笔记
linux·运维·笔记
Ray Song2 小时前
Linux DNS解析3 -- DNS解析代理配置使用
linux·dns解析·dns代理
sz66cm3 小时前
Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table
linux·运维·服务器
努力一点9484 小时前
ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令
linux·运维·服务器·人工智能·gpu算力
UU_Yang5 小时前
Linux跑后台服务
linux·运维·服务器
kfepiza6 小时前
vim的`:q!` 与 `ZQ` 笔记250729
linux·笔记·编辑器·vim