描述:

1,什么是磁盘分区

  磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区(Partition),不同类的目录与文件可以存储进不同的分区。

2,硬盘结构及参数

  3D参数(Disk Geometry):CHS(Cylinder/Head/Sector) 

  C-Cylinder(柱面):柱面数表示硬盘每面盘片上有几条磁道,最大为1024(用10个二进制位储);

  H-Head(磁头):磁头数表示硬盘总共有几个磁头,也就是几面盘片,最大为256(用8个二进制位存储);

  S-Sector(扇区):扇区数表示每条磁道上有几个扇区,最大为63(用6个二进制位存储)。

  Track(磁道):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道

  LBA:逻辑区块地址,是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备


3,分区方式:

  linux中有两种分区方式:MBR和GPT

MBR: (Master Boot Record)主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备,使用32位表示扇区数。

  特点:

     MBR支持32位和64位系统

     MBR支持分区数量有限

     MBR只支持不超过2T的硬盘,超过2T的硬盘将只能用2T空间(有第三方解决方法)


GPT:GUID(Globals Unique Identifiers)Partition Table 全局唯一标识,是一个较新的分区机制,解决了MBR很多缺点。

   使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

支持超过2T的磁盘(64位寻址空间),使用64位,支持128个分区,支持8Z(512Byte/block )64Z(4096Byte/block)。fdisk最大只能建立2TB大小的分区,创建一个大于2TB的分区使用parted,gdisk分区工具

   特点: 

       向后兼容MBR

       必须在支持UEFI的硬件上才能使用(Intel提出,用于取代BIOS)

       必须使用64位系统

       Mac、Linux系统都能支持GPT分区格式

       Windows 7/8 64bit、Windows Server 2008 64bit支持GPT


MBR分区

  分区划分基于磁盘柱面,利用参考柱面号码的方式来处理,从CentOS6开始已经支持采用扇区的方式来划分分区。

  其实所谓的“分区”只是针对那个64bytes 的分区表进行设置而已;

  硬盘默认的分区表仅能写入四组分区信息;

  这四组分区信息我们称为主(Primary)分区或扩展(Extended)分区;

  所以,MBR的分区方式为:4个主分区或{3主分区+1扩展(N个逻辑分区)}

MBR分区GPT分区详解_第1张图片

常用分区方式:

MBR分区GPT分区详解_第2张图片

MBR分区GPT分区详解_第3张图片

MBR分区GPT分区详解_第4张图片

MBR分区GPT分区详解_第5张图片


MBR引导扇区结构

0磁道0扇区:第一个扇区512bytes MBR引导扇区

  主引导程序(boot loader):446bytes, 可以安装引导加载程序

  主分区表(partition table):64bytes,记录整块硬盘分区的状态

        16bytes: 标识一个分区,一共只能分4个分区(主+扩展)

  结束标识:  2 bytes, 55AA ,MBR区域的有效性标识;55AA为有效


主分区表所在的64个bytes容量中,每16个bytes分为一个项,总共分为四组记录区,每组记录区记录了该区段的起始与结束的柱面号码,等信息

分区结构:

MBR分区GPT分区详解_第6张图片

  BYTE State:分区状态,00=未激活,80=激活(注意此项);

  BYTE StartHead:分区起始磁头号;

  WORD StartSC:分区起始扇区和柱面号。

  BYTE Type:分区类型,如0x0B=FAT32,0x83=Linux等,00表示此项未用;

  BYTE EndHead:分区结束磁头号;

  WORD EndSC:分区结束扇区和柱面号,定义同前;

  DWORD Relative:在线性寻址方式下的分区相对扇区地址(对于基本分区即为绝对地址);

  DWORD Sectors:分区大小(总扇区数)。


什么是扩展分区?

   所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘


扩展分区结构:扩展引导记录(EBR)+ 逻辑分区

  注:扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录( Extended Boot Record, EBR)


扩展引导扇区(EBR):类似于MBR的扩展引导记录,扩展引导记录包括一个扩展分区表和该扇区的标签.

   扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息,但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。

EBR结构:

   逻辑分区前扇区,如扩展分区0号扇区(512bytes)

    前446bytes:未使用,全为0;

扩展分区表(64bytes):记录分区状态,每16bytes分为一个项,共四个项。

    第一项:指向它自身的引导扇区;

    第二项:指向下一个逻辑驱动器的EBR

        注:如果不存在进一步的逻辑驱动器,第二项不会使用,且被记录成一系列零。

    第三项:未使用

    第四项:未使用

结束标识(2bytes): 55AA ,有效性标识;55AA为有效


GPT分区:

  GPT:全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体磁盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的     一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。

  GPT分配64bits给逻辑块地址,因而使得最大分区大小在2-1个扇区成为了可能。对于每个扇区大小为512字节的磁盘,那意味着可以有9.4ZB(9.4 x 10字节)或8ZiB-512字节 

MBR分区GPT分区详解_第7张图片


LBA0:保护性MBR,

 在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR叫做保护性MBR(Protective MBR)。其中包含有磁盘签名,MBR分区表,结束标志。这里没有引导代码,分区表中只有一个分区表项,GPT不会用到,这个分区项只是为了让系统认为磁盘是合法的。


LBA1:主要GPT头部:

  主要GPT头部位于1号扇区,会定义分区表的起始位置,结束位置,分区表项个数;

分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。


LBA2-33:分区表项

  分区表位于GPT磁盘的2-33号扇区,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一个分区,所以GPT磁盘可以创建128个分区。

  GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。


LBA34:分区区域

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


LBA -33~-2:分区表备份

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


LBA -1:GPT头备份

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


GPT分区优点:

   与目前普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。它具有如下优点:

1、支持2TB以上的大硬盘。

2、每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区)。

3、分区大小几乎没有限制。

4、分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过

  另一份恢复;

5、循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率;

6、虽然MBR提供1字节分区类型代码,但GPT使用一个16字节的全局唯一标识符(GUID)值来标识分区

  类型,这使分区类型更不容易冲突;

7、每个分区可以有一个名称(不同于卷标)。


总结:

1,对于新的磁盘进行分区,最多只能划分4个主分区(三主+1扩展),分区号1-4是留给主分区的,分区号5,6,7...是留给逻辑分区的,若主分区不足4个,逻辑分区的编号也是从5开始

wKiom1fCaoCBMKEsAAAO0Ia5Ylk151.png

wKioL1fCaoHBL9sBAAAVxsc6v0s584.png

wKioL1fCaoHQo7xxAAAjkgTI1-M252.png

2,使用lsblk可以查看当前系统所有的磁盘分区情况

3,在不关机情况下实现添加新磁盘并显示在系统中的步骤:

  a,扫描磁盘,在命令行中输入如下命令

    echo "- - -" > /sys/class/scsi_host/host2/scan 

  b,查看系统磁盘情况

   # lsblk 

  c,查看分区

   # fdisk -l /dev/sd[a-z]

  d,查看mbr

   # hexdump  -C -n 512 /dev/sd[a-z]

  e,备份mbr (以/dev/sda为例,目录已事先存在,if是“in filesystem”,of是“of filesystem”,bs是“block size”,count是总数

   dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512

  f,查看是否备份成功

   hexdump  -C -v /testdir/mbrbak 

  g,恢复mbr (恢复至新添加的磁盘/dev/sdd的主引导分区)

   dd if=/testdir/mbrbak of=/dev/sdd 

  h,查看/dev/sdd的主引导分区

   fdisk /dev/sdd -l


4,破坏boot loader之后的恢复 (先备份在/testdir/mbrbak目录下)

  a,查看磁盘分区标识:

   hexdump  -C -n 512 /dev/sdd

  b,破坏boot loader

   dd if=/dev/zero of=/dev/sdd bs=1 count=446

   hexdump  -C -v -n 512 /dev/sdd

  c,清除分区标识

   dd if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510 seek=510 

   hexdump  -C -v -n 512 /dev/sdd

   fdisk -l /dev/sdd

  d,恢复分区标识

   dd if=/testdir/mbrbak  of=/dev/sdd bs=1 count=2 skip=510 seek=510

  e,恢复分区表

   dd if=/dev/zero  of=/dev/sdd bs=1 count=64 skip=446  seek=446

   hexdump  -C -v -n 512 /dev/sdd


5,查看磁盘分区表

 fdisk -l 

6,查看内核中的分区表

 cat /proc/partitions

 lsblk

 ls /dev/sd*


7,centos6中如何在新增和删除分区后同步显示分区表

  增加分区,同步分区表

   partx -a /dev/sda

  删除分区,同步分区表

   partx -d --nr 6-8 /dev/sda