前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【linux学习指南】Ext系列文件系统(一)理解硬件磁盘的逻辑结构&&CHS&&LBA地址

【linux学习指南】Ext系列文件系统(一)理解硬件磁盘的逻辑结构&&CHS&&LBA地址

作者头像
学习起来吧
发布2025-01-01 08:46:33
发布2025-01-01 08:46:33
10900
代码可运行
举报
文章被收录于专栏:学习C/++
运行总次数:0
代码可运行

📝理解硬件

🌉 磁盘、服务器、机柜、机房

  • 机械磁盘是计算机中唯⼀的⼀个机械设备
  • 磁盘—外设
  • 容量大,价格便宜

题外话:

  1. 关于机房
  2. 关于磁盘—磁铁

🌉磁盘物理结构

🌉磁盘的存储结构

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

如何定位一个扇区呢?

  • 可以先定位磁头(header)
  • 确定磁头要访问哪一个柱面(磁道) (cylinder)
  • 定位一个扇区(sector)
  • CHS地址定位

⽂件=内容+属性都是数据,⽆⾮就是占据那⼏个扇区的问题!能定位⼀个扇区了,能不能定位多个扇区呢?

代码语言:javascript
代码运行次数:0
复制
sudo fdisk -l
  • sudo fdisk -l 命令用于查看系统的磁盘分区信息。sudo 是用于以超级用户(root)权限执行命令,因为查看磁盘分区信息可能需要较高的权限,fdisk 是一个用于磁盘分区操作的工具,-l 参数表示列出(list)磁盘分区信息。

磁盘设备信息解读

  • /dev/loop* 设备
    • /dev/loop0/dev/loop1 等是循环设备(loop device)。循环设备是一种伪设备,它可以将文件模拟成块设备来使用。这些循环设备通常用于挂载磁盘镜像文件等操作,例如在容器技术(如Docker)或者挂载某些加密的磁盘镜像等场景下会经常看到。
    • /dev/loop0 为例,它的大小是 63.7 MiB,包含 130448 个扇区,每个扇区大小为 512 字节(Sector size (logical/physical): 512 bytes / 512 bytes),最小和最优的I/O大小都是 512 字节。
  • /dev/vda 设备
    • 这是一个实际的物理磁盘设备(在虚拟化环境或者云主机环境下可能是虚拟的物理磁盘)。它的大小是 40 GiB,总共包含 83886080 个扇区,每个扇区同样是 512 字节。
    • 磁盘标签类型(Disklabel type)是 dos,这是一种比较常见的磁盘标签格式,它主要用于兼容传统的基于MS - DOS的分区表格式。磁盘标识符(Disk identifier)是 0xb51ab772,用于唯一标识这个磁盘。
    • 对于 /dev/vda1,这是 vda 磁盘上的一个分区,* 表示这个分区是可引导分区(Boot),它从扇区 2048 开始,到扇区 83886046 结束,包含 83883999 个扇区,分区大小是 40G,分区类型ID是 83,类型是 Linux,这意味着这个分区可能是用于安装Linux操作系统或者存储Linux相关文件系统的数据。

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

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

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

🌠 磁盘的逻辑结构

🌉理解过程

磁带上⾯可以存储数据,我们可以把磁带“拉直”,形成线性结构

那么磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成为卷在⼀起的磁带,那么磁盘的逻辑存储结构我们也可以类似于:

这样每⼀个扇区,就有了⼀个线性地址(其实就是数组下标),这种地址叫做LBA

🌉真实过程

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

柱⾯是⼀个逻辑上的概念,其实就是每⼀⾯上,相同半径的磁道逻辑上构成柱⾯。所以,磁盘物理上分了很多⾯,但是在我们看来,逻辑上,磁盘整体是由“柱⾯”卷起来的。

所以,磁盘的真实情况是: 磁道: 某⼀盘⾯的某⼀个磁道展开:

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

  • 柱⾯上的每个磁道,扇区个数是⼀样的
  • 这不就是⼆维数组吗 整盘:

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

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

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

所以,每⼀个扇区都有⼀个下标,我们叫做LBA(LogicalBlockAddress)地址,其实就是线性地址。所以 怎么计算得到这个LBA地址呢?

LBA,1000,CHS必须要! LBA地址转成CHS地址,CHS如何转换成为LBA地址。

OS只需要使⽤LBA就可以了!!LBA地址转成CHS地址,CHS如何转换成为LBA地址。谁做啊??磁盘 ⾃⼰来做!固件(硬件电路,伺服系统)

🌠CHS&&LBA地址

CHS转成LBA:

  • 磁头数*每磁道扇区数=单个柱面的扇区总数
  • LBA=柱面号C单个柱面的扇区总数+磁头号H每磁道扇区数+扇区号S-1
  • 即:LBA=柱面号C*(磁头数每磁道扇区数)+磁头号H每磁道扇区数+扇区号S- 1扇区号通常是从1开始的,而在LBA中,地址是从0开始的
  • 柱面和磁道都是从0开始编号的
  • 总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参数。

LBA转成CHS:

  • 柱面号C=LBA//(磁头数每磁道扇区数)【就是单个柱面的扇区总数】磁头号H=(LBA %(磁头数每磁道扇区数))/每磁道扇区数
  • 扇区号S=(LBA%每磁道扇区数)+1
  • "/:表示除取整

所以:从此往后,在磁盘使⽤者看来,根本就不关⼼CHS地址,⽽是直接使⽤LBA地址,磁盘内部⾃⼰ 转换。所以:

从现在开始,磁盘就是⼀个元素为扇区的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤ 磁盘,就可以⽤⼀个数字访问磁盘扇区了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📝理解硬件
    • 🌉 磁盘、服务器、机柜、机房
    • 🌉磁盘物理结构
    • 🌉磁盘的存储结构
  • 🌠 磁盘的逻辑结构
    • 🌉理解过程
    • 🌉真实过程
  • 🌠CHS&&LBA地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档