专栏首页echoLinux下数据无损动态修改MBR分区表格式为GPT
原创

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 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 云开发校园技术布道师----云常工:基于云数据库的高校信息发布网

    想要在一个小程序里就能看到学校校内举办的所有活动;最好是能官网的和社团的都能看到,以及一些周边发起的好玩活动

    用户6935401
  • SAP Spartacus中使用到的Angular ModuleWithProviders类型

    FunctionConstructor的定义,和JavaScript里的Function构造器类似:

    Jerry Wang
  • 多元函数微分法及其应用

    李小白是一只喵
  • Redis源码阅读之rdb.c

    REDIS_RDB_ENC_LZF |compressed_len | original_len | compressed_string

    chain
  • spring中@value注解需要注意

    首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("$...

    ZhangXianSheng
  • 基于SSM的教师管理系统 -- 源码下载

    数据维护:包括教师个人信息、教学获奖、发表论文、科研项目、指导竞赛、海外培训、进修项目、教学学时与调课等数据的增删改查,保存各类图片;

    剽悍一小兔
  • SAP Spartacus routing参数的权重和HTTP校验逻辑

    末位的productCode之前的参数,即使在url里手动改成一个并不存在的值,也不会影响Spartacus的路由:

    Jerry Wang
  • RobotFramework接口测试方案

    Robot Framework是用于验收测试和回归测试的通用测试自动化框架。它使用易于理解的表格数据语法,非常友好的实现了关键字驱动和数据驱动模式。它的测试功能...

    赵云龙龙
  • 高质量编码-实现基于html的参数配置

    Web前端编程中为了方便代码的复用性,扩展性和易读性,往往需要配置参数。现在多数都是通过json文件来配置。往往人们过于关注表面,优化的根本是业务的优化,代码本...

    MiaoGIS
  • Linux的常用指令

    在CentOs下useradd与adduser是没有区别的都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。

    大学里的混子

扫码关注云+社区

领取腾讯云代金券