热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

硬盘分区mbrgpt_磁盘阵列如何分区

硬盘分区mbrgpt_磁盘阵列如何分区目录思维导图硬盘的物理结构硬盘读写过程寻址方式CHS寻址LBA寻址硬盘的分区结构MBR分区结构0号扇区内容扩展分区GPT分区结构文件系统文件系

目录


  • 思维导图
  • 硬盘的物理结构
  • 硬盘读写过程
  • 寻址方式
    • CHS寻址
    • LBA寻址
  • 硬盘的分区结构
    • MBR分区结构
      • 0号扇区内容
      • 扩展分区
    • GPT分区结构
  • 文件系统
    • 文件系统的定义
    • 文件系统的结构
  • raid磁盘阵列技术
    • raid -0
    • raid -1
    • raid -5
    • raid -10 和raid -01

思维导图

这里写图片描述
本篇只涉及到导图的右侧,只讲述硬盘的结构

硬盘的物理结构

硬盘的物理结构是比较复杂的,这里我们只需要知道最常用到的几个术语即可,也就是chs寻址中所涉及到的结构


  • 磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。

  • 柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面”,意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

  • 扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。
    硬盘结构图解:
    这里写图片描述


硬盘读写过程

系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,是同一柱面的下一磁头,……,一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。
所以,数据的读/写按柱面进行,而不按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据。读数据也按照这种方式进行,这样就提高了硬盘的读/写效率。

寻址方式

首先,我们需要了解寻址是在干嘛?
当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。
所以当我们需要对磁盘进行读写操作时就涉及到了对磁盘进行定位操作,我们要去找到要存储数据或者取数据的这个扇区,而寻址就是一种定位。更恰当的讲,寻址就是利用CHS告诉你,你住在某栋楼几层几房

CHS寻址

由硬盘结构图我们可以清楚地了解到硬盘三大件的含义,利用这三大件催生出了一种以扇区为单位的寻址方式CHS.知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:

硬盘容量=磁头数×柱面数×扇区数×512字节

CHS是一个三元组,组成如下:
1. 一共24个 bit位。
2. 其中前10位表示cylinder,中间8位表示head,后面6位表示sector。
3. 最大寻址空间

LBA寻址

计算机技术日新月异,由于CHS寻址技术最多只能用于8G大小的硬盘,所以,在如今的生活中我们使用LBA进行寻址。对于LBA寻址,我们只需要知道以下内容


  • LBA采用48个bit位寻址,最大寻址空间128PB。

  • LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号。简单来讲,原本你需要的信息是5栋7层02户,但是现在LBA通过一定的运算,你现在只需要知道你要去第N个房间就好了,由三维的定位,变成了现在的一围定位
    计算公式

    LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1



硬盘的分区结构

我们在linux下经常使用两种分区结构,一种是MBR分区结构,一种是GPT分区结构

MBR分区结构

我们来看下面这张图,当我们对磁盘以MBR的结构进行分区的时候,磁盘的结构就如下图所示
这里写图片描述

0号扇区内容

我们经常把硬盘第一个扇区叫做MBR扇区,这512字节包含三块儿内容


  • 引导代码:引导代码占MBR分区的前446字节,负责整个系统启动。如果引导代码被破坏,系统将无法启动。

  • MBR分区表:引导代码后的64个字节,是整个硬盘的分区表。有四张分区表

  • MBR结束标志:占MBR扇区最后2个字节,一直为“55 AA”。

在分区表中记录分区的起始地址和结束地址(既可以使用CHS寻址也可以使用LBA进行寻址),这两个地址相减就是我们这个分区的实际容量

扩展分区

由于MBR仅仅为分区表保留了64字节的存储空间,而每个分区则占用16字节的空间,也就是只能分4个分区,而4个分区在实际情况下往往是不够用的。因此就有了扩展分区,扩展分区中的每个逻辑分区的分区信息都存在一个类似MBR的扩展引导记录(简称EBR)中,扩展引导记录包括分区表和结束标志“55 AA”,没有引导代码部分。也就是EBR中的前446个字节是空的
扩展分区的结构如下图所示
这里写图片描述
如上图:EBR中分区表的第一项描述第一个逻辑分区,第二项指向下一个逻辑分区的EBR。如果下一个逻辑分区不存在,第二项就不需要了。
MBR分区的结构大致就介绍到这了。如果硬盘的MBR被破坏,可以复制其他硬盘的MBR到故障盘,然后修复分区表,也可以初始化故障盘然后修复分区表。

GPT分区结构

GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点,理论上说,GPT磁盘分区结构对分区的数量好像是没有限制的。但某些操作系统可能会对此有限制。
gpt分区图


  1. 保护MBR
    保护MBR位于GPT磁盘的第一扇区,也就是0号扇区,有磁盘签名,MBR磁盘分区表和结束标志组成,没有引导代码。而且分区表内只有一个分区表项,这个表项GPT根本不用,只是为了让系统认为这个磁盘是合法的。

  2. GPT头
    GPT头位于GPT磁盘的第二个扇区,也就是1号扇区,该扇区是在创建GPT磁盘时生成,其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。

  3. 分区表
    分区表位于GPT磁盘的2-33号扇区,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一共分区,所以允许GPT磁盘创建128个分区。
    每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID。

  4. 分区区域
    GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT分区表定义。

  5. GPT头备份
    GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并非完全GPT头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。

  6. 分区表备份
    分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区。

GPT的分区结构相对于MBR要简单许多,并且分区表以及GPT头都有备份。

文件系统

我们把最初始的硬盘比作一个毛坯房,那么对硬盘进行分区,就相当于给毛坯房通水电,对硬盘进行格式化(添加文件系统),就相当于对毛坯房进行装修。毛坯房只有通水电,装修之后才能住人;同理只有将硬盘进行分区和格式化,硬盘才能够使用。

文件系统的定义

文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

文件系统的结构

我们知道Linux操作系统支持很多不同的文件系统,比如ext2、ext3、XFS、FAT等等,而Linux把对不同文件系统的访问交给了VFS(虚拟文件系统),VFS能访问和管理各种不同的文件系统。所以有了区之后就需要把它格式化成具体的文件系统以便VFS访问。标准的Linux文件系统Ext2是使用「基于inode的文件系统].


  • 我们知道一般操作系统的文件数据除了文件实际内容外,还带有很多属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、 时间参数等),文件系统通常会将属性和实际内容这两部分数据分别存放在不同的区块

  • 在基于inode的文件系统中,权限与属性放置到inode中,实际数据放到data block 区块中,而且inode和data block都有编号.
    这里写图片描述

如上图所示,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序, 这个设计让我们能将不同的引导装载程序安装到个别的文件系统前端,而不用覆盖整个硬盘唯一的MBR, 也就是这样才能实现多重引导的功能


  • 把每个区进一步分为多个块组 (block group),每个块组有独立的inode/block体系如果文件系统高达数百 GB 时,把所有的 inode 和block 通通放在一起会因为 inode 和 block的数量太庞大,不容易管理

  • 分区是用户的分区,实际计算机管理时还有个最适合的大小,于是计算机会进一步的在分区中分块

  • 每个块组实际还会分为分为6个部分,除了inode table 和 data block外还有4个附属模块,起到优化和完善系统性能的作用


raid磁盘阵列技术

前面讲的都是磁盘内部的结构,下面我们来讨论一下多个磁盘如何组合能发挥更大的作用。我们采用raid技术的优点:


  • 提升读写性能

  • 增加容错能力,也就是增加硬盘的可用性


raid -0

这里写图片描述


  • 要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。如果刚好所需要的数据在不同的驱动器上效率最好。它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID0比较合适。

  • 同时,RAID可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么原来读取同样文件的时间被缩短为1/2。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。


raid -1

这里写图片描述
对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作。通过下面的结构图您也可以看到必须有两个驱动器。因为是镜象结构在一组盘出现问题时,可以使用镜象,提高系统的容错能力。它比较容易设计和实现。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。因为RAID1的校验十分完备,因此对系统的处理能力有很大的影响,通常的RAID功能由软件实现,而这样的实现方法在服务器负载比较重的时候会大大影响服务器效率。当您的系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持”热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。

raid -5

这里写图片描述
从它的示意图上可以看到,它的奇偶校验码存在于所有磁盘上,其中的p0代表第0带区的奇偶校验值,其它的意思也相同。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。RAID5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。 但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。

raid -10 和raid -01

这里写图片描述
至少需要4块硬盘
DISK1, DISK2, DISK3, DISK4


  • RAID-01 不可以两边RAID0中各坏一块硬盘,但可以在单边同时坏掉单边的两块硬盘。
    原因:假如DISK1 A1,DISK A2,DISK3 B1, DISK B2
    A(A1,A2) B (B1,B2)
    1.A中和B中的任何一块硬盘同进坏了,则都破坏了RAID0技术。所有整
    个硬盘数据被破坏。因此不允A和B中的任何一个块硬盘同时损坏.
    2.当中A中所有硬盘坏了,因为B中的RAID0的格式保持完整,因做的是
    RAID0+1,I不影响数据的完整性.所以允许A中所有磁盘损坏.同理B也是
    这样.

  • RAID-10可以两边RAID1中各坏一块硬盘,但不能同时坏掉单边的两个硬盘。
    原因:
    1.A中的任何一个硬盘都可以坏,因为做的是RAID1格式,同时B中的任何一
    个硬盘的数据也可坏,因为也做的是RAID1的格式.所以允许A和B中的任何一块硬盘同时损坏,即不影响数据的完整性.
    2.A中(B中)的两块同时硬盘损坏,从图中可以看到,数据无法保持完整性.所
    以不允许单边的两块硬盘同时损坏

但是,当硬盘的数量比较多的时候,能有一个直观的反应就是,使用raid-10会使得服务器的稳定性能更高,具有高可用性。


推荐阅读
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • [软件工具]下载之家4月20日软件更新TOP5小吴整理+技术文章4个
    下载之家-4月20日软件更新TOP5-小吴整理+技术文章4个    下载之家提供下载无限制搜索工具30,  1 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和 ... [详细]
  • python计算数据包校验和(python接口数据校验)
    本文目录一览:1、怎么用python算p值和t检验 ... [详细]
  • 宜搭小技巧|维护Excel太麻烦?Excel一键转应用,为你的工作减负!
    宜搭小技巧|维护Excel太麻烦?Excel一键转应用,为你的工作减负!-简介:只需6步,轻松学会「Excel一键创建应用」!在钉钉的聊天窗口中,每天都会流转数量巨大的Excel ... [详细]
  • mysqli预处理编译的深入理解【MySQL】
    数据库|mysql教程php教程,用户数据库-mysql教程bitsCN.com记得以前php点点通也写过mysqli的预处理的php教学,那时候只是看书乱写的,没懂原理,数月过后 ... [详细]
  • 这家安全厂商避谈“软件定义”,我却要为它的“反骨”点赞
    点击上方“中国云报”可直接关注!已经成立了9年的迪普科技,今年第一次举办大规模的合作伙伴大会。4月20日,以“创享未来,诚献 ... [详细]
author-avatar
泛傲海
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有