zoukankan      html  css  js  c++  java
  • 磁盘分区

    分区
    1、分区的概念
    针对MSDOS-MBR分区表格式,分区有主要分区和延伸分区2种。
    (1)主要(Primary)分区:由第一扇区(一般512Bytes大小)中的分区表(partition table,总共64Bytes)决定的分区都是主要分区,最多可以分成4个主要分区。

    以windows为例,一块磁盘是可以被分成多个分区的(partition),以旧有的Windows观点来看,你可能会有一颗磁盘并且将他分区成为C:, D:,E:盘对吧!那个C, D, E就是分区(partition)啰。
    Linux的设备都是以文件的型态存在,那分区的文件名又是什么?
    磁盘连接的方式与设备文件名的关系(以Linux为例)
    人计算机常见的磁盘接口有两种, 分别是SATA与SAS接口,还有USB接口,目前(2015)的主流是SATA接口。
    由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的, 因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式。 所以SATA/USB接口的磁盘根本就没有一定的顺序,那如何决定他的设备文件名呢? 这个时候就得要根据Linux核心侦测到磁盘的顺序了!
    例题:
    如果你的PC上面有两个SATA磁盘以及一个USB磁盘,而主板上面有六个SATA的插槽。
    这两个SATA磁盘分别安插在主板上的SATA1, SATA5插槽上, 请问这三个磁盘在Linux中的设备文件名为何?
    答:由于是使用侦测到的顺序来决定设备文件名,并非与实际插槽代号有关,因此设备的文件名如下:
    1. SATA1插槽上的文件名:/dev/sda
    2. SATA5插槽上的文件名:/dev/sdb
    3. USB磁盘(开机完成后才被系统捉到):/dev/sdc


    (2)延伸(Extended)分区:由第一扇区(一般512Bytes大小)中的分区表(partition table,总共64Bytes)决定,并且分区表中被标记为延伸标签的就是延伸分区。

    延伸分区与主要分区的区别是:
    ①延伸分区在第一扇区中的分区表中被标记了延伸标签;
    ②一个延伸分区可以再划分为多个逻辑分区,再划分逻辑分区的信息存在本延伸分区中;
    ③延伸分区不支持格式化。

    (3)逻辑分区:由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)

    2、分区表和分区表的格式
    那么分区表又是啥?
    其实你刚刚拿到的整颗硬盘就像一根原木,你必须要在这根原木上面切割出你想要的区段, 这个区段才能够再制作成为你想要的家具!
    如果没有进行切割,那么原木就不能被有效的使用。 同样的道理,你必须要针对你的硬盘进行分区,这样硬盘才可以被你使用的!

    分区表有MSDOS(MBR) 与 GPT 这两种格式。
    MSDOS(MBR) 与 GPT 磁盘分区表(partition table):

    (A)MSDOS-MBR格式的分区表:
    早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。
    MBR格式分区表的数据只存在于第一扇区,仅有一份。

    (B)GPT格式的分区表:
    因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分区格式与限制不太相同啦!
    GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!
    GPT格式分区表的数据有2份互备,第一扇区的数据丢失后,还可以从备份数据找回。

    一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。
    与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!

    (1)MSDOS (MBR) 分区表格式与限制:
    早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 (旧的磁盘扇区都是 512Bytes 喔!),所以说,第一个扇区 512Bytes 会有这两个数据:
    1)主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes。
    2)分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes。
    由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。
    若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:

    假设上面的硬盘设备文件名为/dev/sda时,那么这四个分区在Linux系统中的设备文件名如下所示, 重点在于文件名后面会再接一个数字,这个数字与该分区所在的位置有关喔!
    P1:/dev/sda1
    P2:/dev/sda2
    P3:/dev/sda3
    P4:/dev/sda4
    上图中我们假设硬盘只有400个柱面,共分区成为四个分区,第四个分区所在为第301到400号柱面的范围。
    当你的操作系统为Windows时,那么第一到第四个分区的代号应该就是C, D, E, F。
    当你有数据要写入F盘时, 你的数据会被写入这颗磁盘的301~400号柱面之间的意思。
    由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。
    根据上面的图示与说明,我们可以得到几个重点信息:
    1)其实所谓的“分区”只是针对那个64 Bytes的分区表进行设置而已!
    2)硬盘默认的分区表仅能写入四组分区信息
    3)这四组分区信息我们称为主要(Primary)或延伸(Extended)分区
    4)分区的最小单位“通常”为柱面(cylinder)
    5)当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理


    (2)GPT 磁盘分区表
    因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。
    与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!
    详细的结构有点像下面的模样:

    LBA0 (MBR 相容区块)
    LBA1 (GPT 表头纪录)
    LBA2-33 (实际纪录分区信息处)
    从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512Bytes,因此每笔纪录用到 128Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说,他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意 1ZB= 230TB 啦! 你说有没有够大了?
    GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!


    3、如何进行磁盘分区?
    盘片上面又可细分出扇区(Sector)与磁道(Track)两种单位,其中扇区的物理量设计有两种大小,分别是 512Bytes 与 4KBytes。
    所有盘片的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区的最小单位啦!

    (1)MSDOS (MBR) 分区表格式——分出4个主要分区,即P+P+P+P分区模式


    (2)MSDOS (MBR) 分区表格式——分出1个主要分区、1个延伸分区(再细分成5个逻辑分区),即P+E(L+L+L+L+L)分区模式
    由于P(primary)+E(extended)最多只能有四个,其中E最多只能有一个。

    又如:P+P(L+L)

    (3)GPT分区表格式——分成n个主要分区。

    4、目前的 BIOS 与 UEFI分别是啥?
    BIOS:
    一个写入到主板上的一个固件(再次说明, 固件就是写入到硬件上的一个软件程序,由组合语言编写的)。
    这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。

    UEFI:
    取代BIOS的新固件,界面和交互体验更加的友好。
    由于BIOS 不懂 GPT分区表,为了解决这个问题,因此就有了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。
    UEFI是传统BIOS的替代产物,也称 UEFI 为 UEFI BIOS。近几年生产的计算机硬件基本上都集成了UEFI的固件。
    UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发!
    与传统的 BIOS 不同,UEFI 简直就像是一个低阶的操作系统。

    参考:https://baijiahao.baidu.com/s?id=1627358879605845999&wfr=spider&for=pc

    5、win7和Linux如何分别查看分区表格式(MSDOS-MBR和GPT)?

    (1)win7查看分区表格式:

    调出工具

    diskpart

    调出信息

     list disk

    判断信息中的最后一列(GPT列),如果没有,表示为MSDOS-MBR格式。如果有*号,表示为GPT格式。

    (2)针对Linux查看分区表格式:

    调出信息

    parted  -l

    查看信息。如果有msdos字样,表示为MSDOS-MBR格式。如果有gpt,表示为GPT格式。

    参考:https://jingyan.baidu.com/article/9c69d48fea19ca13c9024e0f.html

    6、开机流程:
    1) 一开机,并不是直接读硬盘,而是从主板的BIOS启动。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!(BIOS的ROM中程序通过硬件加载到内存,来检测相关硬件是否安装正确)
    2) BIOS只从硬盘去读取第一个扇区(第一开机扇区)的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序。此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序(boot loader)的工作了。
    3) 这个开机管理程序(boot loader)的目的是在载入(load)核心文件, 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件, 然后接下来就是核心文件的工作,开机管理程序与 BIOS 也功成圆满,将之后的工作就交给大家所知道的操作系统啦!

    完整流程如下:
    bios->boot sector->boot loader->kernel(后面两个以后再说)

    这么点大小肯定装不下操作系统~所以只好用boot sector来转让计算机使用的权力了。
    于是我们就清楚了boot sector的作用:读入硬盘上的其他程序(kernel,可开机的核心文件),并将cpu交给它。

    Linux的开机流程参考:https://www.jianshu.com/p/847853e940d1

    术语:
    BIOS:一个写入到主板上的一个固件(再次说明, 固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
    boot sector:开机扇区。默认是第一扇区(512 Bytes),也称第一boot sector。其中包含446 Bytes的MBR(master boot record,主引导记录),而MBR的本质就是开机管理程序(boot loader),如:grub1、grub2等。第一扇区还包含分区表(64 Bytes)。
    开机扇区也可以是其他分区的一个扇区。
    boot loader:开机管理程序(boot loader),位于开机扇区中,默认为MBR中,也可以在其他分区的开机扇区中。
    kernel:可开机的核心文件,另一个扇区,和开机扇区在同一个磁盘分区中。

    在上图中我们可以发现,MBR的开机管理程序提供两个菜单,
    菜单一(M1)可以直接载入Windows的核心文件来开机;
    菜单二(M2)则是将开机管理工作交给第二个分区的开机扇区(boot sector)。
    当使用者在开机的时候选择菜单二时, 那么整个开机管理工作就会交给第二分区的开机管理程序了。
    当第二个开机管理程序启动后,该开机管理程序内(上图中)仅有一个开机菜单,因此就能够使用Linux的核心文件来开机啰。
    这就是多重开机的工作情况啦!我们将上图作个总结:
    1) 每个分区都拥有自己的开机扇区(boot sector)
    2) 图中的系统盘为第一及第二分区,
    3) 实际可开机的核心文件是放置到各分区内的!
    4) loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
    5) loader可直接指向或者是间接将管理权转交给另一个管理程序。

    延伸:
    盘片的物理知识:
    1、扇区(Sector):是最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512Bytes与 4K 两种格式;
    2、柱面(Cylinder):将扇区组成一个圆,那就是柱面;
    早期的分区主要以柱面为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码喔,就好像座位一样);
    3、磁盘分区表:主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的GPT 分区表。
    4、MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot record,MBR)及分区表(partition table), 其中 MBR 占有 446 Bytes,而 partition table 则占有 64 Bytes。
    5、GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。

    那么是否每个扇区都一样重要呢?
    其实整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息!
    由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。
    因此,如果整颗硬盘的第一个扇区(就是MBR与partition table所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了! 因为系统如果找不到分区表,怎么知道如何读取柱面区间呢?

  • 相关阅读:
    电源积累
    电感的分类及作用
    电容退耦原理分享
    电容选型
    上拉电阻
    LVTTL与LVCMOS区别
    可重入函数与不可重入函数
    永不改变的PCB设计黄金法则
    os_cpu_a.asm
    [原创]Getting Started with Skywalking
  • 原文地址:https://www.cnblogs.com/andy9468/p/12938972.html
Copyright © 2011-2022 走看看