Linux下数据无损动态修改MBR分区表格式为GPT

个人博客站点:https://www.hiecho.cn

1.简介

腾讯云官网中有一篇帮助文档“扩容Linux文件系统,https://www.qcloud.com/document/product/362/6738,讲解了GPT分区云硬盘扩容后修改分区指引和MBR分区云硬盘扩容后修改分区指引。其中MBR分区扩容下,若扩容后的空间已经大于2TB则不可选择。官网文档没有涉及到MBR的分区扩展到2T以上该怎么处理。

注:写在文前。不管任何形式的扩容硬盘,最好都事先做好硬盘数据的快照,避免手误或者其他因素造成数据丢失。数据无价!!!

2.下面讲解数据无损动态调整MBR的分区为GPT

(1)fdisk -l  /dev/vdb  && partprobe -s

Linux下数据无损动态修改MBR分区表格式为GPT

(2)下面以/dev/vdc这块盘做讲解,新建了一个/dev/vdc1分区,并且格式化为ext3文件系统。

fdsik -l /dev/vdc && mkfs.ext3 /dev/vdc1

Linux下数据无损动态修改MBR分区表格式为GPT

(3)下面我在控制台把/dev/vdc这块硬盘扩容到2T以上,并且重新挂载。

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

(4)接下来看一下,在MBR分区表下,扩容/dev/vdc1到2.5T能不能行?

Linux下数据无损动态修改MBR分区表格式为GPT

这里看到只能扩容到2TB。gg

(5)显然这是MBR分区表的局限。MBR分区表共512个字节。前446字节包括boot loader信息和grub引导信息,还有64字节的磁盘分区信息,以及2个字节的结束标志。而每个主分区要在分区表里占用16字节。所以单个硬盘只能分64/16个主分区。至于为什么每个分区不能超过2TB,请看下图。

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

(6)接下来说一下我这个数据无损在线动态调整MBR为GPT方法吧。注:不管是怎么扩容硬盘,扩容前都建议对云硬盘做一下快照。

A.为了证明数据真的无损,我们新建几个file。最后再来看一下数据情况。

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

B.卸载/dev/vdc1

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

C.用gdisk(安装方法:yum install gdisk)把MBR分区格式转换程GPT分区格式(MBR不支持2T以上大小)

Linux下数据无损动态修改MBR分区表格式为GPT

注:这个方法在大部分场景下都是可以转mbr为gpt的,只有磁盘开头前33个扇区,或最后34个扇区被分区占用的场景不支持。我们的硬盘分区时,默认是从2048扇区开始分的,所以一般不会出现前34个扇区被占用,客户控制台扩容实体云硬盘之后,后33扇区也不存在被占用。所以绝大多数情况下前34后33分区都不会被占用。除非客户主动刻意去占用。这里可以通过part ed 硬盘--unit s--p查看硬盘前34分区有没有被占用。

D.使用parted删除vdc1,并重新创建vdc1(fdisk不支持超过2TB大小,注意记住删除前vdc1的start sector,创建新的vdc1的时候start sector必须和删除前一致)

Linux下数据无损动态修改MBR分区表格式为GPT

E.目前还需要扩展下分区,才能挂载正常显示分区大小。

Linux下数据无损动态修改MBR分区表格式为GPT

注:这里也可能会遇到下面这种情况

'''

root@bobo ~# e2fsck -yf /dev/vdc1

e2fsck 1.42.9 (28-Dec-2013)

The filesystem size (according to the superblock) is xxx blocks

The physical size of the device is xxx blocks

Either the superblock or the partition table is likely to be corrupt!

Abort? yes

'''

这里是检测到分区表变化了,询问是否放弃修复,并不是报错。这里我加y这个参数的原因在于,如果出现错误直接fix。如果遇到了这种情况,可以直接用这个命令e2fsck -f /dev/vdb1直接修复分区就ok。

F.重新挂载下看下分区大小,并检查下数据完整性

Linux下数据无损动态修改MBR分区表格式为GPT

3.GPT分区的优越性(GUID partition table, GPT 磁盘分区表。)

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

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

结构详解:

LBA0:和传统MBR分区一样,仍然为主引导记录

LBA1:我们称之为“主分区头”

LBA2-33:共计32个扇区,我们称之为“主分区节点”

LBA-1:我们称之为“备份分区头”,它就是“主分区头”的一个Copy

LBA-2-33:共计32个扇区,我们称之为“备份分区节点”,它就是“主分区节点”的一个Copy

LBA34:正常的GPT分区内容,文件系统(如:FAT,NTFS,EXT等)就是构建在这里面。

大概了解一下:LBA2-LBA33

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

4.常用的分区处理的工具

(1)fdisk(MBR)

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

(2)gdisk(GPT)

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

(3)parted(MBR和GPT通用)

Linux下数据无损动态修改MBR分区表格式为GPT

image.png

注:gdisk和fdisk最好不要混用,不要用fdsik处理gpt分区,也不要用gdisk处理mbr分区,一不小心,数据搞没了,后悔都来不及。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

上一篇:【Linux】MBR磁盘分区表只能有四个分区?


下一篇:P2V conversion on Windows Server 2012 R2 failed