关于gpt和mbr无损格式转换操作记录

一,缘起

1,某服务器磁盘空间不足,需要扩容,联系运营商在原盘基础上增加了容量。(两种方式,1增加数据盘,2在原盘上扩容,根据情况选择适合的)

2,扩容后发现原盘已经是2T,增加了1T,一共3T,但磁盘格式原来使用的是MBR,导致无法识别超过2T的容量。

3,因原盘上存在大量生产数据且不是LVM的模式挂载,必须保留无损,不能使用直接删除分区重建等方式,所以需要无损转换。

二,操作过程

扩容的磁盘为 /dev/sdb ,从2T扩到3T,在使用分区为 /dev/sdb1,挂载在 /data

1,从MBR转为GPT

1.1,工具安装:

yum install cloud-utils-growpart gdisk

1.2,查看原盘信息,记住磁盘格式TYPE的值:ext4/xfs等。(附:xfs格式不支持动态缩容文件系统)

df -T /dev/sdb1
# Filesystem     Type 1K-blocks  Used Available Use% Mounted on
# /dev/sdb1      ext4   5773632 23460   5433840   1% /dbdata

1.3,停止所有该磁盘上应用,并解除挂载

umount /data

1.4,转换分区格式

gdisk /dev/sdb    #转换磁盘

#GPT fdisk (gdisk) version 0.8.10
#Partition table scan:
#  MBR: not present
#  BSD: not present
#  APM: not present
#  GPT: not present
#
#Creating new GPT entries.

Command (? for help): w     #写

#Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
#PARTITIONS!!

Do you want to proceed? (Y/N): y #确认

#OK; writing new GUID partition table (GPT) to /dev/sdb.
#The operation has completed successfully.

1.5,重建原分区,【此步骤极为重要,必须先重建原分区大小,再进行扩容,不能一步到位,否则数据全部丢失。】

parted /dev/sdb

#GNU Parted 3.1
#Using /dev/sdb
#Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) unit s                                                           
(parted) p                  #查看原分区信息           
                                            
#Model: Msft Virtual Disk (scsi)
#Disk /dev/sdb: 14680064s
#Sector size (logical/physical): 512B/4096B
#Partition Table: gpt
#Disk Flags: 
#
#Number  Start  End        Size       File system  Name  Flags
# 1      2048s  14678015s  14675968s  ext4
# 记录此start和end,确保新分区也使用相同的值。且start不能是33,34等值

(parted) rm 1                #删除1号分区,适用于当前只有一个分区的情况                                             
(parted) mkpart              #创建分区                                             
Partition name?  []?         #分区名                                             
File system type?  [ext2]? ext4   #分区格式,保持原格式一致或不输入(未确认)                                        
Start? 2048                  #开始位置,使用上面的值                                            
End? 14678015                #结束位置,确保使用上面的结束位置                                            
(parted) quit                #退出生效               

1.6,扩容原磁盘(可选,只是转格式此步骤不用执行)

#扩容分区
growpart /dev/sdb 1
#可能会出现此问题 unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]

#是因为操作系统语言为中文导致,修改为英文再次执行即可

#查看当前语言
echo $LANG  
#zh_CN.UTF-8

#修改为en_US.UTF-8
export LANG=en_US.UTF-8 

#使用growpart扩容分区
growpart /dev/sdb 1   
#CHANGED: partition=1 start=2048 old: size=11997953 end=12000001 new: size=14677982 end=14680030

#扩容文件系统
resize2fs /dev/sdb1 

1.7,转换格式和扩容完成后操作

1.7.1,恢复挂载,检查数据是否正常

1.7.2,启动应用检查日志是否异常,应用服务是否正常。

1.8,报错信息处理

1.8.1,Warning! Secondary partition table overlaps the last partition by 33 blocks!

在虚拟机上测试是因为反复转换磁盘格式产生的问题;

另一个原因是服务器扩容磁盘以后没有刷新出来容量,需要解除挂载重新挂,直到看到完整的扩容后磁盘容量,再执行就没有这个错误了。

解决方法:(谨慎操作,只在虚拟机测试上面验证过)

gdisk /dev/sdb 

输入:

x -> z -> y * 2

2,从GPT转为MBR
parted /dev/sdb 
  mktable #重建分区表
    msdos #分区类型,提示警告

#Warning: The existing disk label on /dev/vdb will be destroyed and all data on
this disk will be lost. Do you want to continue?

  quit #退出生效

fdisk /dev/sdb #重新用fdisk分区

 n    w

mkfs.ext4 /dev/sdb1 #格式化为原分区一样的格式

三,提示:

数据无价,涉及此类操作前务必做好备份和在测试环境反复测试,以上方法不确保能绝对无损。

20240126线上扩容完整操作正常扩容

挂载后发现分区大小还是原来的,再扩容文件系统

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值