zoukankan      html  css  js  c++  java
  • MBR分区表为什么最大只能识别2TB硬盘容量

    1. 前言

    最近公司的服务器硬盘坏了,需要换一个新的硬盘,容量是2TB,用的fdisk进行分区,期间搜索分区工具,看到了关于MBR(Master Boot Record)与GPT(GUID partition table)硬盘分区表的一些区别,其中说到MBR分区表最多只能管理2TB的容量,对此查了一下《鸟哥的私房菜》发现是简化过的,并没有解决疑惑,于是查了一些资料,总结如下。

    2. 机械硬盘的结构

    2.1. 基本结构

    机械硬盘主要由磁盘盘片、磁头(header)、主轴与传动轴等组成,数据就存放在磁盘盘片中,实际图片如下:

    2-1Q012154JE59

    值得注意的是,硬盘是上下磁头的,也就是一个盘片有两个磁头进行操作,如下图所示:

    2-1Q012154TC11

    2.2. 磁道、扇区和柱面

    机械硬盘的逻辑结构主要分为磁道、扇区和柱面,如下图所示:

    2-1Q01215492WL


    什么是磁道(track)?每个盘片都在逻辑上有很多的同心圆,最外面的同心圆就是 0 磁道。我们将每个同心圆称作磁道,硬盘的磁道密度非常高,通常一面上就有上千个磁道。但是相邻的磁道之间并不是紧挨着的,这是因为磁化单元相隔太近会相互产生影响。

    扇区(sector)又是什么呢?扇区其实是很形象的,大家都见过折叠的纸扇吧,纸扇打开后是半圆形或扇形的,不过这个扇形是由每个扇骨组合形成的。在磁盘上每个同心圆是磁道,从圆心向外呈放射状地产生分割线(扇骨),将每个磁道等分为若干弧段,每个弧段就是一个扇区。每个扇区的大小是固定的,为 512Byte扇区也是磁盘的最小存储单位

    柱面(cylinder)又是什么呢?如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道。具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面,如下图所示。

    2-1Q012155002627

    硬盘的大小是使用"磁头数 x 柱面数 x 扇区数 x 每个扇区的大小"这样的公式来计算的。

    3. MBR分区表的结构

    MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台。它位于磁盘的0号扇区(一扇区等于512字节),是一个重要的扇区(简称MBR扇区)。

    MBR扇区由以下几个部分组成:

    • 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes;
    • 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes
    • MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”

    v2-039771e933fc23590ca888821fd6903f_r

    可以看到分区表只有64字节,最多只能有4个主分区或者3个主分区1个扩展分区。

    那么每个分区表项占有16个字节,如果是记录起始扇区id,也不止2T的容量啊。这就需要了解一下分区表的结构和硬盘的寻址方式了。

    如下图所示,为MBR分区表的详细结构:

    可以看到,这里使用了柱面(cylinder),磁头(header),扇区(sector)三个变量进行寻址,这种寻址方式称为CHS,这里表示的地址已经不是物理地址,而是逻辑地址了,又称为LARGE寻址方式,在这种方式下,

    硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)

    那如果磁头数足够多,岂不是可以管理无限的容量?答案当然是否定的,我们看到上表的最后两项,如下图所示:

    可以看到两个以4字节表示分区之前以及本分区的扇区数,也就是可以表示的最大扇区数为:

    2^32=4294967296

    而每个标准扇区的容量为512字节,于是能表示的最大容量为:

    4294967296*512
    =2199023255552Bytes(硬盘厂商采用1:1000进行单位换算,因此也有2.2TB一说
    =2147483648 KB
    =2097152 MB
    =2048 GB
    =2TB

    在网上还可以找到另外一个答案:

    由于它(MBR)是为32位操作系统设计的,这就限制了它的寻址范围为2的32次方个扇区……

    其实这种说法是不严谨的,准确来说,MBR分区表最大最大能容纳2T容量的主要原因,是因为分区表中的本分区表之前使用的扇区数以及分区的总扇区数这两个字段为4字节,因此导致的限制。

    尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍然用16个字节存储。

     

    4. 参考

    硬盘结构(机械硬盘和固态硬盘)详解

    MBR与GPT

    全是干货:MBR分区结构以及GPT分区结构

    《鸟哥的linux私房菜》

    (完)

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/harrymore/p/13782261.html
Copyright © 2011-2022 走看看