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

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

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

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

image.png
image.png

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

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

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

image.png

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

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

image.png
image.png

B.卸载/dev/vdc1

image.png

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

注:这个方法在大部分场景下都是可以转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必须和删除前一致)

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

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

'''

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.重新挂载下看下分区大小,并检查下数据完整性

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 也拿来作为另一个备份!这样或许会比较安全些吧!
image.png

结构详解:

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

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

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

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

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

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

大概了解一下:LBA2-LBA33

image.png

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

(1)fdisk(MBR)

image.png

(2)gdisk(GPT)

image.png

(3)parted(MBR和GPT通用)

image.png

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

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

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

编辑于

echo

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java相关

MacOS常用软件推荐

16620
来自专栏开源项目

码云推荐 | J2EE 快速开发平台 renren-security-boot

renren-security-boot 是一款基于代码生成器的 J2EE 快速开发平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展;使用 Spring...

46180
来自专栏SpringBoot 核心技术

第四十章:基于SpringBoot & Quartz完成定时任务分布式多节点负载持久化

492120
来自专栏实用工具入门教程

如何部署 Jenkins 服务

Jenkins是一个开源自动化服务器,可以自动执行持续集成和交付软件所涉及的重复技术任务。Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通...

30750
来自专栏技术/开源

开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持自动化测试, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到本地,...

23390
来自专栏Ryan Miao

SpringCloud学习1-服务注册与发现(Eureka)

前言 Oracle转让Java,各种动态语言的曝光率上升,Java工程师的未来在哪里?我觉得Spring Cloud让未来有无限可能。拖了半年之久的Spring...

1.4K70
来自专栏Ryan Miao

SpringCloud2.0入门4-springboot-admin监控

上一节为springboot项目添加springboot-admin监控 学习了基于springboot1.5自己注册到admin的方法。接下来学习结合Eure...

45520
来自专栏IT技术精选文摘

JMeter最多可以模拟多少测试用户数?

本文我们将讨论一个确切说没有准确答案的问题 - 即我们使用Apache JMeter™最多可以模拟多少用户来做测试? 像JMeter本身的限制一样,这样的限制因...

81770
来自专栏bboysoul

ubuntu安装Metasploit Framework(最简单)

这个其实我以前说过ubuntu安装metasploit,就是在github上clone下来安装,但是那种方式安装的话会碰到很多依赖的问题,不方便安装,下面我推荐...

2K40
来自专栏EAWorld

对没有监控的微服务Say No!

目录: 一、监控简介 二、监控策略 三、总结 一、监控简介 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用...

46250

扫码关注云+社区

领取腾讯云代金券