一,缘起
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线上扩容完整操作正常扩容
挂载后发现分区大小还是原来的,再扩容文件系统