RHEL7.X系列及周边Linux发行版中,关于MBR与GPT的选择一些思考与建议

一.引言

存储的选型、规划与管理等工做一直以来都是平常系统运维工做中的重点。MBR与GPT两种类型的分区表的选择与使用则是在磁盘管理中须要根据应用场景来注或考虑的要点。结合笔者多年的运维工做经验,引起了对这些问题的一些思考,借此文进行一些分享。linux

二.相关知识点

2.1 MBR

主引导记录(Master Boot Record,缩写:MBR),又叫作主引导扇区,是计算机开机后访问硬盘时所必需要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深刻讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。所以,在使用“主引导记录”(MBR)这个术语的时候,须要根据具体状况判断其究竟是指整个主引导扇区,仍是主引导扇区的前446字节。ios

主引导扇区记录着硬盘自己的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。若是它受到破坏,硬盘上的基本数据结构信息将会丢失,须要用繁琐的方式试探性的重建数据结构信息后才可能从新访问原先的数据。主引导扇区内的信息能够经过任何一种基于某种操做系统的分区工具软件写入,但和某种操做系统没有特定的关系,即只要建立了有效的主引导记录就能够引导任意一种操做系统(操做系统是建立在高级格式化的硬盘分区之上,是和必定的文件系统相联系的)。centos

对于硬盘而言,一个扇区可能的字节数为128×2n(n=0,1,2,3)。大多状况下,取n=2,即一个扇区(sector)的大小为512字节。bash

2.2 GPT

全局惟一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代我的计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB(2.2×1012字节)的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,而且将他们的容量较大的磁盘升级到4KB的扇区,这意味着MBR的有效容量上限提高到16 TiB。 这个看似“正确的”解决方案,在临时地下降人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,于是使得最大分区大小在264-1个扇区成为可能。对于每一个扇区大小为512字节的磁盘,那意味着能够有9.4ZB(9.4×1021字节)或8 ZiB个512字节(9,444,732,965,739,290,426,880字节或18,446,744,073,709,551,615(264-1)个扇区×512(29)字节每扇区)。数据结构

2.3 MBR与GPT的关系

与支持最大卷为2TB(Terabytes)而且每一个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的类型相比,GPT磁盘分区样式支持最大为128个分区,一个分区最大18EB(Exabytes),只受到操做系统限制(因为分区表自己须要占用必定空间,最初规划硬盘分区时,留给分区表的空间决定了最多能够有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不一样,相当重要的平台操做数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提升分区数据结构的完整性。在UEFI系统上,一般是经过ESP分区中的EFI应用程序文件启动GPT硬盘上的操做系统,而不是活动主分区上的引导程序。架构

在RHEL7系列及周边发行版中,MBR类型的分区表是系统缺省配置,如需使用GPT类型的分区表,还须要进行特殊配置(下文会进行介绍)。运维

三.实验过程

3.1 在CentOS7.5中以GPT类型安装操做系统

默认状况下,CentOS7系列是以MBR类型的分区表来安装操做系统的,若是不经过特殊设置,那么在GUI安装界面没法选择GPT分区表类型的。在安装操做系统选择的引导界面,讲光标移到第一行,按下Tab键,插入一个空格,输入inst gpt,按下回车键,继续引导,便可将操做系统安装到分区表类型为GPT的分区下。具体以下图:
GPT
其余安装、操做过程,大同小异。ide

3.2 查看、磁盘或分区的经常使用工具

[root@gpt ~]# lsblk
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0                   2:0    1    4K  0 disk
sda                   8:0    0   10G  0 disk
├─sda1                8:1    0    1M  0 part
├─sda2                8:2    0    1G  0 part /boot
└─sda3                8:3    0    9G  0 part
  ├─centos_gpt-root 253:0    0    8G  0 lvm  /
  └─centos_gpt-swap 253:1    0    1G  0 lvm  [SWAP]
sr0                  11:0    1 1024M  0 rom
[root@gpt ~]# fdisk -l /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
磁盘 /dev/sda:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
Disk identifier: 3B24C802-3FC5-4D42-9D76-F9D7250B310B
#         Start          End    Size  Type            Name
 1         2048         4095      1M  BIOS boot
 2         4096      2101247      1G  Microsoft basic
 3      2101248     20969471      9G  Linux LVM
[root@gpt ~]# parted /dev/sda print
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 10.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: pmbr_boot
Number  Start   End     Size    File system  Name  标志
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1076MB  1074MB  xfs
 3      1076MB  10.7GB  9661MB                     lvm
[root@gpt ~]# cfdisk /dev/sda
                                                                          cfdisk (util-linux 2.23.2)
                                                                          磁盘驱动器:/dev/sda
                                                                     大小:10737418240 字节,10.7 GB
                                                       磁头数:255  每磁道扇区数:63        柱面数:1305

        名称                       标志                     分区类型               文件系统                            [标签]                         大小 (MB)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        sda1                       启动,不可用              主分区                GPT                                                                 10737.42               *

以上内容主要展现了lsblk、fdisk、parted、cfdisk等四款工具。lsblk主要用于查看磁盘及分区状况,fdisk为较为经常使用的分区工具,支持2TB如下容量的磁盘的分区操做,若是超过2TB以上容量的磁盘,则须要使用parted来进行分区,cfdisk则是一款比较容易上手的分区工具。这些工具在以前的文章中有介绍,能够查阅以前文章。工具

3.3 MBR类型的分区表使用心得

[root@mbr ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0               2:0    1    4K  0 disk
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk
sdc               8:32   0    1G  0 disk
sdd               8:48   0    1G  0 disk
sde               8:64   0    1G  0 disk
sr0              11:0    1 1024M  0 rom
[root@gpt ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
设备      Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      501759      249856   83  Linux
/dev/sdb2          501760      706559      102400   83  Linux
/dev/sdb3          706560      911359      102400   83  Linux
/dev/sdb4          911360     1105919       97280   83  Linux
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@mbr ~]# partprobe
[root@mbr ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0               2:0    1    4K  0 disk
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk
├─sdb1            8:17   0  244M  0 part
├─sdb2            8:18   0  100M  0 part
├─sdb3            8:19   0  100M  0 part
└─sdb4            8:20   0   95M  0 part
sdc               8:32   0    1G  0 disk
sdd               8:48   0    1G  0 disk
sde               8:64   0    1G  0 disk
sr0              11:0    1 1024M  0 rom

从上面的实验,咱们能够看出,MBR类型的分区表在使用过程当中会形成h 储空间的浪费。也就是说,一块磁盘,建立了4个主分区,若是4个主分区的空间使用总和小于磁盘实际可用空间,那么就没法再继续进行分区操做,所以是没法充分利用这些磁盘空间的。布局

删除这些分区后,从该磁盘第4个分区开始,系统默认使用扩展分区,经过扩展分区新建分区,存储空间浪费的状况一样存在。

[root@mbr ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0               2:0    1    4K  0 disk
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk
├─sdb1            8:17   0  100M  0 part
├─sdb2            8:18   0  100M  0 part
├─sdb3            8:19   0  100M  0 part
├─sdb4            8:20   0    1K  0 part
├─sdb5            8:21   0   10M  0 part
├─sdb6            8:22   0   10M  0 part
└─sdb7            8:23   0   77M  0 part
sdc               8:32   0    1G  0 disk
sdd               8:48   0    1G  0 disk
sde               8:64   0    1G  0 disk
sr0              11:0    1 1024M  0 rom

下面依然使用fdisk对磁盘sdb进行分区,可是把磁盘的分区表类型改为了GPT,部分结果以下:

[root@gpt ~]# fdisk -l /dev/sdb
命令(输入 m 获取帮助):g
Building a new GPT disklabel (GUID: 757B3774-B7F0-4650-80B1-EAA13E59C602)
将显示/记录单位更改成盲区。
命令(输入 m 获取帮助):n
分区号 (1-128,默认 1):
第一个扇区 (2048-2097118,默认 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097118,默认 2097118):+100M
已建立分区 1
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
Disk identifier: 757B3774-B7F0-4650-80B1-EAA13E59C602
#         Start          End    Size  Type            Name
 1         2048       206847    100M  Linux filesyste
[root@mbr ~]# partprobe
[root@mbr ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0               2:0    1    4K  0 disk
sda               8:0    0   10G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0    9G  0 part
  ├─centos-root 253:0    0    8G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk
├─sdb1            8:17   0  100M  0 part
├─sdb2            8:18   0  100M  0 part
├─sdb3            8:19   0  100M  0 part
├─sdb4            8:20   0  100M  0 part
├─sdb5            8:21   0  100M  0 part
├─sdb6            8:22   0  100M  0 part
└─sdb7            8:23   0  423M  0 part
sdc               8:32   0    1G  0 disk
sdd               8:48   0    1G  0 disk
sde               8:64   0    1G  0 disk
sr0              11:0    1 1024M  0 rom

从操做过程当中,咱们可用看到,分区号1-128,与前文所述一致。磁盘分区以后可用空间与实际空间差距不大,存储空间浪费较小。

四.总结

4.1 在RHEL7.X系列及周边发行版中,在磁盘空间小于2TB的系统安装过程当中采用的默认的分区类型是MBR,如需使用GPT还需特殊设置。

4.2 对于存储空间大于2TB的存储设备,尽可能在使用GPT类型的分区表,避免形成存储空间的浪费。

4.3 在存储设备的使用以前,要明确用途,对数据的总量有一个整体性的把握。

4.4 在基于VMware、KVM等技术架构的云计算平台中,磁盘空间的扩展尽可能以独立磁盘设备的形式进行扩展,尽可能减小在原磁盘上进行空间扩展这一类操做。由于在前文已经说起,默认状况下RHEL7.X的磁盘分区类型为MBR。也就是说,在原磁盘上进行空间扩展的话,每次都新建主分区,那么最多只能扩展4次,即便后期以扩展分区进行扩展,规划不慎,也是会形成存储空间的浪费。这一点笔者在过去两三年的运维生涯中深有感悟。

4.5 针对不一样规格的存储设备,分区工具的选择也是有要求的,这一点须要特别注意。

相关文章
相关标签/搜索