摘取:https://blog.csdn.net/digitalkee/article/details/104226846

# fdisk -l

Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
/dev/hda1 * 1 1217 9775521 c W95 FAT32 (LBA)
/dev/hda2 1218 16555 123202485 5 Extended
/dev/hda5 1218 3042 14659281 b W95 FAT32
/dev/hda6 3043 4867 14659281 b W95 FAT32
/dev/hda7 4868 6692 14659281 83 Linux
/dev/hda8 6693 8517 14659281 83 Linux
/dev/hda9 8518 10342 14659281 83 Linux
/dev/hda10 10343 11559 9775521 b W95 FAT32
/dev/hda11 11560 12776 9775521 83 Linux
/dev/hda12 12777 16424 29302528+ 83 Linux
/dev/hda13 16425 16551 1020096 82 Linux swap
/dev/hda14 16552 16553 16033+ 83 Linux
/dev/hda15 16554 16555 16033+ 83 Linux

  

  以前从来都没有注意也没有去理解上面一部分的描述信息,仔细一看,发现heads的值是255,heads表示可是磁头数啊,而普通硬盘的磁头数最多也就是4个,怎么想也想不明白,于是到网上搜索了一大圈,但收获不大,然后一个同事告诉我,要我去查查CHS(物理寻址)和LBA(逻辑块寻址)它们之间的区别,经过一番搜索,终于明白heads原来是逻辑的数值,fdisk -l看到的sectors和cylinders也是逻辑的值,在LBA模式下,设置的柱面、磁头、扇区等参数并不是实际硬盘的物理参数。只是在访问硬盘时,由IDE控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的物理地址。

  关于硬盘的一些参数解释如下:

  硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。
  *△磁头(Heads)*:每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁头就可以表示数据在哪个磁面。
  *△柱面(Cylinder)*:所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面就是磁道。
  *△扇区(Sector)*:将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

  硬盘容量=磁头数×柱面数×扇区数×512字节~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解释是说磁道就是一个“同心圆”的集合

  那么,我的疑问就是,既然那条线是同心圆,那么两条线之间的那快空白是什么呀? 什么也不是? 空着的? 就是为了分开磁道?晕倒。那这浪费的部分也太多了吧。毕竟两条线中间部分的宽度看起来比磁道可实在是宽太多了。

  后来,查了下别的图片,才发现磁道原来应该是这样子的:不是“同心圆”,应该是“同心圆环”

  到此,我关于磁道的疑问才终于有了答案。 汗自己一个!!!

  后来又联想到了其他的问题:

  每个磁道上的扇区数目是一样的么?
  早期的磁盘每个磁道上的扇区数目是一样,限制了磁盘的容量;后来为了增大磁盘容量采用了新技术,也就是说越往外每磁道扇区数目越多
  早期的硬盘是每个磁道有相同的扇区,但是现在的硬盘采用线性寻址,所以每个磁道上扇区数不一样,外面的多,里面的少.光盘跟硬盘差不多.但是用螺线的.不像硬盘采用同心圆
  不过,还是可以用CHS(柱面,磁道,扇区)的方式来定位, 因为IDE磁盘做了内部转换,让你看起来好像每条磁道上面的簇数量都是一样的

  0磁道是在磁盘的外圈还是内圈?
  由于历史原因 , 磁盘的0磁道在最外圈(过去的老式硬盘,每条磁道上的簇的数量都是一样多的。也就是说最里面和最外面的磁道的簇的数目是一样的。显然,磁密度越低,数据的安全越有保障。而MBR放在0柱面的,第0个磁道的,第1个簇上面,为了这个关键数据的安全,所以磁道要从最外开始安排。)
  但是,光盘的0磁道和磁盘,软盘刚好向盘,光盘的0磁道是在最内圈的
  尽管扇区是能独立寻址的最小单位,但资源分配的最小单位是簇
  所以文件的大小和文件所占用的磁盘空间是不同的。所占用的磁盘空间往往多余文件的大小

  硬盘簇的大小设为多少才合适?
  默认的情况下,在格式化的时侯如果没有指定簇的大小,那么系统会根据分区的大小选择默认的簇值
  其实在NTFS文件系统中格式化的时候,可以在“Format”命令后面添加“/a:UnitSize”参数来指定簇的大小,UnitSize表示簇大小的值,NTFS支持512/1024/2048/4096/8192/16K/32K/64KB
  在NTFS文件系统中,簇的大小会影响到磁盘文件的排列,设置适当的簇大小可以减少磁盘空间丢失和分区上碎片的数量。如果簇设置过大,会影响到磁盘存储效率;反之如果设置过小,虽然会提高利用效率,但是会产生大量磁盘碎片.

磁盘分区的最小单位是磁柱(Cylinder)

磁盘存储的最小单位是扇区(Sector)

文件系统的最小单位是区块(Block)
~~~~~~~~~~~~~~~~~~~~~~~~~
  1. 硬盘物理结构现代硬盘(非固态硬盘SSD)通常由一个或多个圆形盘片组成,每个盘片都是两面存储的(还记得以前的软盘有双面双密之说),通过机械臂上的磁头进行数据读写操作。一个硬盘的参数通常称之为 3D 参数 (Disk Geometry),即柱面数(Cylinder)、磁头数(Head)和扇区数(Sector)。

  磁头: 磁头固定在可移动的机械臂上,用于读写数据。现代硬盘都是双面可读写,因此磁头数量等于盘片数的 2 倍。磁头数最大值为 255 (8 个二进制位)。

  磁道: 每个盘面都有 n 个同心圆组成,每个同心圆称之为一个磁道。由外向内分为 0 磁道到 n 磁道。

  柱面: n 个盘面的相同磁道 (位置相同) 共同组成一个柱面。柱面数最大为 1023 (10 个二进制位)。

  扇区: 从磁盘中心向外画直线,可以将磁道划分为若干个弧段。每个磁道上一个弧段被称之为一个扇区。扇区是硬盘的最小组成单元,通常是 512 字节。磁道上的扇区数最大为 63 (6 个二进制位)。

  在老式硬盘中,尽管磁道周长不同,但每个磁道上的扇区数是相等的,越往圆心扇区弧段越短,但其存储密度越高。不过这种方式显然比较浪费空间,因此现代硬盘则改为等密度结构,这意味着外围磁道上的扇区数量要大于内圈的磁道,寻址方式也改为以扇区为单位的线性寻址。为了兼容老式的 3D 寻址方式,现代硬盘控制器中都有一个地址翻译器将 3D 寻址参数翻译为线性参数。

  硬盘的存储容量公式:

  存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

3D 寻址参数:

  ×× 磁道(柱面),×× 磁头,×× 扇区

我们注意到Linux的分区是按柱面来划分的。

$ sudo fdisk -l /dev/sda
[sudo] password for yuhen:
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000f31e8
Device Boot Start End Blocks Id System
/dev/sda1 * 1 993 7976241 83 Linux
/dev/sda2 994 1044 409657+ 5 Extended
/dev/sda5 994 1044 409626 82 Linux swap / Solaris

  

2. 引导区信息

  硬盘的第一个扇区被称之为 Boot Sector。由 MBR (MasterBoot Record)、DPT (Disk Partition Table) 和 Boot Record ID 三部分组成。

  MBR 又称作主引导记录,占用 Boot Sector 的前 446 个字节(0 ~ 0x1BD)。存放系统主引导程序,负责从活动分区中装载并运行系统引导程序。

  DPT 即主分区表,占用 64 个字节 (0x1BE ~ 0x1FD),记录了磁盘的基本分区信息。主分区表分为四个分区项,每项 16 字节,分别记录了每个主分区的信息 (因此最多可以有 4 个主分区)。

  Boot Record ID 即引导区标记,占用两个字节 (0x1FE ~ 0x1FF)。对于合法引导区,它等于 0xAA55,这是判别引导区是否合法的标志。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  fdisk能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等;然后对分区进行格式化所需要的文件系统;这样一个分区才能使用;
  通过fdsik -l 查看硬盘分区详情:

---------------------------------------------------------------------------------------------------------------------------------

Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 140 1020127+ 83 Linux
/dev/hda3 141 267 1020127+ 83 Linux
/dev/hda4 268 1044 6241252+ 5 Extended
/dev/hda5 268 332 522081 82 Linux swap / Solaris
/dev/hda6 333 1044 5719108+ 83 Linux Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/sda doesn't contain a valid partition table

  

======================================================================================

heads 磁盘面
sectors 扇区
cylinders 柱面

每个扇区大小是512byte(0.5K)
硬盘体积=heads*sectors*512*cylinders

硬盘分区的步骤:
主分区(包括扩展分区) 最大4个
逻辑分区 最大16个
主分区(包含扩展分区)的个数由硬盘的主引导记录MBR(Master Boot Recorder)决定,MBR存放启动管理程序和分区表记录
扩展分区也算一个主分区,用以包含更多的逻辑分区,接着从4开始
逻辑分区是从5开始

主分区有3个,从hda1-hda3,扩展分区由hda5-hda6
逻辑分区是hda5-hda6

分区前,先列出硬盘信息

~~~~~~~~~~~~~~~~~~~~~~~~

硬盘寻址方式

  硬盘有两种寻址模式,一种就是C/H/S(Cylinder/Head/Sector)寻址模式,也可以称为三维地址模式,这是硬盘最早采用的寻址模式,当时硬盘的容量还非常小,人们采用与软盘类似的结构生产硬盘,也就是硬盘盘片的每一条磁道都具有相同的扇区数,由此产生了所谓的3D参数(Disk Geometry),既磁头数(Heads)、柱面数(Cylinders)、 扇区数(Sectors),以及相应的寻址方式。

  在老式硬盘中,由于每个磁道的扇区数相等(与软盘一样),所以外磁道的记录密度要远低于内磁道,因此会浪费很多磁盘空间。为了解决这一问题,进一步提高硬盘容量(C/H/S寻址的容量是有限制的,后面会提到),人们改用等密度结构生产硬盘,也就是说,外圈磁道的扇区比内圈磁道多。采用这种结构后,硬盘不再具有实际的3D参数,寻址方式也改为线性寻址,即以扇区为单位进行寻址,这种寻址模式叫做LBA,全称为Logic Block Address(即扇区的逻辑块地址)。

  扇区的三维物理地址与硬盘上的物理扇区一一对应,即三维物理地址可完全确定硬盘上的物理扇区。

  

  而在LBA方式下,系统把所有的物理扇区都按照某种方式或规则看做是一个线性编号的扇区,即从0到某个最大值方式排列,并连成一条线,把LBA作为一个整体来对待,而不再是具体的实际的C/H/S值,这样只用一个序数就确定了一个惟一的物理扇区,显然线性地址是物理扇区的逻辑地址。

  为了与使用C/H/S寻址的老软件兼容(如使用BIOS Int13H接口的软件)在硬盘控制器内部安装了一个地址翻译器,由它负责将C/H/S参数翻译成LBA地址。

  那么LBA地址到底如何与实际的C/H/S值相对应呢?如何把C/H/S地址转换为LBA地址,把LBA地址转换成C/H/S值呢?

  首先,我们来了解一下从C/H/S到LBA线性地址的转换规则。由于系统在写入数据时是按照从柱面到柱面的方式,在上一个柱面写满数据后才移动磁头到下一个柱面,并从柱面的第一个磁头的第一个扇区开始写入,从而使磁盘性能最优,所以,在对物理扇区进行线性编址时,也按照这种方式进行。即把第一柱面(0柱)第一磁头(0面)的第一扇区(1扇区)编为逻辑“0”扇区,把第一柱面(0柱)第一磁头(0面)的第二扇区(2扇区)编为逻辑“1”扇区,直至第一柱面(0柱)第一磁头(0面)的第63扇区(63扇区)编为逻辑“62”扇区,然后转到第一柱面(0柱)第二磁头(1面)的第一扇区(1扇区),接着上面编为逻辑“63”扇区,0柱面所有扇区编号完毕后转到1柱面的0磁头1扇区,依次往下进行,直至把所有的扇区都编上号。

  另外还要注意C/H/S中的扇区编号从“1”至“63”,而LBA方式下扇区从“0”开始编号,所有扇区顺序进行编号。

  掌握了这个关系,我们就可以列出公式来对两种寻址模式进行相互转换。

  从C/H/S到LBA的转换公式:

  这里规定用

C表示当前柱面号,

H表示当前磁头号,

S表示当前扇区号,

CS表示起始柱面号,HS表示起始磁头号,SS表示起始扇区号,PS表示每磁道扇区数,PH表示每柱面磁道数,所以公式为:

  LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)

  一般情况下,CS=0,HS=0,SS=1,PS=63,PH=255。

下面带入几个值验证一下:

  当C/H/S=0/0/1时,代入公式得LBA=0

  当C/H/S=0/0/63时,代入公式得LBA=62

  当C/H/S=0/1/1时,代入公式得LBA=63

  这里不再过多验证,请读者自己进行跟多值的验证,下面来看从LBA到C/H/S的转换关系。

  首先介绍两种运算DIV和MOD(这里指对正整数的操作)。DIV称做整除运算,即被除数除以除数所得商的整数部分。比如,3 DIV 2=1,10 DIV 3=3;MOD运算则是取商的余数。比如,5 MOD 2=1,10 MOD 3=1。DIV和MOD是一对搭档,一个取整数部分,一个取余数部分。

  各参数仍然按上述假设进行,则从LBA到C/H/S的转换公式为:

  C=LBA DIV (PH﹡PS)+CS

  H=(LBA DIV PS)MOD PH+HS

  S=LBA MOD PS+SS

同样可以带入几个值进行验证:

  当LBA=0时,代入公式得C/H/S=0/0/1

  当LBA=62时,代入公式得C/H/S=0/0/63

  当LBA=63时,代入公式得C/H/S=0/1/1

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/icesnows/archive/2010/09/13/5880074.aspx

硬盘的结构: < XMLNAMESPACE PREFIX ="O" />
硬盘的结构和软盘差不多,是由磁道 (Tracks)、扇区(Sectors)、柱面 (Cylinders)和磁头(Heads)组成的。

  拿一个盘片来讲,它和软盘类似,上面被分成若干个同心圆磁道track,每个磁道track被分成若干个扇区sector,每扇区sector通常是512字节。              
  硬盘的磁道数track一般介于300-3000之间,每磁道的扇区数通常是63,而早期的硬盘只有17个。

磁道 、扇区、柱面cylinder
  和软盘不同的是,硬盘由很多个磁片叠在一起,柱面指的就是多个磁片上具有相同编号的磁道track,它的数目和磁道是相同的。
  硬盘的容量如下计算: 硬盘容量=柱面数×扇区数×每扇区字节数×磁头数 标准IDE接口最多支持1024个柱面,63个扇区,16个磁头,这个最大容量为1024×63×16×512= 528,482,304字节,即< XMLNAMESPACE PREFIX ="ST1" />528M;

fdisk -l 的输出
Disk /dev/hda: 82.3 GB, 82347195904 bytes
总共的硬盘大小
255 heads, 63 sectors/track, 10011 cylinders
255 个磁头 , 每个磁道 63 个扇区 ,10011 个柱面
Units = cylinders of 16065 * 512 = 8225280 bytes
每个柱面的大小 = 255 个磁头 ( 相当于每个柱面由 255 个同心圆的磁道构成 ) * 每个磁道 63 个扇区 * 每个扇区 512 字节
即 = 255 * 63 * 512 字节
= 8225280
则整个硬盘的大小 = 柱面数 * 每个柱面的大小 = 10011 *  8225280 = 80 G

  

关于fdisk -l的更多相关文章

  1. fdisk -l 找不到分区怎么办?想办法找到隐藏分区。

    centos6.6 装系统的时候,选取系统默认分区.装好后发现少了一大部分空间,通过fdisk -l 找不到分区,另外使用 parted -l 同样找不到消失的柱面. 如: [root@mysql]# ...

  2. fdisk -l查看硬盘分区信息及硬盘分区介绍

    原文:https://blog.csdn.net/a1809032425/article/details/79692035 linux fdisk 命令和df区别是什么? fdisk工具是分区工具:d ...

  3. fdisk -l 参数详解

    [root@node1 ~]# fdisk -l Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors // 扇区个数 Unit ...

  4. fdisk -l解析

    fdisk -l显示信息详解 [root@www.linuxidc.com ~]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 hea ...

  5. fdisk -l不显示磁盘信息的问题

    新建了个ubuntu虚拟机,进去后使用fdisk查看磁盘信息居然没反应,嗯?这是怎么回事 别急,这是因为fdisk命令在/sbin目录下,使用root权限才可以运行. 由于是新建的虚拟机,按以下方法设 ...

  6. 【Linux】fdisk -l发现有加号"+"

    今天分区不够了,打算扩下分区,想起当时创建机器的时候还有大约80多个G没有用,今天打算重新利用上 就用了fdisk /dev/sda 创建了两个分区,但是发现分区下面有加号,感到而别的困惑 最后在很多 ...

  7. Linux命令学习—— fdisk -l 查看硬盘及分区信息

    Linux命令学习(3)-- fdisk -l 查看硬盘及分区信息注意:在使用fdisk命令时要加上sudo命令,否则什么也不能输出linux fdisk 命令和df区别是什么? fdisk工具是分区 ...

  8. sudo fdisk -l

      施其振 2015/1/31 22:06:26 第一行十大5 施其振 2015/1/31 22:06:39 第一行sda5 施其振 2015/1/31 22:06:49 是你的固态硬盘 施其振 20 ...

  9. 启动分区查找可以通过 fdisk -l命令

    这里有两个硬盘,一个硬盘有两个分区,sda1 的boot列 带*表示是启动分区,否则为空

  10. 详解Linux获取启动盘路径命令--fdisk、sfdisk -l、lsblk

    概述 linux引导磁盘路径可以用于任何问题的故障诊断.这个引导分区或路径包含GRUB配置的Linux引导装载程序.那么我们可以怎么找到当前Linux引导磁盘路径呢? 基本上有三种方法可以找到当前Li ...

随机推荐

  1. React后台管理系统 02样式初始化,引入reset-css

    上一篇中,我们已经对项目的整体结构进行了搭建,现在需要对不需要的东西进行删除,最后留下这些东西. 现在需要对全部的样式进行清除,使用命令导入依赖:npm i reset-css 然后在main.tsx ...

  2. PHP代码获取网址参数的数据,请收藏。

    <? echo $_SERVER['HTTP_HOST']."<br>"; #localhost echo $_SERVER['PHP_SELF']." ...

  3. CSS_相关问题及解决_持续更新

    css_margin塌陷问题 问题描述 <div class="father"> <div class="child1"></di ...

  4. CS144 LAB5~LAB6

    CS144 lab5~6 最后两个lab了,虽然很多大佬都说剩下的两个lab比起TCP的实现,"简直太简单了",但是我认为做这两个之前需要补充一些额外的网络知识,不然直接上手去做的 ...

  5. 用 Hugging Face 推理端点部署 LLM

    开源的 LLM,如 Falcon.(Open-)LLaMA.X-Gen.StarCoder 或 RedPajama,近几个月来取得了长足的进展,能够在某些用例中与闭源模型如 ChatGPT 或 GPT ...

  6. Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框

    Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框 本文是项目中关于 弹窗界面 设计的技术分享,通过 FluentAvalonia+Dialo ...

  7. npm install -g 错误集锦

    1.切换源安装:npm config set registry http://registry.cnpmjs.org,参考http://yijiebuyi.com/blog/b12eac891cdc5 ...

  8. Module build failed: TypeError: this.getOptions is not a function at Object.loader

    这个问题主要是因为node-loader版本过高导致的问题 解决方案 css-loader降为3.6.0版本即可 npm install css-loader@2.0.2 --save-dev npm ...

  9. 关于微信小程序原生组件与uniApp混合开发过程遇到的问题与解决方式

    前言: 在实际开发过程中,尤其是小程序的开发,我们常常会遇到一些在文档中解决不了的问题,在这里,我就浅谈一下我遇到的一些问题 1.小程序的构建框架是uni-app,却突然被要求用原生的微信小程序代码来 ...

  10. Cilium系列-12-启用 Pod 的 BBR 拥塞控制

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...