MBR 与 GPT 的区别,以及 parted 的使用,操作大于2T的硬盘分区

介绍了磁盘的mbr和gpt两种分区机制,它们的区别,以及如何使用 parted 程序,来对大于2T的硬盘来分区,因为fdisk程序,不支持对超过2T的硬盘进行操作

在 linux 里面,分区工具有两个,一个是 fdisk,一个是 parted 。

而硬盘,分区的机制有两种,分为两种,一种是 MBR,一种是 GPT 。

MBR,全称 Master Boot Record,称为主引导记录,是一种传统的分区机制,这个分区支持的磁盘大小有限,只可以支持 2T 以下的磁盘分区,(指整个磁盘不超过 2T)超过 2T 的磁盘,也只能划分出 2T 的使用空间,剩余出来的用不了,而 MBR 分区,最多4个分区,因此引出了扩展分区和逻辑分区的概念。这个概念在本站其它的文章中有解说。下面有链接。超过 2T 的磁盘,应当使用 GPT 分区表。

GPT 全称 GUID Partition Table ,称为全局唯一标识分区表,是一种新的分机管理机制,解决了 MBR 分区表机制存在很多缺点,可以支持超过 2T 的硬盘,可以兼容 MBR。

另外一点就是,GPT 分区机制,不再有扩展分区和逻辑分区的概念,只有主分区,GPT 最大支持的分区可以达到 128 个。而扩展分区和逻辑分区,那是 MBR 时代的了。而关于 MBR 的主分区,扩展分区和逻辑分区,可以在本站 fdisk 的使用方法的文章找去看,点此这里查看

而 fdisk 分区管理工具,也只支持 MBR ,所以 fdisk 不能对 GPT 分区表的磁盘操作,而 parted 即支持 MBR 分区表,也可以支持 GPT 分区表。

fdisk 是交互式,parted 可以像 fidsk 一样,即可以使用交换互,也可以使用命令行的模式。使用交换互的话,像 fdisk 一样,后面跟设备名称,然后进入交换模式,而使用命令行模式,则类似于下面这样:

parted /dev/xxx mkpart 0 1000

需要注意的是,parted 不论是使用 交互模式,还是命令行模式,每次执行的命令立即生效,也就是说你,你创建一个分区,立即就会写入磁盘,而不是像 fdisk 那样,最后执行 w 的时候才会保存并写入到磁盘,parted 由于是实时生效,所以也不会有类似 fdisk 那样的 w 命令。这点初学者一定要注意。建议学习的时候使用虚拟机来进行学习。避免因为不熟悉,而靠成了电脑上的数据丢失。

下面来看一个实验。然后再来说一下 parted 的使用。

我在虚拟机里添加一下块磁盘,大小为 60GB,然后并将这个 磁盘 更改为 GPT 分区表,命令如下:

parted /dev/sdb mklabel gpt

若提示命令找不到,在 redhat\centos 等,可以使用如下命令安装 parted

yum -y install parted

debian\ubuntu 等使用如下命令安装 parted

apt-get -y install parted

然后,再使用 查看一下分区

[root@bogon ~]# parted /dev/sdb p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags

[root@bogon ~]#

可以看到,是没有分区的,因为这是一块新添加的硬盘,我们还没有给它创建分区,再使用 fdisk -l 来查看一下

[root@bogon ~]# fdisk -l /dev/sdb

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 1 7833 62914559+ ee GPT
[root@bogon ~]#

这里,可以看到, fdisk 给了一个警告,基内容为 GPT (GUID Partition Table) detected on ‘/dev/sdb’! The util fdisk doesn’t support GPT. Use GNU Parted. 意思是说, fdisk 不支持使用 GPT 分区表的 /dev/sdb 设置,要使用 parted 。

而在上面的分区表打印的信息输出中,我看们看到了一个分区,可是实际上我们还没有创建分区呢,这就是因为 fidsk 不能识别 GPT 分区的原因,所以若是使用 GPT 分区表,不管是怎么分区的,fdisk 都是不可识别的。只能识别到这是一个 GPT 分区。

parted

使用这条命令就可进入交互模式。在交换模式下,介绍几个常用的命令。

select 选择其它设备
print 查看分区(也可以直接使用 p )
mklabel 创建一个分区表
mkpart 创建一个分区
rm 删除一个分区

前面说过,parted 也可以使用命令行模式,而命令行模式,则直接在后面加上交换模式的命令即可,如下面这样

parted /dev/sdb mkpart primary 1 1024

而博主个人,则更喜欢使用命令行的模式。

下面介绍几个常用的实例给大家,具体还需要按自己的需求来了。

将硬盘更改为 mbr 分区表

parted mklabel msdos y

将硬盘更改为 GPT 分区表

parted mklabel gpt y

更改分区表类型,将会清空原有的所有分区,这点大家注意,不要因此造成了数据的丢失。而因为会清除的原有的所有分区,所以parted 程序其实是是会询问你是否继续的,而我在命令后面直接加了 y ,相当于告诉 parted ,你不用来问了,我已经很确定要这么做。至在在实际的环境,要不要加 y 呢?有利也有弊,想必大家心里都有自己的想法。

[root@bogon ~]# parted /dev/sdb mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No?

可以看到,上面这命令我不加 y,程序报了一个 warnning,告诉我,这样操作,将会摧毁这个磁盘的所有数据,并且问我,是否要继续

将所有的容量都划分成一个主分区

parted /dev/sdb primary '1 -1'

创建一个 30 GB的主分区,注意这后面的数字,默认是 MB

parted /dev/sdb mkpart primary 1 30GB

查看分区

parted /dev/sdb print

将剩余的空间全部给某个分区

parted /dev/sdb mkpart primary '30GB -1'

PS:写 -1 的时候,需要将 起始容量和结束的容量用单引号包括起来,为什么要这样呢?因为这个是命令行模式,若不包括起来,会被当成 parted 当成一个参数来处理,因为参数都是用 – 表示, 比如 查看版本,用 parted -v,若是使用交互模式,则不需要这样

删除一个分区

parted /dev/sdb rm 1

后面的数字为分区的标识号,以下说一下 MBR 分区表情况下,创建扩展分区和逻辑分区的命令

创建一个扩展分区

parted /dev/sdb mkpart extended 50GB 100GB

创建逻辑分区

parted /dev/sdb mkpart logical 50GB 80GB

主分区的命令与上面 GPT 的一致。

PS:在使用GPT的时候分区表的时候,不再需要使用逻辑分区和扩展分区,前面我们也已经说过,GPT 的分区最大可以支持到128个,最多4个的分区,那个是 MBR 格式的。

格式化命令:

mkfs.ext4 /dev/sdb1

挂载使用命令:

mount /dev/sdb1 /mnt

/mnt 为你要挂载的目录,可以根据自己的情况来决定。

PS:至于磁盘为什么是 sdb 分区为是sdb1,为什么的一些情况,博主强烈初学者也大家去看一眼我 分区介绍及linux fdisk 使用。文章链接,在本文的前一部分。

 

猜您喜欢