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

一.引言

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

二.相关知识点

2.1 MBR

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

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

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

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的分区下。具体如下图:

其他安装、操作过程,大同小异。

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 针对不同规格的存储设备,分区工具的选择也是有要求的,这一点需要特别注意。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

SpringBoot开发案例之整合ActiveMQ实现秒杀队列

在实际生产环境中中,通常生产者和消费者会是两个独立的应用,这样才能通过消息队列实现了服务解耦和广播。因为此项目仅是一个案例,为了方便期间,生产和消费定义在了同一...

2K4
来自专栏乐沙弥的世界

基于Linux (RHEL 5.5) 安装Oracle 10g RAC

    本文所描述的是在Red Hat 5.5下使用vmware server 来安装Oracle 10g RAC(OCFS + ASM),本文假定你的RHEL...

1563
来自专栏快乐八哥

Angular企业级开发(4)-ngResource和REST介绍

一、RESTful介绍 ? RESTful维基百科 REST(表征性状态传输,Representational State Transfer)是Roy Fie...

1957
来自专栏微信公众号:Java团长

Java Web现代化开发:Spring Boot + Mybatis + Redis二级缓存

Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一。Mybatis是一个十分轻量好用的ORM框架。Red...

3052
来自专栏大闲人柴毛毛

手把手0基础项目实战(三)——教你开发一套电商平台的安全框架

写在最前 本文是《手把手项目实战系列》的第三篇文章,预告一下,整个系列会介绍如下内容: 《手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(S...

4726
来自专栏青玉伏案

JavaEE开发之记事本完整案例(SpringBoot + iOS端)

上篇博客我们聊了《JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎》,并且在之前我们也聊了《Swift3.0服务端开发(五...

2265
来自专栏用户2442861的专栏

使用IntelliJ IDEA开发SpringMVC网站(四)用户管理

转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 。

2671
来自专栏Gaussic

使用IntelliJ IDEA开发SpringMVC网站(四)用户管理 顶

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

2142
来自专栏菩提树下的杨过

IBM WebSphere MQ 7.5基本用法

一、下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必...

4228
来自专栏Gaussic

使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 顶

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

2712

扫码关注云+社区

领取腾讯云代金券